OpenGL 和 Qt 5.5:glm::perspective 不起作用
OpenGL and Qt 5.5: glm::perspective doesnt work
我制作了以下透视矩阵以将问题隔离到 glm 透视函数:
QMatrix4x4 proj (1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.0f,
0.f, 0.f, 1.1f, 1.f);
这有效并生成图像。但是,当尝试使用 glm 构造透视矩阵时:
glm::mat4 proj;
proj = glm::perspective(
glm::radians(80.0f),
1.0f,
0.0f,
2.0f
);
什么都没有。
我的印象是,当将0.0f, 2.0f
放入近平面、远平面参数时,0.0f-2.0f范围内的任何顶点坐标都被线性插值到坐标系-1.0f到1.0中f 用作归一化设备坐标。但是,无论我放哪一对值,都没有渲染任何东西。
这是我要绘制的坐标:
rawverts = {
0.0f, 0.0f, 1.0f,
0.0f, 0.7f, 1.0f,
0.4f, 0.0f, 1.0f,
0.0f, -0.7f, 1.0f,
-0.4f, 0.0f, 1.0f
};
并且在将投影矩阵传递给顶点着色器时:
int projIndex = shaders->uniformLocation("proj");
...
shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)) );
顶点着色器本身:
#version 330 core
in vec3 vertex;
uniform mat4 translate;
uniform mat4 view;
uniform mat4 proj;
uniform float time;
uniform float aspect;
uniform vec2 resolution;
void main() {
gl_Position = proj * view * translate * vec4(vertex, 1);
}
你必须传递glm矩阵的QMatrix4x4转置矩阵。
那就不用了。
shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)) );
你必须使用:
shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)).transposed());
每次组合 QMatrix4x4 和 glm::mat4
时必须发送转置矩阵
应该可以。
JC
PS :郑重声明,我也为此苦苦挣扎了 2 天:(
我制作了以下透视矩阵以将问题隔离到 glm 透视函数:
QMatrix4x4 proj (1.f, 0.f, 0.f, 0.f,
0.f, 1.f, 0.f, 0.f,
0.f, 0.f, 1.f, 0.0f,
0.f, 0.f, 1.1f, 1.f);
这有效并生成图像。但是,当尝试使用 glm 构造透视矩阵时:
glm::mat4 proj;
proj = glm::perspective(
glm::radians(80.0f),
1.0f,
0.0f,
2.0f
);
什么都没有。
我的印象是,当将0.0f, 2.0f
放入近平面、远平面参数时,0.0f-2.0f范围内的任何顶点坐标都被线性插值到坐标系-1.0f到1.0中f 用作归一化设备坐标。但是,无论我放哪一对值,都没有渲染任何东西。
这是我要绘制的坐标:
rawverts = {
0.0f, 0.0f, 1.0f,
0.0f, 0.7f, 1.0f,
0.4f, 0.0f, 1.0f,
0.0f, -0.7f, 1.0f,
-0.4f, 0.0f, 1.0f
};
并且在将投影矩阵传递给顶点着色器时:
int projIndex = shaders->uniformLocation("proj");
...
shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)) );
顶点着色器本身:
#version 330 core
in vec3 vertex;
uniform mat4 translate;
uniform mat4 view;
uniform mat4 proj;
uniform float time;
uniform float aspect;
uniform vec2 resolution;
void main() {
gl_Position = proj * view * translate * vec4(vertex, 1);
}
你必须传递glm矩阵的QMatrix4x4转置矩阵。
那就不用了。
shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)) );
你必须使用:
shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)).transposed());
每次组合 QMatrix4x4 和 glm::mat4
时必须发送转置矩阵应该可以。
JC
PS :郑重声明,我也为此苦苦挣扎了 2 天:(