gpt4 book ai didi

c++ - 阐明 glFrustum,以及为什么我看不到图像

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:01 30 4
gpt4 key购买 nike

目前我将 glFrustum 设置为

glFrustum(0, 100.0, 0, 100.0, -50, 50);

我的图像是一个矩形立方体,尺寸为:当形状的尺寸小于查看框时,为什么我看不到图像?

//top
glBegin(GL_POLYGON);
glVertex3f(25, 60, 25);
glVertex3f(75, 60, 25);
glVertex3f(75, 60, -25);
glVertex3f(25, 60, -25);
glEnd();

//bottom
glBegin(GL_POLYGON);
glVertex3f(25, 55, 25);
glVertex3f(75, 55, 25);
glVertex3f(75, 55, -25);
glVertex3f(25, 55, -25);
glEnd();

//front
glBegin(GL_POLYGON);
glVertex3f(25, 55, 25);
glVertex3f(75, 55, 25);
glVertex3f(75, 60, 25);
glVertex3f(25, 60, 25);
glEnd();

//back
glBegin(GL_POLYGON);
glVertex3f(25, 60, -25);
glVertex3f(75, 60, -25);
glVertex3f(75, 55, -25);
glVertex3f(25, 55, -25);
glEnd();

最佳答案

glFrustum() 调用的参数无效:

glFrustum(0, 100.0, 0, 100.0, -50, 50);

第 5 个参数 nearVal 必须为正数。来自man page :

nearVal, farVal: Specify the distances to the near and far depth clipping planes. Both distances must be positive.

将这些想象成与相机的距离,在它指向的方向上。 -50.0 的值会将近裁剪平面放在相机后面,这是无效的。

要使其正常工作,同时保持相同的范围,您可以将其更改为例如:

glFrustum(0.0, 100.0, 0.0, 100.0, 50.0, 150.0);

在没有任何额外变换的情况下,相机从原点指向负 z 轴。由于我们将近距离和远距离与原始代码相比移动了 100.0,因此您需要相应地移动对象,这对应于在 z 方向上的平移 -100.0。为此,您可以修改顶点的坐标,或将转换应用为模型 View 转换的一部分:

glPushMatrix();
glTranslatef(0.0f, 0.0f, -100.0f);
// draw calls
glPopMatrix();

另请注意,您的 glFrustum() 调用的前 4 个参数有些不同寻常。他们指定了一个非对称平截头体。结果看起来就像相机放在 window 的一角上方。虽然这是完全合法的,但它可能看起来很奇怪。对称平截头体更为常见,这意味着左/右和上/下具有相同的绝对值,但符号相反。例如:

glFrustum(-50.0, 50.0, -50.0, 50.0, 50.0, 150.0);

为此,您需要将几何图形的 x/y 坐标放置在原点周围。

关于c++ - 阐明 glFrustum,以及为什么我看不到图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112570/

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