使用 Three.js,我编写了一个顶点着色器,根据渲染像素的屏幕象限为平面中的每个点着色。
// vertex shader
uniform float width;
uniform float height;
varying float x;
varying float y;
void main()
{
vec4 v = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
x = v.x;
y = v.y;
gl_Position = v;
}
// fragment shader
varying float x;
varying float y;
void main()
{
gl_FragColor = vec4(x, y, 0.0, 1.0);
}
jsFiddle 上的实时示例:http: //jsfiddle.net/Stemkoski/ST4aM/
我想修改这个着色器,使其x
在屏幕左侧等于 0,在屏幕右侧等于 1,同样y
在顶部等于 0,在底部等于 1。我(错误地)假设这将涉及将和的值更改为和(x
在哪里和存储窗口的宽度和高度)。但是,随着这种变化,在平面上放大和缩小时,每个屏幕像素的颜色似乎都会发生变化。y
x = v.x / width
y = v.y / height
width
height
如何修复着色器代码以获得所需的效果?