在glsl中获取顶点世界位置

时间:2013-06-08 22:50:12

标签: glsl vertex-shader

如何获得具有顶点世界位置的vec3?

假设我想在世界空间的Y 1处获得立方体位置的白色像素,为0的黑色像素获得白色像素...

我试过

(顶点着色器)

[...]

varying float whiteness;

[...]

vec4 posWorld = gl_ProjectionMatrix * gl_Vertex;
whiteness = clamp(posWorld.y,0.0,1.0);

[...]

(片段着色器)

[...]

varying float whiteness;

[...]

gl_FragColor.rgb = vec3(whiteness);

[...]

但这给了我奇怪的结果,表面仍然取决于相机的角度和高度。

如何才能获得世界空间x,y,z中的顶点位置?

1 个答案:

答案 0 :(得分:1)

了解点如何从本地空间转换为屏幕坐标。

worldMatrix * vertex = worldSpace

viewMatrix * worldSpace = viewSpace

projectionMatrix * viewSpace = screenSpace

如果你想获得顶点的位置,你应该将World Matrix传递给着色器并将顶点乘以该顶点。

vec4 posWorld = worldMatrix * gl_Vertex;