0

我正在尝试使用 Java3D 制作钻石,但无论我做什么,结果都不是预期的。

public class Tetrahedron extends IndexedTriangleArray {
  
    public Tetrahedron() {
    super(13, TriangleArray.COORDINATES | TriangleArray.NORMALS, 18);
    
     //Base
      setCoordinate(0, new Point3f(0, -1f, 0));
      
      //Cantos
      setCoordinate(1, new Point3f(1f, 0.5f, 1));
      setCoordinate(2, new Point3f(1f, 0.5f, -1));
      setCoordinate(3, new Point3f(-1f, 0.5f, -1));
      setCoordinate(4, new Point3f(-1, 0.5f, 1));
      
      //Feito
      setCoordinate(5, new Point3f(-0.5f, 1f, 0.5f));
      setCoordinate(6, new Point3f(0, 0.5f, 1f));
      setCoordinate(7, new Point3f(0.5f, 1f, 0.5f));
      
      //
      setCoordinate(8, new Point3f(1f, 0.5f, 0f));
      setCoordinate(9, new Point3f(0.5f, 1f, -0.5f));
      //
      setCoordinate(10, new Point3f(0f, 0.5f, -1f));
      setCoordinate(11, new Point3f(-0.5f, 1f, -0.5f));
      //
      setCoordinate(12, new Point3f(-1f, 0.5f, 0f));

    
    int[] coords = {0,1,2, 0,2,3, 0,3,4  0,4,5  ,0, 3,2,1 ,3,1,2};
    
    
    float n = (float)(1.0/Math.sqrt(3));
    setNormal(0, new Vector3f(n,n,-n));
    setNormal(1, new Vector3f(n,-n,n));
    setNormal(2, new Vector3f(-n,-n,-n));
    setNormal(3, new Vector3f(-n,n,n));
    setNormal(2, new Vector3f(n,n,-n));
    setNormal(3, new Vector3f(n,-n,n));
    int[] norms = {0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5};
    
    setCoordinateIndices(0, coords);
    setNormalIndices(0, norms);
     }
    }

我尝试了一堆代码,其中一些几乎是我想要的输出,但不是基本的菱形,我相信坐标是菱形的工作方式,所以问题可能出在法线上。我知道这一定是一个要解决的简单问题,但我是 Java3D 的新手,这个问题阻碍了我继续我的项目。

4

0 回答 0