Vulkan右手坐标系在应用投影矩阵后成为左手坐标系。如何使其与Vulkan坐标系保持一致?
我知道Vulkan是右手坐标系
我在顶点着色器中找到了这一行:https://github.com/AndreaCatania/HelloVulkan/blob/master/shaders/shader.vert#L23
gl_Position = scene.cameraProjection * scene.cameraView * meshUBO.model * vec4(vertexPosition, 1.0);
此时:https://github.com/AndreaCatania/HelloVulkan/blob/master/main.cpp#L62-L68我定义了相机在场景中心的位置以及在(4,4,-10)世界空间的方位置
结果如下:
正如你在上面的图片中看到的那样, Z - 指向屏幕内部,但它应该是正面的。
是否预期,我需要添加更多内容或者我做错了什么?
投影计算:https://github.com/AndreaCatania/HelloVulkan/blob/master/VisualServer.cpp#L88-L98
void Camera::reloadProjection(){
projection = glm::perspectiveRH_ZO(FOV, aspect, near, far);
isProjectionDirty = false;
}
相机UBO填充:https://github.com/AndreaCatania/HelloVulkan/blob/master/VisualServer.cpp#L403-L414
SceneUniformBufferObject sceneUBO = {};
sceneUBO.cameraView = camera.transform;
sceneUBO.cameraProjection = camera.getProjection();
答案 0 :(得分:2)
我不使用或不知道Vulcan,但是透视投影矩阵(至少在 OpenGL 中)正在Z-
方向看,它反转了你的一个轴坐标系。这反转了坐标系的缠绕规则。
如果您想保留原始绕组而不是仅仅在矩阵中反转Z
轴向量以获取更多信息,请参阅:
所以只需将Z
轴按-1
缩放,或者类似于glScale(1.0,1.0,-1.0);
或直接矩阵单元格访问。