GLSL 顶点着色器的变量 gl_Position
输出必须有 4 个坐标。在 OpenGL 中,似乎 w
坐标用于缩放矢量,通过将其他坐标除以它。 Vulkan 中 w
的目的是什么?
最佳答案
Vulkan 中的着色器和投影的行为与 OpenGL 中的完全相同。深度范围(OpenGL 中的 [-1, 1],Vulkan 中的 [0, 1])或坐标系原点(OpenGL 中的左下角,Vulkan 中的左上角)存在细微差别,但原理完全一样。硬件仍然相同,并且在 OpenGL 和 Vulkan 中以相同的方式执行计算。
4 分量向量有多种用途:
以同样的方式表示,用 4x4 矩阵。
.w
组件用于透视投影。 所有这些我们都可以用 4x4 矩阵来完成,因此我们需要 4 分量向量(所以它们可以乘以 4x4 矩阵)。同样,我写这个是因为上述规则适用于 OpenGL 和 Vulkan。
因此,对于
.w
变量的 gl_Position
组件而言,它在 Vulkan 中完全相同。它用于缩放位置向量 - 在透视计算(投影矩阵乘法)期间,原始深度由原始 .w
组件修改并存储在 .z
变量的 gl_Position
组件中。此外,原始深度也存储在 .w
组件中。之后(作为固定功能步骤)硬件执行透视除法并将存储在 gl_Position
变量中的位置除以其 .w
组件。在正交投影中,硬件执行的步骤完全相同,但用于计算的值不同。所以透视分割步骤仍然由硬件执行但它什么也不做(位置被1.0下潜)。
关于glsl - gl_Position.w 在 Vulkan 中的作用是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51318119/