我正在 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/

    10-13 05:55