在Unity 3D上绘制3D多边形

6

我正在为一个项目尝试使用Unity。

我试图从一组坐标中绘制3D多边形。

现在我正在尝试在两个点之间建立一排立方体。我计划将这些点构建成实心形状或只是“墙壁”来形成一个房间。但是,它似乎没有按预期工作。请给予建议。

drawCube( Vector3(10,0,14),Vector3(70,0,14)); 
drawCube( Vector3(90,0,14),Vector3(60,87,45));   

function drawCube(v1,v2) { 



pA = v1; 
pB = v2;
var plane : GameObject = GameObject.CreatePrimitive(PrimitiveType.Cube);

 var between:Vector3 = pB - pA;
    var distance:float = between.magnitude;
plane.transform.localScale.x = distance;
plane.transform.localScale.y=10;
plane.transform.position = pA + (between / 2.0);
plane.transform.LookAt(pB);

}

更新:我也尝试使用网格,但只得到了下面的图像。我做错了什么?
我正在尝试实现这样的效果: enter image description here

用这些点建立一个网格不是更好吗?顺便问一下,你为什么要用立方体来创建三角形?还是我理解错了什么? - AntiHeadshot
1
我尝试使用网格,但是我只得到了一个平面图像。我不知道如何将其制作成3D对象。请给我一个可以参考的直接方法。对于网格,我必须定义vector3点和三角形,以便正确形成形状,是吗? - user2760642
你的图纸显示了一个二维图像,你想得到什么形状?理论上,你只需要定义三角形,但是为了创建它们,你需要点。 - AntiHeadshot
我认为如果没有给定三角形,就不可能创建出类似苹果这样的东西。 - AntiHeadshot
只是为了再次澄清,我拥有的坐标就像黑色轮廓一样,我所尝试实现的只是构建蓝色部分。这不可能吗? - user2760642
显示剩余6条评论
1个回答

8
您可以创建基本形状并对其进行操作,但如果您未来需要扩展或更改需求,这将非常限制您。我建议使用程序化网格来根据需要创建所需的几何体。基础知识并不太难,只是需要通过给定一些顶点构造网格对象的基本组件。以下是构造3D四边形的示例:
using UnityEngine;
using System.Collections.Generic;

public class SquareMaker : MonoBehaviour {

  public List<Vector3> points;

  void Start()
  {
    GameObject threeDSquare = new GameObject("3DSquare");
    threeDSquare.AddComponent<MeshRenderer>();
    threeDSquare.AddComponent<MeshFilter>();
    threeDSquare.GetComponent<MeshFilter>().mesh = CreateMesh(points);
  }

  private Mesh CreateMesh(List<Vector3> points)
  {
    List<int> tris = new List<int>(); // Every 3 ints represents a triangle
    List<Vector2> uvs = new List<Vector2>(); // Vertex position in 0-1 UV space
    /* 4 points in the list for the square made of two triangles:
    0 *--* 1
      | /|
      |/ |
    3 *--* 2
    */
    tris.Add(1); 
    tris.Add(2);
    tris.Add(3);
    tris.Add(3);
    tris.Add(0);
    tris.Add(1);
    // uvs determine vert (point) coordinates in uv space
    uvs.Add(new Vector2(0f, 1f));
    uvs.Add(new Vector2(1f, 1f));
    uvs.Add(new Vector2(1f, 0f));
    uvs.Add(new Vector2(0f, 0f));

    Mesh mesh = new Mesh();
    mesh.vertices = points.ToArray();
    mesh.uv = uvs.ToArray();
    mesh.triangles = tris.ToArray();
    mesh.RecalculateNormals();
    return mesh;
  }
}

注意:这个问题是关于 [tag:unityscript] 但是现在是在 [tag:c#] 中。 - Ruzihm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接