如何在Unity3d中通过了解三角形模型的顶点来定位和缩放三角形模型
我想定位不同的等边三角形模型,在一个统一的三维空间。问题是3个已知的顶点不是等边三角形,其中一些甚至不是等腰的,所以我需要包装我的模型,使其角点与给定的顶点相匹配。 我想建模那些彼此不同的三角形,这就是为什么要使用预先创建的模型 目前,我执行以下计算以将三角形定位并缩放到等腰三角形上:如何在Unity3d中通过了解三角形模型的顶点来定位和缩放三角形模型,unity3d,3d,triangulation,Unity3d,3d,Triangulation,我想定位不同的等边三角形模型,在一个统一的三维空间。问题是3个已知的顶点不是等边三角形,其中一些甚至不是等腰的,所以我需要包装我的模型,使其角点与给定的顶点相匹配。 我想建模那些彼此不同的三角形,这就是为什么要使用预先创建的模型 目前,我执行以下计算以将三角形定位并缩放到等腰三角形上: 给定3个顶点的中点 Vector3中点=(点[0]+点[1]+点[2])/3 距中点距离 pointdistance[i]=Vector3.距离(点[i],中点) 最近的点是我将旋转三角形的点,因此我知道三角形的
Vector3中点=(点[0]+点[1]+点[2])/3代码>
pointdistance[i]=Vector3.距离(点[i],中点)代码>
点[0]
so浮动高度=矢量3.距离(点[0],中点)代码>
float width=(float)(向量3.距离(点[1],点[2])*Math.Sqrt(3)/3)代码>
float scale=新矢量3(高度、宽度、1)代码>
normalVec
,以获得正确的x和y方向,这很好,所以我认为我不需要更改它this.Triangle=(游戏对象)实例化(standardTriangleModel,middlepoint,Quaternion.LookRotation(normalVec,points[0])代码>
那么,有人知道我如何定位和调整三角形模型以匹配这些点吗?没有代码,因为我现在手头没有unity。这个答案基于Unity问答网站 从高度和宽度为1的直角三角形的游戏对象开始: 然后,对于三角形ABC,将直角三角形游戏对象的X刻度(我们可以称之为
mainObject
)设置为AB的长度,并将Y刻度设置为C和穿过AB的直线之间的最短距离(从基准AB测量的三角形高度)
考虑角CAB=θ
然后,将mainObject
放入名为Outer1
的父游戏对象中。比例Outer1
,Y=sqrt(2)/sin(90-θ),X=sqrt(2)
然后,将Outer1放入名为Outer2
的父游戏对象中。将Outer2
围绕main对象旋转。将向前旋转(θ-90)(应为90-θ的顺时针旋转)
然后,将Outer2放入名为Outer3
的父游戏对象中。标度Outer3
,Y=sin((90-θ)/2),X=cos((90-θ)/2
此时,mainObject
应剪切并缩放成正确的形状。您只需定位并旋转Outer3
,使main对象的(预剪切)直角角位于A,main对象。右
点从A到B,main对象。向前
点垂直于三角形。没有代码,因为我现在手头没有统一体。这个答案基于Unity问答网站
从高度和宽度为1的直角三角形的游戏对象开始:
然后,对于三角形ABC,将直角三角形游戏对象的X刻度(我们可以称之为mainObject
)设置为AB的长度,并将Y刻度设置为C和穿过AB的直线之间的最短距离(从基准AB测量的三角形高度)
考虑角CAB=θ
然后,将mainObject
放入名为Outer1
的父游戏对象中。比例Outer1
,Y=sqrt(2)/sin(90-θ),X=sqrt(2)
然后,将Outer1放入名为Outer2
的父游戏对象中。将Outer2
围绕main对象旋转。将向前旋转(θ-90)(应为90-θ的顺时针旋转)
然后,将Outer2放入名为Outer3
的父游戏对象中。标度Outer3
,Y=sin((90-θ)/2),X=cos((90-θ)/2
此时,mainObject
应剪切并缩放成正确的形状。您只需定位并旋转Outer3
,使mainObject
的(预剪切)直角角位于A,mainObject。right
从A指向B,和main object.forward
点垂直于三角形。这听起来像是一个三角形,你不能只通过修改一次等边三角形的比例就将其变成非等边三角形。您至少还需要应用剪切变换。您可以使用具有不同旋转和缩放的嵌套变换来完成此操作。。。你能解释一下你想要完成什么,以便回答者能提供更多有用的建议吗?为了澄清,我想把模块化三角形模型放在一个icosphere(测地多面体)上icosphere的三角形有不同的形状。你为什么不把它做成你需要的形状?我可以把网格改成预制的或fbx模型吗?@nimmand你不必烘焙修改,没关系,你只要在Awake()上应用它,我就把它捕捉进去,对于大多数应用来说这都很好(修改共享网格-更改将传播)这听起来像是一个例子,你不能只通过修改等边三角形的比例一次就将其变成非等边三角形。你至少还需要应用剪切变换。你可以使用具有不同旋转和比例的嵌套变换来实现这一点……你能解释一下你想要实现什么吗