shader - 片段着色器的 Spark AR 脚本中的点积错误
问题描述
当我使用less than
带有s[0]
. 如果我评论以下内容,它会起作用:s[0] = R.add(s[0], R.mul(cV, cV));
。
我知道上述操作的结果是正确的,因为如果我在纹理中绘制像素,它会正确显示。我认为这是数据类型的问题,但是没有任何警告就很难修复它。
谢谢你的帮助 !
const R = require('Reactive');
const S = require('Shaders');
const Textures = require('Textures');
const Diagnostics = require('Diagnostics');
Promise.all([
Textures.findFirst('cameraTexture0')
]).then(res => {
const cameraColor = res[0].signal;
const uv = S.fragmentStage(S.vertexAttribute({
'variableName': S.VertexAttribute.TEX_COORDS
}));
const c = S.textureSampler(cameraColor, uv);
const cV = R.pack3(c.x, c.y, c.z);
const s = [R.pack3(0, 0, 0)];
s[0] = R.add(s[0], R.mul(cV, cV));
let min_sigma2 = 100;
const sigma2 = R.dot(s[0], R.pack3(1, 1, 1));
Diagnostics.log('1'); // showing
const condition = R.lt(sigma2, min_sigma2);
Diagnostics.log('2'); // not showing
})
解决方案
我深入研究了您的代码。我不知道为什么变量 s 被定义为一个数组,但是这两行不能确定。
const s = [R.pack3(0, 0, 0)];
s[0] = R.add(s[0], R.mul(cV, cV));
反应变量 s[0] 不能依赖于自身。
也许你想做这样的事情?
const zeroPack3 = R.pack3(0, 0, 0);
const s = R.add(zeroPack3, R.mul(cV, cV));
我也同意你的观点,问题很可能出在数据类型上。您可以更详细地查看变量的实际数据类型,例如使用Diagnostics.log (sigma2);
您可以看到它是ShaderSignal
,然后将其与 进行比较 ScalarSignal
。
推荐阅读
- php - 为什么 php.ini 中的 memory_limit 不更新内存大小?
- php - 如何清理 WordPress URL 并删除获取参数名称?
- html - 使用选中的单选按钮制作具有 3 种不同颜色的进度条
- sql - 如何返回带有结果的表
- python - 使用域名对数据框列中的电子邮件进行排序
- python - 将作为列表列表的字符串转换为列表列表
- flutter - 在具有 Future、异步、等待在 Firestore 添加的函数中返回 int - Flutter
- elixir - Elixir 计算元组的总和
- ruby-on-rails - Rails 6.1重定向NoMethodError:未定义的方法`new_with_args'
- android - kotlin-从一个片段更改多个片段的小数位