在OpenGL顶点着色器中,gl_Position不会被均匀化

时间:2010-04-17 00:55:24

标签: opengl graphics 3d glsl

我期待gl_Position自动获得同质化(除以w),但似乎不起作用..为什么以下结果不同?

1) void main(){   vec4 p;   ......省略......   gl_Position = projectionMatrix * p; }

2)   ......同上......   p = projectionMatrix * p;   gl_Position = p / p.w;

我认为两者应该产生相同的结果,但似乎并非如此。当2按预期工作时,1不起作用..可能是精度问题吗?我错过了什么吗?这让我几乎疯了......需要帮助。非常感谢提前!

2 个答案:

答案 0 :(得分:2)

在剪切之前无法进行透视分割,这在顶点着色器完成后发生。所以你没有理由在顶点着色器中观察到w除。

在片段着色器运行之前,GL将在三角形光栅化之前进行透视分割。

你想做什么不起作用?

答案 1 :(得分:1)

来自GLSL规范1.2:

  

变量gl_Position可用   只有在顶点语言中才是   打算写   同质顶点位置。

所以它不会自动同质化。