我使用GLM为Vulkan渲染器创建了一个投影矩阵,但是在顶点着色器中将其与顶点本身相乘后,没有任何渲染。我已经定义了GLM_FORCE_RADIANS和GLM_FORCE_DEPTH_ZERO_TO_ONE (为了更好,我尝试了没有这两种方法,或者没有这两种)。此外,我也试图通过的学位或弧度,但这没有帮助。此外,我注意到正字法矩阵工作得很好!下面是我的顶点着色代码,矩阵创建本身和正面是CCW (如果可以的话),深度测试已禁用(尚未实现):
投影矩阵的创建:
glm::mat4 projection = glm::perspective(45.0f, 16.0f / 9.0f, 0.1f, 100.0f);
glm::mat4 model = glm::mat4(1.0f);
model = glm::rotate(model, (float)glfwGetTime() * 30, glm::vec3(0.0f, 0.0f, 1.0f));顶点着色器:
#version 460 core
layout(location = 0) in vec2 aPos;
layout(location = 1) in vec3 aColor;
layout(push_constant) uniform MVP {
mat4 VP;
mat4 Transform;
} matrices;
layout(location = 0) out vec4 Color;
void main()
{
gl_Position = matrices.VP * matrices.Transform * vec4(aPos,
1.0f, 1.0f);
Color = vec4(aColor, 1.0f);
}我包括GLM的方式:
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>发布于 2022-07-30 08:25:33
我修好了。“问题”是投影和透视分割将-near,-far范围映射为-1,1,这将导致Z坐标的翻转。同时,我的Z坐标为10.0f,实际上是相机。解决方案是将Z坐标值设为- 10.0f,投影后将其翻转到10.0f。
发布于 2022-07-29 23:24:44
来自glm::perspective
如果定义了
fovy,则以弧度表示。
您正在定义GLM_FORCE_RADIANS,这意味着您应该将弧度作为值传递给glm::perspective。您的示例(45.0f)中的值看起来类似于度数,但我可能错了。
https://stackoverflow.com/questions/73170931
复制相似问题