gpt4 book ai didi

math - 从任何 2D 多边形生成 3D 棱镜

转载 作者:行者123 更新时间:2023-12-02 02:27:51 24 4
gpt4 key购买 nike

我正在 Unity 中创建一个 2D sprite 游戏,这是一个 3D 游戏开发环境。我已将对象的所有平移限制在 XY 平面上,并将旋转限制在 Z 轴上。

我的问题是用于检测对象之间碰撞的网格必须仍然是 3D 的。我需要检测玩家对象(胶囊对撞机)和 Sprite (其碰撞体积由多边形棱镜定义)之间的碰撞。

我目前正在编写关卡编辑器,我需要让用户为任何给定的图 block 定义碰撞区域。在下图中,用户依次点击点 P1、P2、P3、P4。

enter image description here

很明显,这些点连接起来形成了一个四边形。这是我想要的碰撞区域,但我必须将其转换为 3D 网格。基本上我需要生成多边形的拉伸(stretch),然后分配顶点缠绕和三角形等。顶点位置不是问题,因为它只是多边形沿 z 轴的平移。

enter image description here

我在创建分配顶点缠绕顺序的算法时遇到问题,特别是因为网格必须仅由三角形组成。

显然我所说明的结构并不重要,多边形可以是任何二维形状并且总是需要形成棱镜。有谁知道这方面的任何方法?

非常感谢大家的宝贵时间。

最佳答案

想到的一个简单算法是这样的:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com