我正在Unity中创建一个2D精灵游戏,这是一个3D游戏开发环境。 我已将对象的所有平移约束到XY平面并旋转到Z轴。
我的问题是用于检测对象之间碰撞的网格必须仍然是3D。我需要检测玩家对象(胶囊对撞机)和精灵(其多边形棱镜定义的碰撞体积)之间的碰撞。
我目前正在编写关卡编辑器,我需要让用户为任何给定的tile定义碰撞区域。在下图中,用户按顺序单击点P1,P2,P3,P4。
显然,这些要点联合起来形成一个四边形。这是我想要的碰撞区域,但是我必须将其转换为3D网格。基本上我需要生成多边形的挤出,然后分配顶点绕组和三角形等。顶点位置不是一个问题,因为它只是多边形沿z轴的平移。
我在创建一个分配顶点绕组顺序的算法时遇到了麻烦,特别是因为网格必须只包含三角形。
显然,我所说明的结构并不重要,多边形可以是任何2d形状,并且总是需要形成棱镜。 有谁知道这方面的任何方法?
非常感谢您的时间。
答案 0 :(得分:1)
想到一个简单的算法是这样的:
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
}
所以这个想法很基本:
有关功能更丰富的示例,请参阅Procedural Modeling Unity samples。它们也包括一个漂亮的Mesh挤出样品(参见使用MeshExtrusion.cs的ExtrudedMeshTrail.js)。
古德勒克!
答案 1 :(得分:1)
创建挤压墙:
对于多边形中的每个顶点a(坐标a x , y ): - 调用下一个顶点'b'(坐标b x ,b y ) - 创建对应于从“a”到“b”的直线的拉伸矩形: - 矩形有顶点( x , y ,z 0 ),(a x ,a < sub> y ,z 1 ),(b x ,b y ,z 0 ) ,(b x ,b y ,z 1 ) - 可以从两个三角形创建此矩形: - (a x , y ,z 0 ),(a x ,a y < / sub>,z 1 ),(b x ,b y ,z 0 )和(a < sub> x , y ,z 1 ),(b x ,b y , z 0 ),(b x ,b y ,z 1 )
如果你想创建一个三角形条,它甚至更简单。对于每个顶点a,只需添加(a x , y ,z 0 )和(a x ,一个<子>ý子>和z <子> 1 子>)。首先处理的顶点也需要在遍历所有其他顶点后再次处理。
创建结束上限:
此步骤可能不需要用于冲突。但是,这里有一个简单的技术:http://www.siggraph.org/education/materials/HyperGraph/scanline/outprims/polygon1.htm 每个结果三角形应在深度z 0 和z 1 处添加。