c++ - 通过对立方体应用变换来创建 3D 方形平截头体?

标签 c++ opengl graphics glut glu

我想知道是否可以通过对 glutSolidCube(GLDouble size) 应用某种变换来构建 3D 方形平截头体。我猜测涉及某种剪切矩阵,据我所知,这不是内置转换。

请注意,我根本不关心视锥体(正如您可能想象的那样,这会使任何 Google 搜索出现偏差)。我只想将 3D 正方形视锥体作为场景的一部分。任何关于如何从立方体中产生一个的想法将不胜感激!

A Square Frustum

最佳答案

不是剪切矩阵,是透视投影的投影矩阵。将单位立方体的顶点坐标乘以逆投影矩阵,得到平截头体顶点的坐标。要获得世界空间中的平截头体坐标,您还需要通过逆相机矩阵( View 矩阵)对顶点进行倍增。

在这里查看详细的公式:http://www.songho.ca/opengl/gl_projectionmatrix.html

要使立方体变形,最好创建具有​​所需顶点的 VBO,或者只渲染一些变形的四边形,如果你想使用固定功能管道进行一些快速的'n'dirty 实现。

附言

有一个代码摘录可以计算截锥体的角:http://www.gamedev.net/topic/606716-frustum-corners-from-view-projection/

关于c++ - 通过对立方体应用变换来创建 3D 方形平截头体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12762809/

相关文章:

c++ - Qtvsaddin 清除卸载的Qt版本

c++ - 可以将一个空插入另一个集合吗?

c++ - 如何从 boost 图形库中的边迭代器构造 adjacency_list?

c++ - 如何在 OpenGl 中设置文本颜色

c++ - 为什么 glGetSubroutineIndex 为不同的函数返回相同的值?

OpenGL:VAO 和 VBO 是否适用于大型多边形渲染任务?

c++ - Flash vector 图形背后的数学?

c++ - 创建具有有限参数的 std::function 类型

algorithm - 我们可以使用泊松点过程进行地理分类以确定区域边界吗?

graphics - 向旋转的矩形添加 'fake' 抗锯齿