gpt4 book ai didi

c++ - OpenGL:透视矩阵不显示任何内容

转载 作者:行者123 更新时间:2023-11-28 02:20:02 24 4
gpt4 key购买 nike

我正在用 Qt 做一些基本的 OpenGL,以便尝试渲染一些简单的几何图形。我在 (-1,-1,-1)(1,1,1) 之间创建了一个立方体,并旋转了它,以便可以识别整体形状,如果我使用正交投影矩阵,我可以看到它:

QMatrix4x4 orthographicMatrix(float top, float bottom, float left, float right, float near, float far)
{
return QMatrix4x4((2.0f)/(right-left), 0, 0, -(right+left)/(right-left),
0, (2.0f)/(top-bottom), 0, -(top+bottom)/(top-bottom),
0, 0, -(2.0f)/(far-near), -(far+near)/(far-near),
0, 0, 0, 1);
}

...

QMatrix4x4 Projection = orthographicMatrix(2, -2, 2, -2, 0.01f, 2);

生成正交/投影矩阵的公式取自https://solarianprogrammer.com/2013/05/22/opengl-101-matrices-projection-view-model/

如果我将相机平移到 Z 轴上的 1,这个矩阵可以让我看到立方体:

Cube is visible

但是,如果我使用透视矩阵(再次使用链接页面中的公式):

QMatrix4x4 perspectiveMatrix(float fov, float aspectRatio, float near, float far)
{
float top = near * qTan((M_PI/180.0f) * (fov/2.0f));
float bottom = -top;
float right = top * aspectRatio;
float left = -right;

return QMatrix4x4((2.0f-near)/(right-left), 0, (right+left)/(right-left), 0,
0, (2.0f-near)/(top-bottom), (top+bottom)/(top-bottom), 0,
0, 0, -(far+near)/(far-near), -(2.0f-far-near)/(far-near),
0, 0, -1, 0);
}

...

QMatrix4x4 Projection = perspectiveMatrix(60.0f, (float)width()/(float)height(), 0.01f, 2);

我从相同的相机位置看不到任何几何图形:

No geometry showing.

我已经多次检查代码,但无法弄清楚为什么什么都没有显示。我认为它一定与透视矩阵有关,但我的代码似乎完全遵循 Solarian 程序员页面上指定的内容。这里可能出了什么问题?

作为引用,我的着色器是:

// Vertex
#version 330 core
in vec3 vertexPosition_modelspace;
uniform mat4 MVP;
void main()
{
vec4 v = vec4(vertexPosition_modelspace,1);
gl_Position = MVP * v;
}

// Fragment
#version 330 core
out vec3 color;
float remap(float inp)
{
while (inp>200.0) inp-=200.0;
return inp/200.0;
}

void main()
{
color = vec3(remap(gl_FragCoord.x), remap(gl_FragCoord.y), 0);
}

最佳答案

看来你在实现引用中的透视矩阵时犯了一些错误。

例如,您的代码中的第一个条目是 (2.0f-near)/(right-left) 而它是 (2.0f * near)/(right-left) 在网站上。矩阵的其他字段也有类似的错误。

关于c++ - OpenGL:透视矩阵不显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32862975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com