OpenGL和Qt 5.5:glm :: perspective不起作用

时间:2016-03-27 16:48:06

标签: qt opengl glm-math

我已经制作了以下透视矩阵来将问题与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.0f的坐标系中用作标准化设备坐标。但是,无论我在这里放置哪一对值,都不会呈现任何内容。

这是我试图绘制的坐标:

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);
}

1 个答案:

答案 0 :(得分:2)

必须传递glm矩阵的QMatrix4x4 转置矩阵。

然后而不是使用。

shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)) );

你必须使用:

shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)).transposed());

每次在组合QMatrix4x4和glm :: mat4时都必须发送转置矩阵

它应该有用。

JC

PS:为了记录,我也在这两天奋斗:(