我期待gl_Position自动获得同质化(除以w),但似乎不起作用..为什么以下结果不同?
1) void main(){ vec4 p; ......省略...... gl_Position = projectionMatrix * p; }
2) ......同上...... p = projectionMatrix * p; gl_Position = p / p.w;
我认为两者应该产生相同的结果,但似乎并非如此。当2按预期工作时,1不起作用..可能是精度问题吗?我错过了什么吗?这让我几乎疯了......需要帮助。非常感谢提前!
答案 0 :(得分:2)
在剪切之前无法进行透视分割,这在顶点着色器完成后发生。所以你没有理由在顶点着色器中观察到w除。
在片段着色器运行之前,GL将在三角形光栅化之前进行透视分割。
你想做什么不起作用?
答案 1 :(得分:1)
来自GLSL规范1.2:
变量gl_Position可用 只有在顶点语言中才是 打算写 同质顶点位置。
所以它不会自动同质化。