【问题标题】:Drawing 3D polygon on unity 3d在统一 3d 上绘制 3D 多边形
【发布时间】:2016-02-10 07:04:07
【问题描述】:

我正在为我正在进行的项目尝试统一。

我正在尝试从我拥有的一组坐标中绘制 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);

}

更新:我也尝试过使用网格,但我得到的只是下图。我究竟做错了什么?

我正在努力实现这样的目标

【问题讨论】:

  • 用这些点构建网格不是更好吗?顺便提一句。你为什么用立方体来创建三角形?还是我搞错了?
  • 我尝试使用网格,但得到的只是平面图像。我不知道如何将其制成 3D 对象。请直接给我一个我可以查看的。而对于网格,我必须同时定义 vector3 点和三角形才能从形状正确吗?
  • 您的绘图显示的是 2D 图像,您想要得到什么样的形状?理论上你只需要定义三角形,但是为了创建它们你需要点。
  • 平面图上类似于“空格”的坐标。我正在尝试将它们构建成块(*如上图),以便用户在构建隔墙后直观地看到“空间”。
  • 我认为没有给定的三角形就不可能创造出像苹果这样的东西。

标签: unity3d unityscript


【解决方案1】:

您可以制作原语并对其进行操作,但如果您将来需要扩展或更改您的需求,这将极大地限制您。我建议使用程序网格来创建所需的几何图形。基础知识并不太难,只需根据给定一些顶点的基础组件构造 Mesh 对象。下面是一个构造 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;
  }
}

【讨论】:

猜你喜欢
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多