Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 3d:对象显示不正确_Java_3d_Java 3d_Modeling_3d Modelling - Fatal编程技术网

Java 3d:对象显示不正确

Java 3d:对象显示不正确,java,3d,java-3d,modeling,3d-modelling,Java,3d,Java 3d,Modeling,3d Modelling,我正在尝试使用GeometryInfo创建一个模型。我只是简单地制作一个平面模型,并将其附加到y轴的反射上,以获得对称性。但是当运行时,下面的代码只显示我编程的模型的一半(它只显示y轴左侧的一侧)。我做错了什么 这个节目是从舞台班开始的。如果有任何建议,我将不胜感激 public class Head extends BranchGroup { public Head() { Shape3D shape = getShape(); setAppearance(shape,

我正在尝试使用GeometryInfo创建一个模型。我只是简单地制作一个平面模型,并将其附加到y轴的反射上,以获得对称性。但是当运行时,下面的代码只显示我编程的模型的一半(它只显示y轴左侧的一侧)。我做错了什么

这个节目是从舞台班开始的。如果有任何建议,我将不胜感激

public class Head extends BranchGroup
{
    public Head()
{
    Shape3D shape = getShape();
    setAppearance(shape, 1.0f, 0.0f, 0.0f);
    this.addChild(shape);
}

private Shape3D getShape()
{
    float[] data = shapeCoord();
    int[] stripCount = {3,3,3,3,3,3,3,3,3,3,3,3};
    GeometryInfo gi = new GeometryInfo(GeometryInfo.POLYGON_ARRAY);
    gi.setCoordinates(data);
    gi.setStripCounts(stripCount);

    Triangulator tr = new Triangulator();
    tr.triangulate(gi);
        gi.recomputeIndices();

    NormalGenerator ng = new NormalGenerator();
    ng.generateNormals(gi);
        gi.recomputeIndices();

    Stripifier st = new Stripifier();
    st.stripify(gi);
        gi.recomputeIndices();

    Shape3D part = new Shape3D();
    part.setGeometry(gi.getGeometryArray());

    return part;
}

    public static void setAppearance(Shape3D shape, float x, float y, float z)
    {
        ColoringAttributes ca = new ColoringAttributes();
        ca.setColor(x, y, z);
        Appearance appear = new Appearance();
        Material material = new Material();
        material.setDiffuseColor(x, y, z);
        appear.setMaterial(material);
        appear.setColoringAttributes(ca);
        shape.setAppearance(appear);
    }



private float[] shapeCoord()
{
    float[] data = new float[36*3];
    int i=0; 

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = 0.0f; data[i++] = 0.2f; data[i++] = 0.0f;
    data[i++] = 0.09f; data[i++] = 0.18f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = 0.09f; data[i++] = 0.18f; data[i++] = 0.0f;
    data[i++] = 0.14f; data[i++] = 0.1f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = 0.14f; data[i++] = 0.1f; data[i++] = 0.0f;
    data[i++] = 0.16f; data[i++] = 0.0f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = 0.16f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = 0.15f; data[i++] = -0.09f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = 0.15f; data[i++] = -0.09f; data[i++] = 0.0f;
    data[i++] = 0.06f; data[i++] = -0.2f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = 0.06f; data[i++] = -0.2f; data[i++] = 0.0f;
    data[i++] = 0.0f; data[i++] = -0.2f; data[i++] = 0.0f;

    //////////////////////////////////////////////////////////

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = 0.0f; data[i++] = 0.2f; data[i++] = 0.0f;
    data[i++] = -0.09f; data[i++] = 0.18f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = -0.09f; data[i++] = 0.18f; data[i++] = 0.0f;
    data[i++] = -0.14f; data[i++] = 0.1f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = -0.14f; data[i++] = 0.1f; data[i++] = 0.0f;
    data[i++] = -0.16f; data[i++] = 0.0f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = -0.16f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = -0.15f; data[i++] = -0.09f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = -0.15f; data[i++] = -0.09f; data[i++] = 0.0f;
    data[i++] = -0.06f; data[i++] = -0.2f; data[i++] = 0.0f;

    data[i++] = 0.0f; data[i++] = 0.0f; data[i++] = 0.0f;
    data[i++] = -0.06f; data[i++] = -0.2f; data[i++] = 0.0f;
    data[i++] = 0.0f; data[i++] = -0.2f; data[i++] = 0.0f;


    return data;
}
}

public class Stage extends Applet
{
private BranchGroup scene;

public Stage(BranchGroup scene)
{
    setLayout(new BorderLayout());
    GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
    Canvas3D canvas3D = new Canvas3D(config);
    add("Center", canvas3D);

    this.scene = scene;
    scene.compile();    

    SimpleUniverse simpleU = new SimpleUniverse(canvas3D);

    simpleU.getViewingPlatform().setNominalViewingTransform();
    simpleU.addBranchGraph(scene);
}

    public static void main(String[] args) 
{
    Frame frame = new MainFrame(new Stage(new RotationTest()), 500, 500);
} 
}

public class RotationTest extends BranchGroup
{   

    public static final int X = 0;
public static final int Y = 1;
public static final int Z = 2;
public static final int CLOCKWISE = -1;
public static final int COUNTER_CLOCKWISE = 1;
private static long speed = 4000;

public RotationTest()
{
    TransformGroup rotate = new TransformGroup();
    setRotation(rotate, Tools.Y, -Tools.CLOCKWISE, 360d, 4000, -1);
    }

    private static void setRotation(TransformGroup objSpin, int line, int direction, double angle, long rate, int repeat)
{
    speed = rate;
    if((direction != CLOCKWISE) && (direction != COUNTER_CLOCKWISE))
    {
    direction = -1;
    }
    objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    Transform3D axis = new Transform3D();   // rotates around positive y-axis by default
        if(line == X)
    {
    axis.rotZ(Math.toRadians(direction * 90)); // rotates around positive x-axis
    }
    else if(line == Z)
    {
    axis.rotX( Math.toRadians(direction * 90) ); // rotates about the positive z-axis
    }
    else
    {
        axis.rotY( Math.toRadians(direction * 90) ); // rotates about the positive y-axis
    }
    Alpha rotationAlpha = new Alpha(repeat, speed);
    //rotationAlpha.setPhaseDelayDuration(6000);
    RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objSpin, axis, 0.0f, (float) Math.toRadians(angle));
    BoundingSphere bounds = new BoundingSphere();
    rotator.setSchedulingBounds(bounds);
    objSpin.addChild(rotator);
}

    public static void setLighting(BranchGroup objRoot, float x, float y, float z)
{
    Color3f color = new Color3f(x, y, z);
    Vector3f direction = new Vector3f(0.0f, 0.0f, -1.0f);
    DirectionalLight light = new DirectionalLight(color, direction);
    //AmbientLight light = new AmbientLight(color);
    light.setInfluencingBounds(new BoundingSphere());
    objRoot.addChild(light);
}
}

疯狂的刺杀。定义三角形的方式意味着一个“面”朝向摄影机,另一个“面”远离摄影机

  *1

*2   *2'

  *3
按照右手法则,1,2,3将朝向摄影机,1,2',3将朝向别处。如果启用背面消隐,则假定1,2',3位于摄影机的另一侧。如果你翻转相机的位置/矢量,你基本上得到了相同的结果,几乎可以肯定是这样的