gpt4 book ai didi

c++ - 在非标准化坐标中绘制 - glFrustum

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:14 25 4
gpt4 key购买 nike

关于使用 glFrustum,

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1, 1, -1, 1, 0.1, 1000.0);
glLoadMatrxi(GL_MODELVIEW);
glBegin(GL_QUADS); //A room's left wall
glVertex3f(-1.0, 1.0, 0.0);
glVertex3f(-1.0, 1.0, -0.4);
glVertex3f(-1.0, -1.0, -0.4);
glVertex3f(-1.0, -1.0, 0.0);
glEnd();

我所有的绘图都发生在 -1, 1(注意上面的//A room's left wall 的代码片段)即
X 轴:-1 变成左边,1 变成右边,原点在中心。< br/>Y轴:1为顶部,-1为右侧,原点在中心

glFrustum 会自动将我的坐标更改为 [-1,1] 吗?

通常,我会通过指定屏幕坐标来绘制立方体,如下所示:
例如:ofBox(512,384,0,10) 在屏幕中央给我一个框 [Window width: 1024, Window Height: 768]

如果我想继续在我的像素坐标中正常绘图,并且不想通过尝试从像素坐标绘图转换为标准化坐标来让事情变得复杂,即使我使用 glFrustum?

最佳答案

我认为您仍然很难想象平截头体是什么,以及它与投影的关系。简单地说,截锥体是一个顶端在一定距离处被截断的金字塔:

frustum

如果用作 OpenGL 投影矩阵,平截头体的边界在 View 空间坐标(即在模型 View 转换之后)中定义一个体积,该体积将变成一个范围为 {-1, 1 的立方体}²×{0, 1}通过投影变换和齐次划分。

近平面的范围定义了 View 空间坐标中的范围——即视点位于 (0,0,0) 的世界空间——将被映射(即“拉伸(stretch)”和/或“收缩” ") 到用 glViewport 定义的渲染窗口的范围。

简而言之:您使用 glViewport 定义窗口中的像素坐标,使用 glFrustum 从 View 空间中“切”出一个切片(这是以相机位于 (0,0,0) 的方式移动的世界空间)。

关于c++ - 在非标准化坐标中绘制 - glFrustum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16483150/

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