使用变换矩阵将圆柱体转换为圆锥体

时间:2014-07-23 07:13:22

标签: c++ opengl math matrix 3d

使用基于OpenGL ES 2.0的图形引擎我有以下数学问题:

使用此处描述的创建柱面的算法http://paulbourke.net/geometry/circlesphere/,可以创建通用柱面网格。在我的应用中,我只为所有气缸使用一个圆柱网格。通过圆柱体的缩放,可以创建具有不同半径和高度的新圆柱体,而无需更改标准圆柱体网格(r = 1,h = 1)。

对于视锥细胞我目前正在创建另一个网格,但我认为必须以某种方式使用矩阵操作将圆柱体变换为圆锥体。理想情况下,应该可以创建一个具有指定r1和r2的圆柱体(对于标准网格r1 = r2 = 1)。

任何想法如何可能?我想到了透视矩阵,但我没有成功。

1 个答案:

答案 0 :(得分:0)

技术上可以使用投影变换从圆柱体制作截锥。但是您必须考虑投影将顶点映射到规范化设备坐标(范围从-1.0到1.0)。此外,如果您从身份平截头体中定义形状,则投影变换可能还不够,因此您还必须使用其他相机变换。

实际上,您可以尝试烘烤(不知何故)您的主​​摄像头转换&投影。只需将气缸放置在视野区域,沿Y轴定位其Y轴,设置适当的FOV并烘烤所有变换(包括气缸的世界变换)。通过将所有这些矩阵相乘,您将在标准化设备坐标中接收到圆柱体的变形。