当前位置: 首页 > 知识库问答 >
问题:

OpenGL和QT5.5:GLM::Perspective不起作用

隗瑞
2023-03-14
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::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个答案

金嘉
2023-03-14

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

然后而不是使用。

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

您必须使用:

shaders->setUniformValue(projIndex, QMatrix4x4(glm::value_ptr(proj)).transposed());
 类似资料:
  • 我试图用GLM来渲染一个对象,但是我得到了这个: 编辑:忘记提到我试图渲染的对象是一个简单的环面。 我做了很多调查,注意到返回。文档说,如果着色器中没有使用统一变量,即使声明了它,它也会返回。正如你在下面看到的,它已经被声明并且正在顶点着色器中使用。我检查了以确保它是有效的,诸如此类。 顶点着色器(简单的未点亮的红色): 片段着色器:

  • 我对OpenGL、GLFW或GLEW没有太多的经验,所以我对这些库的故障排除能力微乎其微。我已经设法呈现了一个三角形([-1,-1,0],[1,-1,0],[0,1,0]),但是当使用顶点属性坐标和颜色属性作为立方体时,它似乎无法呈现。我的代码、着色器和矩阵运算可能有很多问题。我希望我对我所做的事情有更清楚的了解,这样我就可以对我的错误有更详细的描述。目前,上面的代码只呈现窗口。我最初遵循http

  • 应该是这样的: 而不是这个: 我的屏幕宽度是1000,高度是600。 我正在使用OpenGL(lwjgl)在java中制作2d游戏。我可以画一个三角形,但使用我的着色器时它不起作用。着色器编译没有错误,但屏幕变黑了。 我完全不知道该怎么做,我必须启用什么吗? 这是我在GLSL中的vertexShader代码 这是片段着色器: 我最近发现,如果我只运行它有效的片段着色器,我就会得到指定的颜色。但是如

  • 我正在尝试将FBO的深度纹理和颜色纹理链接到GLSL着色器(版本4.0) 问题是,同时只有一个链接,这很奇怪,因为其他纹理可以很好地链接在一起(例如:漫反射贴图、法线贴图和镜面反射贴图) 以下是我的绑定RT代码: 我真的不知道这里怎么了。。。

  • GLM

    GLM (General Language Model) 是清华大学推出的一种使用自回归填空目标进行预训练的通用语言模型,可以针对各种自然语言理解和生成任务进行微调。 GLM 通过添加 2D 位置编码并允许以任意顺序预测跨度来改进空白填充预训练,从而在 NLU 任务上获得优于 BERT 和 T5 的性能。同时,GLM 可以通过改变空白的数量和长度对不同类型的任务进行预训练。在横跨 NLU、条件和无