我正在 Unity 中创建一个 2D Sprite 游戏,这是一个 3D 游戏开发环境。
我已将对象的所有平移约束到 XY 平面并将旋转约束到 Z 轴。
我的问题是用于检测对象之间碰撞的网格必须仍然是 3D 的。我需要检测玩家对象(胶囊对撞机)和 Sprite (其碰撞体积由多边形棱镜定义)之间的碰撞。
我目前正在编写关卡编辑器,我需要让用户定义任何给定图块的碰撞区域。在下图中,用户依次单击点 P1、P2、P3、P4。
显然,这些点连接起来形成一个四边形。这是我想要的碰撞区域,但是我必须将其转换为 3D 网格。基本上我需要生成多边形的挤压,然后分配顶点缠绕和三角形等。顶点位置不是问题,因为它只是多边形沿 z 轴的平移。
我在创建分配顶点缠绕顺序的算法时遇到了麻烦,尤其是因为网格必须仅由三角形组成。
显然我所展示的结构并不重要,多边形可以是任何二维形状,并且总是需要形成一个棱柱。
有谁知道这方面的任何方法?
非常感谢大家的时间。
最佳答案
想到的一个简单算法是这样的:
extrudedNormal = faceNormal.multiplyScale(sizeOfExtrusion);//multiply the face normal by the extrusion amt. = move along normal
for each(vertex in face){
vPrime = vertex.clone();//copy the position of each vertex to a new object to be modified later
vPrime.addSelf(extrudedNormal);//add translation in the direction of the normal, with the amt. used in the
}
所以这个想法是基本的:
amt 同方向。你
想通过
使用移动(挤压)法线
位置
有关更完整、功能丰富的示例,请参阅 Procedural Modeling Unity samples 。它们也包括一个很好的网格挤出示例(请参阅使用 MeshExtrusion.cs 的 ExtrudedMeshTrail.js)。
祝你好运!
关于math - 从任何 2D 多边形生成 3D 棱镜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5067064/