Glsl 人工透视科
当我注意到我的结果不正确时,我需要在gl_位置以外的位置进行手动透视分割,所以我做了一些实验 我注意到,如果我让它使用默认转换,则生成的深度值(gl_Position.z)是正确的:Glsl 人工透视科,glsl,perspective,vertex-shader,vulkan,Glsl,Perspective,Vertex Shader,Vulkan,当我注意到我的结果不正确时,我需要在gl_位置以外的位置进行手动透视分割,所以我做了一些实验 我注意到,如果我让它使用默认转换,则生成的深度值(gl_Position.z)是正确的: void main() { gl_Position = MVP *vertexPosition; } 但是,当尝试手动执行透视分割时,深度值不相同,即使它应该是相等的(?): 那么,透视图划分在Vulkan中的工作方式是否有所不同?如果是,怎么做 视口的深度范围设置为[0,1],以防对其产生任何影响。Vu
void main()
{
gl_Position = MVP *vertexPosition;
}
但是,当尝试手动执行透视分割时,深度值不相同,即使它应该是相等的(?):
那么,透视图划分在Vulkan中的工作方式是否有所不同?如果是,怎么做
视口的深度范围设置为[0,1],以防对其产生任何影响。Vulkan有许多不变性规则,在附录D中指定。这些规则中没有一条规定第23章中概述的固定功能顶点后处理步骤在顶点着色器尝试执行相同操作时是不变性的。因此,您不能期望这两个操作产生不变的结果。听起来有点像透视正确插值和屏幕空间插值之间的区别。这在openglDefine中是一样的“不一样”。您是否正在尝试对这两种情况进行浮点比较?
void main()
{
gl_Position = MVP *vertexPosition;
gl_Position.xyz /= gl_Position.w;
gl_Position.w = 1.0;
}