Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过对立方体应用变换来创建三维方形平截头体?_C++_Opengl_Graphics_Glut_Glu - Fatal编程技术网

C++ 通过对立方体应用变换来创建三维方形平截头体?

C++ 通过对立方体应用变换来创建三维方形平截头体?,c++,opengl,graphics,glut,glu,C++,Opengl,Graphics,Glut,Glu,我想知道是否可以通过对glutSolidCube(GLDouble size)应用某种转换来构建一个三维方形平截头体。我猜其中包含了某种剪切矩阵,从我所知,它不是一个内置的转换 请注意,我一点也不关心视锥体(正如您可能想象的那样,它会使任何谷歌搜索出现偏差)。我只想在我的场景中使用一个3D方形平截头体。任何关于如何从立方体制作一个立方体的想法都将不胜感激 它不是剪切矩阵,而是透视投影的投影矩阵。将单位立方体顶点的坐标乘以逆投影矩阵,以获得平截头体顶点的坐标。要获得世界空间中的平截头体坐标,还需要

我想知道是否可以通过对
glutSolidCube(GLDouble size)
应用某种转换来构建一个三维方形平截头体。我猜其中包含了某种剪切矩阵,从我所知,它不是一个内置的转换

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


它不是剪切矩阵,而是透视投影的投影矩阵。将单位立方体顶点的坐标乘以逆投影矩阵,以获得平截头体顶点的坐标。要获得世界空间中的平截头体坐标,还需要通过反转摄影机矩阵(视图矩阵)将顶点进行多重化

有关详细公式,请参见此处:

要使立方体变形,最好使用所需的顶点创建VBO,或者只渲染多个变形的四边形,如果您希望使用固定的函数管道进行快速“脏”实现的话

附言


有一个用于计算平截头体角点的代码提取:

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

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

我的一个朋友告诉我,还有一种剪切变换,可以将立方体转换为平截体。他谈到了剪切矩阵中的负系数。但是现在我找不到这个矩阵。有人帮我们吗?他明确要求不要进行OpenGL转换。我认为一个更简单的转换是为了将立方体转换成梯形。