結果がずれていることに気付いたとき、 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] に設定されます。