着色器忽略位置变量
Shader ignoring position variable
我有一个带有以下着色器的平面:
<script type="x-shader/x-vertex" id="vertexshader">
varying vec3 col;
void main()
{
col = vec3( position.z, position.z, 1 );
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
</script>
<script type="x-shader/x-fragment" id="fragmentshader">
varying vec3 col;
void main()
{
// set color for the current vertex
gl_FragColor = vec4(col, 1);
}
</script>
我将飞机移离相机,如下所示:
function renderFrame()
{
cube.position.z -= 1;
requestAnimationFrame( renderFrame );
renderer.render(scene, camera);
};
问题是我会假设因为立方体在移动,所以片段着色器的位置值会改变,但事实并非如此。 'position' 变量不会传递对象在 3D 中的当前位置 space 吗?如果没有,我如何检测它的位置和旋转,或者我必须使用统一变量手动将此信息传递给着色器?
工作示例:http://webgl.demised.net/experiments/003_Shaders.php
此外,着色器是在初始化时执行一次还是在每帧执行一次?
顶点着色器中的position
变量是一个顶点属性。顶点属性通常从位于 GPU 内存中的顶点缓冲区读取。因此,应尽可能少地更改顶点数据,以避免将数据传输到 GPU 内存的潜在成本高昂。这就是为什么不通过更改顶点缓冲区数据来执行对象的平移和旋转。相反,使用统一 modelViewMatrix
。对于更复杂的对象,传输单个矩阵比传输整个模型更便宜。
模型视图矩阵是模型矩阵(基本上是平面的平移)与视图矩阵(在场景中布置相机)相结合。无法从该矩阵中获取平面位置。但是,您可以沿着相机的视角方向获取到相机的距离。这将是第三行第四列中的条目。尝试根据这个值计算你的颜色。
着色器执行了很多次。渲染的每个顶点都会调用顶点着色器。每个填充的片段都会调用片段着色器。每次渲染图像时(即每一帧)都会发生这种情况。
我有一个带有以下着色器的平面:
<script type="x-shader/x-vertex" id="vertexshader">
varying vec3 col;
void main()
{
col = vec3( position.z, position.z, 1 );
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
</script>
<script type="x-shader/x-fragment" id="fragmentshader">
varying vec3 col;
void main()
{
// set color for the current vertex
gl_FragColor = vec4(col, 1);
}
</script>
我将飞机移离相机,如下所示:
function renderFrame()
{
cube.position.z -= 1;
requestAnimationFrame( renderFrame );
renderer.render(scene, camera);
};
问题是我会假设因为立方体在移动,所以片段着色器的位置值会改变,但事实并非如此。 'position' 变量不会传递对象在 3D 中的当前位置 space 吗?如果没有,我如何检测它的位置和旋转,或者我必须使用统一变量手动将此信息传递给着色器?
工作示例:http://webgl.demised.net/experiments/003_Shaders.php
此外,着色器是在初始化时执行一次还是在每帧执行一次?
顶点着色器中的position
变量是一个顶点属性。顶点属性通常从位于 GPU 内存中的顶点缓冲区读取。因此,应尽可能少地更改顶点数据,以避免将数据传输到 GPU 内存的潜在成本高昂。这就是为什么不通过更改顶点缓冲区数据来执行对象的平移和旋转。相反,使用统一 modelViewMatrix
。对于更复杂的对象,传输单个矩阵比传输整个模型更便宜。
模型视图矩阵是模型矩阵(基本上是平面的平移)与视图矩阵(在场景中布置相机)相结合。无法从该矩阵中获取平面位置。但是,您可以沿着相机的视角方向获取到相机的距离。这将是第三行第四列中的条目。尝试根据这个值计算你的颜色。
着色器执行了很多次。渲染的每个顶点都会调用顶点着色器。每个填充的片段都会调用片段着色器。每次渲染图像时(即每一帧)都会发生这种情况。