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_Math_Matrix_3d - Fatal编程技术网

C++ 利用变换矩阵将圆柱体转化为圆锥体

C++ 利用变换矩阵将圆柱体转化为圆锥体,c++,opengl,math,matrix,3d,C++,Opengl,Math,Matrix,3d,在使用基于OpenGL ES 2.0的图形引擎时,我遇到了以下数学问题: 使用此处描述的创建圆柱体的算法,可以创建通用圆柱体网格。在我的应用程序中,我对所有圆柱体仅使用一个圆柱体网格。通过缩放圆柱体,可以创建具有不同半径和高度的新圆柱体,而无需更改标准圆柱体网格r=1,h=1 对于圆锥体,我目前创建了另一个网格,但我有一个想法,那就是一定可以通过矩阵操作将圆柱体转换为圆锥体。理想情况下,对于标准网格r1=r2=1,也可以创建具有指定r1和r2的圆柱体 你知道这怎么可能吗?我考虑过透视矩阵,但没有

在使用基于OpenGL ES 2.0的图形引擎时,我遇到了以下数学问题:

使用此处描述的创建圆柱体的算法,可以创建通用圆柱体网格。在我的应用程序中,我对所有圆柱体仅使用一个圆柱体网格。通过缩放圆柱体,可以创建具有不同半径和高度的新圆柱体,而无需更改标准圆柱体网格r=1,h=1

对于圆锥体,我目前创建了另一个网格,但我有一个想法,那就是一定可以通过矩阵操作将圆柱体转换为圆锥体。理想情况下,对于标准网格r1=r2=1,也可以创建具有指定r1和r2的圆柱体


你知道这怎么可能吗?我考虑过透视矩阵,但没有成功。

从技术上讲,使用投影变换从圆柱体生成截锥是可能的。但是你必须考虑投影顶点到归一化的设备坐标的范围是从1到1。此外,投影变换可能还不足以在使用标识截锥体定义形状时使用,因此还必须使用其他摄影机变换


实际上,你可以试着烘焙你的主要相机变换和投影。只需将圆柱体放置在视野中心区域,沿摄影机的Z轴确定其Y轴方向,设置适当的FOV并烘焙所有变换,包括圆柱体的世界变换。通过将所有这些矩阵相乘,您将得到圆柱体在标准化设备坐标中转换为圆锥体的结果。

您的标准圆柱体是如何对齐的?沿y轴?它从哪里开始和结束?[0,1]或[-0.5,0.5]?更改顶点着色器以独立缩放圆柱体的每一端可能更容易,例如,如果圆柱体沿z轴对齐,则基于z缩放x和y,然后在结果点上使用标准变换。对此我会小心,因为这听起来像是需要非均匀变换,这会扰乱你的正常状态。