2

当我注意到我的结果不正确时,我需要对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],以防对此有任何影响。

4

1 回答 1

0

Vulkan 有许多不变性规则,在附录 D 中指定。这些规则都没有说明第 23 章中概述的固定功能顶点后处理步骤将与尝试做同样事情的顶点着色器保持不变。因此,您不能期望这两个操作会产生不变的结果。

于 2016-05-06T15:10:11.433 回答