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

时间:2012-10-06 18:52:15

标签: c++ opengl graphics glut glu

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

请注意,我根本不关心观看视锥体(正如您可能想象的那样,它会使任何谷歌搜索出现偏差)。我只想在我的场景中使用3D方形截头体。任何关于如何从立方体生产一个的想法都将不胜感激!

A Square Frustum

2 个答案:

答案 0 :(得分:2)

它不是剪切矩阵,它是透视投影的投影矩阵。您将单位立方体顶点的坐标乘以反投影矩阵,以获得平截头体顶点的坐标。要在世界空间中获得视锥体的坐标,您还需要通过逆相机矩阵(视图矩阵)来多个顶点。

在此处查看详细公式:http://www.songho.ca/opengl/gl_projectionmatrix.html

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

P.S。

有一个代码提取来计算平截头体的角落:http://www.gamedev.net/topic/606716-frustum-corners-from-view-projection/

答案 1 :(得分:0)

是的,在给定非常投影矩阵的情况下,可以将立方体转换为平截头体。首先定义焦距d,其是平截头体边缘会聚的点。然后用这个矩阵乘以你体积的所有角落:

P = [ 1   0   0   0
      0   1   0   0
      0   1  1/d  0
      0   0   1   0 ]