亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Unity中如何將一些3D點都在同一平面上降維為2D?

Unity中如何將一些3D點都在同一平面上降維為2D?

C#
瀟湘沐 2022-12-24 10:52:01
if(dread[6].ToString = = "True"){    CheckBox7.Checked = "true";}else{     CheckBox7.Checked = "false";}由于Triangulator僅適用于 2D,并且所有點都在同一平面上,因此方法應該是計算基向量或平面的主成分,但我找不到方法。我想將點的維數減少到 2D,以便Triangulator以生成的三角形位于平面上的方式用于它們。所以我想要的輸出只是三角形。的源代碼Triangulator在這里,我的目標是為給定的點創建一個網格,但是正如您看到以下示例代碼一樣,三角測量儀的輸入點應該是二維的:using UnityEngine;public class PolygonTester : MonoBehaviour {    void Start () {        // Create Vector2 vertices        Vector2[] vertices2D = new Vector2[] {            new Vector2(0,0),            new Vector2(0,50),            new Vector2(50,50),            new Vector2(50,100)        };        // Use the triangulator to get indices for creating triangles        Triangulator tr = new Triangulator(vertices2D);        int[] indices = tr.Triangulate();        // Create the Vector3 vertices        Vector3[] vertices = new Vector3[vertices2D.Length];        for (int i=0; i<vertices.Length; i++) {            vertices[i] = new Vector3(vertices2D[i].x, vertices2D[i].y, 0);        }        // Create the mesh        Mesh msh = new Mesh();        msh.vertices = vertices;        msh.triangles = indices;        msh.RecalculateNormals();        msh.RecalculateBounds();        // Set up game object with mesh;        gameObject.AddComponent(typeof(MeshRenderer));        MeshFilter filter = gameObject.AddComponent(typeof(MeshFilter)) as MeshFilter;        filter.mesh = msh;    }}
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

解決方案 1 - 平凡


如果四邊形是凸的并且您知道頂點的順序,請使用indices = new double[6]{0,1,2,0,2,3};


解決方案 2 - 手動三角測量


如果四邊形是凸的,但您不確定順序,請測試方向并調整索引。


edge1 = vertices3D[1] - vertices3D[0];

edge2 = vertices3D[2] - vertices3D[0];

edge3 = vertices3D[3] - vertices3D[0];

normal12 = Vector3.Cross(edge1, edge2);

normal23 = Vector3.Cross(edge2, edge3);

if (Vector3.Dot(normal12, normal23) > 0)

   indices = new double[6]{0,1,2,0,2,3};

else

   indices = new double[6]{0,1,3,0,3,2};

解決方案 3 - 使用三角測量儀


如果四邊形不是凸的,或者您確實必須使用庫 Triangulator,請變換所有頂點,使它們位于 XY 平面上,第一個頂點位于(0,0,0).


edge1 = vertices3D[1] - vertices3D[0];

edge2 = vertices3D[2] - vertices3D[0];

normal = Vector3.Cross(edge1, edge2).normalized;

rotation = Quaternion.FromToRotation(normal, new Vector3(0,0,1));

Vector2[] vertices2D = new Vector2[vertices3D.Length];

for (int i=0; i<vertices3D.Length; i++) {

    rotatedVertex = rotation * (vertices3D[i]-vertices3D[0]);

    vertices2D[i] = new Vector2(rotatedVertex.x, rotatedVertex.y);

}

我不建議僅將 4 個點用于形成墻的三角測量儀。但是,對于復雜的多邊形和非凸形狀,它應該會很方便。


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 140 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號