【问题标题】:Manual perspective division手动透视分割
【发布时间】:2016-05-06 07:33:05
【问题描述】:

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

【问题讨论】:

  • 听起来有点像透视正确插值和屏幕空间插值之间的区别。在 opengl 中也是一样的
  • 定义“不一样”。您是否尝试在这两种情况之间进行浮点比较?

标签: glsl perspective vertex-shader vulkan


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 2013-06-20
    • 2013-09-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多