如何解决使用多边形创建形状无法正常工作 Java3d
总结一下这个问题,我有代码可以使用四边形创建一个立方体,但没有这样做,因为没有明确的原因,一些面不见了,希望有人能帮助我:)
也由于某种原因它不会产生控制台错误
这是应该创建多维数据集的代码:
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));
polygon1.setCoordinate(2,new Point3f(Size/2,-Size/2));
polygon1.setCoordinate(3,new Point3f(-Size/2,-Size/2));
//Front
polygon1.setCoordinate(4,Size/2));
polygon1.setCoordinate(5,Size/2));
polygon1.setCoordinate(6,Size/2,Size/2));
polygon1.setCoordinate(7,Size/2));
//Right
polygon1.setCoordinate(8,Size/2));
polygon1.setCoordinate(9,Size/2));
polygon1.setCoordinate(10,-Size/2));
polygon1.setCoordinate(11,-Size/2));
//Back
polygon1.setCoordinate(12,-Size/2));
polygon1.setCoordinate(13,-Size/2));
polygon1.setCoordinate(14,-Size/2));
polygon1.setCoordinate(15,-Size/2));
//Left
polygon1.setCoordinate(16,Size/2));
polygon1.setCoordinate(17,Size/2));
polygon1.setCoordinate(18,-Size/2));
polygon1.setCoordinate(19,-Size/2));
//Top
polygon1.setCoordinate(20,Size/2));
polygon1.setCoordinate(21,Size/2));
polygon1.setCoordinate(22,-Size/2));
polygon1.setCoordinate(23,-Size/2));
GeometryInfo GI = new GeometryInfo(polygon1);
normalGenerator normalGenerator = new normalGenerator();
normalGenerator.generatenormals(GI);
shape = new Shape3D(GI.getIndexedGeometryArray());
return shape;
}
}
polygon 1 是保存所有四边形的变量,其中的点与形状的点相同。
但是没有完全创建立方体,底部和背面丢失了,我尝试了多个订单,但似乎没有任何效果。
提前致谢:)
解决方法
您所看到的称为 Back-face culling。根据创建三边形/四边形的顺序(顺时针或逆时针添加顶点),您可以告诉框架该面是正面还是背面。
根据框架如何处理 face culling,面部是否可见(剔除)。
看起来 java-3d 默认启用了背面剔除。因此,对于您的示例,您只需要颠倒添加顶点的顺序即可。 (例如,对于底面,它是索引 3,2,1,0
而不是 0,3
)
我在@QBrute 的帮助下找到了解决方法,问题是我需要在创建某些面时由于某种明显的原因向后索引点,但是如果你的四边形没有显示只是尝试向后索引它们:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。