我需要对除 gl_Position 之外的其他内容进行手动透视划分,当我注意到我的结果已关闭时,我做了一些实验。
我注意到如果我让它使用默认转换,结果深度值( gl_Position.z )是正确的:
void main()
{
gl_Position = MVP *vertexPosition;
}
但是,当尝试手动进行透视分割时,深度值不相同,即使它应该等效(?):
void main()
{
gl_Position = MVP *vertexPosition;
gl_Position.xyz /= gl_Position.w;
gl_Position.w = 1.0;
}
那么,在Vulkan中透视划分的工作方式是否有所不同?如果是这样,怎么样?
视口的深度范围设置为[0,1],以防对此产生任何影响。
答案 0 :(得分:0)
Vulkan有许多不变规则,在附录D中指定。这些规则都没有声明第23章中概述的固定功能顶点后处理步骤将与不变尝试做同样的事情的顶点着色器。因此,您不能指望这两个操作产生不变的结果。