Vulkan视图矩阵坐标系困惑:实际表现与预期不符的技术咨询
视图矩阵坐标系困惑问题
我正在尝试理解视图矩阵,通过顶点Shader直接操作视图矩阵的值,但对视图矩阵所处的坐标系感到困惑。
顶点Shader代码
#version 450 layout(location = 0) out vec4 outColor; layout (push_constant) uniform PushConstants { mat4 proj; } pc; const vec2 kGeometry[] = vec2[]( vec2(-1, -1), vec2(1, -1), vec2(1, 1), vec2(1,1), vec2(-1, 1), vec2(-1, -1) ); const vec4 kColor[] = vec4[]( vec4(1, 0, 0, 1), vec4(0, 1, 0, 1), vec4(0, 0, 1, 1), vec4(1, 0, 1, 1), vec4(1, 1, 0, 1), vec4(0, 1, 1, 1) ); void main() { vec2 p = kGeometry[gl_VertexIndex]; outColor = kColor[gl_VertexIndex]; mat4 view = mat4(1); view[3].z = -3; // !!! Translate camera on Z. Expected +3, not -3 to see quad. gl_Position = pc.proj * view * vec4(p, 0, 1); }
参考分析结论
- 预期模型顶点和视图矩阵都处于右手坐标系(+Y向下、+Z指向屏幕内部);
- 屏幕上的四边形中心在(0,0,0),预期相机朝向-Z方向;
- 将视图矩阵沿-Z轴平移至(0,0,-3)时,预期四边形不可见,但实际可见;
- 实际表现显示视图矩阵的相机朝向+Z;
- 平移视图矩阵至(2,3,-5),四边形出现在窗口右下角,相机仍朝向+Z;
- 对视图矩阵取逆并定位在(2,3,5),四边形出现在左上角,相机朝向-Z但坐标系似为左手系。
我认为模型顶点按右手系转换,但视图矩阵的平移结果与预期不符,不确定其所处坐标系,也不理解为何不是预期的右手系。
内容的提问来源于stack exchange,提问作者Dess
相关产品推荐
相关产品推荐

