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

Converting a cylinder into a cone using transformation matrix

本文关键字:圆柱体 变换      更新时间:2023-10-16

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

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

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

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

从技术上讲,使用投影变换可以从圆柱体生成截锥形。但是您必须考虑到投影将顶点映射到标准化的设备坐标(范围从-1.0到1.0)。此外,投影变换可能是不够的情况下,当你定义你的形状的单位截锥体,所以你将不得不使用额外的相机变换。

实际上,你可以尝试烘烤(以某种方式)你的主相机转换&投影。只需将圆柱体放置在视图区域的中心,沿相机的Z轴定向其Y轴,设置适当的FOV并烘烤所有转换(包括圆柱体的世界转换)。通过将所有这些矩阵相乘,您将得到在标准化设备坐标下的圆柱体到锥体的变换。