微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用多边形创建形状无法正常工作 Java3d

如何解决使用多边形创建形状无法正常工作 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;
    }
}

(大小是一个浮点数,在这个例子中等于 1)

polygon 1 是保存所有四边形的变量,其中的点与形状的点相同。

但是没有完全创建立方体,底部和背面丢失了,我尝试了多个订单,但似乎没有任何效果

enter image description here

提前致谢:)

解决方法

您所看到的称为 Back-face culling。根据创建三边形/四边形的顺序(顺时针或逆时针添加顶点),您可以告诉框架该面是正面还是背面。

根据框架如何处理 face culling,面部是否可见(剔除)。

看起来 java-3d 默认启用了背面剔除。因此,对于您的示例,您只需要颠倒添加顶点的顺序即可。 (例如,对于底面,它是索引 3,2,1,0 而不是 0,3

,

我在@QBrute 的帮助下找到了解决方法,问题是我需要在创建某些面时由于某种明显的原因向后索引点,但是如果你的四边形没有显示只是尝试向后索引它们:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。