【发布时间】:2021-09-27 18:24:03
【问题描述】:
总结一下这个问题,我有代码使用四边形创建一个立方体,但没有这样做,一些面孔没有明确的原因丢失,希望有人可以帮助我:)
由于某种原因,它不会产生控制台错误
这是应该创建一个立方体的代码:
package Main.Shapes;
import javax.media.j3d.QuadArray;
import javax.media.j3d.Shape3D;
import javax.vecmath.Point3f;
import com.sun.j3d.utils.geometry.GeometryInfo;
import com.sun.j3d.utils.geometry.NormalGenerator;
public class Square {
Shape3D shape;
public Square() {
}
public Shape3D Make(float Size) {
QuadArray polygon1 = new QuadArray (24, QuadArray.COORDINATES);
//Bottom
polygon1.setCoordinate(0, new Point3f (-Size/2, -Size/2, Size/2));
polygon1.setCoordinate(1, new Point3f (Size/2, -Size/2, Size/2));
polygon1.setCoordinate(2, new Point3f(Size/2, -Size/2, -Size/2));
polygon1.setCoordinate(3, new Point3f(-Size/2, -Size/2, -Size/2));
//Front
polygon1.setCoordinate(4, new Point3f (-Size/2, -Size/2, Size/2));
polygon1.setCoordinate(5, new Point3f (Size/2, -Size/2, Size/2));
polygon1.setCoordinate(6, new Point3f (Size/2, Size/2, Size/2));
polygon1.setCoordinate(7, new Point3f (-Size/2, Size/2, Size/2));
//Right
polygon1.setCoordinate(8, new Point3f (Size/2, -Size/2, Size/2));
polygon1.setCoordinate(9, new Point3f (Size/2, Size/2, Size/2));
polygon1.setCoordinate(10, new Point3f(Size/2, Size/2, -Size/2));
polygon1.setCoordinate(11, new Point3f(Size/2, -Size/2, -Size/2));
//Back
polygon1.setCoordinate(12, new Point3f (-Size/2, -Size/2, -Size/2));
polygon1.setCoordinate(13, new Point3f (Size/2, -Size/2, -Size/2));
polygon1.setCoordinate(14, new Point3f (Size/2, Size/2, -Size/2));
polygon1.setCoordinate(15, new Point3f (-Size/2, Size/2, -Size/2));
//Left
polygon1.setCoordinate(16, new Point3f (-Size/2, -Size/2, Size/2));
polygon1.setCoordinate(17, new Point3f (-Size/2, Size/2, Size/2));
polygon1.setCoordinate(18, new Point3f(-Size/2, Size/2, -Size/2));
polygon1.setCoordinate(19, new Point3f(-Size/2, -Size/2, -Size/2));
//Top
polygon1.setCoordinate(20, new Point3f (-Size/2, Size/2, Size/2));
polygon1.setCoordinate(21, new Point3f (Size/2, Size/2, Size/2));
polygon1.setCoordinate(22, new Point3f(Size/2, Size/2, -Size/2));
polygon1.setCoordinate(23, new Point3f(-Size/2, Size/2, -Size/2));
GeometryInfo GI = new GeometryInfo(polygon1);
NormalGenerator normalGenerator = new NormalGenerator();
normalGenerator.generateNormals(GI);
shape = new Shape3D(GI.getIndexedGeometryArray());
return shape;
}
}
(本例中大小为浮点数,等于1)
Polygon 1 是保存所有四边形的变量,其点与形状的点相同。
但是,我没有完全创建立方体,而是缺少底部和背面,我尝试了多个订单,但似乎没有任何效果。
提前致谢:)
【问题讨论】:
-
那是什么框架?你能把正确的标签吗?如果您将一些屏幕截图放入问题中以显示问题,这也可能会有所帮助。并且还要解释你的代码,而不是仅仅在那里转储大量代码。
-
@Zabuzard 我使用了正确的标签,该 api 被 oracle 称为 java-3d :)
-
您是否尝试过颠倒不可见面的顶点顺序?看起来背面剔除正在这里发生。顺时针与逆时针确定一个面是正面还是背面
-
@QBrute 这样就不会为底部索引 0,1,2,3 而是 3,2,1,0?
-
是这样的。我不知道 java-3d 是如何工作的,但你正在创建四边形,应该就是这样。
标签: java polygon shapes java-3d quad