我正在尝试制作一个实时的浏览器内着色器编写工具,但自定义属性有问题。你可以看到我们在这里得到了什么:78.46.211.78/index.html
顶点着色器和片段着色器窗口是不言自明的,最终渲染也是如此。界面通道是一段代码,在渲染之前每帧都会执行,以便我们可以在其中进行更改。现在,在界面通道中,我们可以通过右键单击并选择适当的选项来定义属性、制服和变量(Javascript 全局变量)。制作新属性或制服时,以[type][name]的形式输入,其中type为“f”、“v3”等。
这会将属性和制服添加到附加到材质的属性和制服的哈希中(每次更改着色器都会创建一个新材质)。
关于front on,我要警告的另一件事是我实现的快捷方式:A 是属性的散列,U 是制服,J 是变量,O 是场景中的对象。
下面是如何重现我的问题:右键单击界面通道窗口,选择添加新属性,在提示符处键入“f 位移”。这会在顶点着色器中创建一个新的属性浮点值,并在接口通道中创建一段辅助代码,如下所示:
for(var i = 0; i < O.sphere.geometry.vertices.length; i++) {
A.displacement.value[i] = 1.0;
}
A.displacement.needsUpdate = true;
现在,转到顶点着色器并更改它:
attribute float displacement;
void main() {
gl_Position = projectionMatrix *
modelViewMatrix * vec4(position,1.0);
}
进入
attribute float displacement;
void main() {
gl_Position = projectionMatrix *
modelViewMatrix * vec4(position,displacement);
}
......它不会工作。检查时可以看到所有需要的源代码。我检查了参考资料——材料确实参考了所需的数组。不过,我从未见过 needsUpdate = true 生效。控制台中会出现错误,因为在您键入时会发生代码编译,但是一旦您完成句子,这些就会停止,所以不要害怕。