我正在尝试使用 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 的新手,这个问题阻碍了我继续我的项目。