我无法将纹理映射到我用java3d(SimpleUniverse)制作的平面

我无法将纹理映射到我用java3d(SimpleUniverse)制作的平面,java,textures,loader,Java,Textures,Loader,大家好,我非常感谢大家对我的代码的帮助。我刚刚用Java3d(VirtualUniverse)为我的第一个游戏制作了一个主菜单。所以我无法解决的问题是,我试图在我制作的平面上映射纹理,但它不起作用。纹理不会出现,它只是用纹理像素为平面着色,仅此而已。我正在尝试加载背景类第78行的图像。。。我这里有3个类1)背景是渲染所有内容的主要类。2) 飞机课我在这里做飞机。3) Menutexts类在这里我制作了单词 1) 背景类: package Aplication; import com.sun.j

大家好,我非常感谢大家对我的代码的帮助。我刚刚用Java3d(VirtualUniverse)为我的第一个游戏制作了一个主菜单。所以我无法解决的问题是,我试图在我制作的平面上映射纹理,但它不起作用。纹理不会出现,它只是用纹理像素为平面着色,仅此而已。我正在尝试加载背景类第78行的图像。。。我这里有3个类1)背景是渲染所有内容的主要类。2) 飞机课我在这里做飞机。3) Menutexts类在这里我制作了单词

1) 背景类:

package Aplication;

import com.sun.j3d.utils.universe.SimpleUniverse;

import java.applet.Applet;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;

import javax.media.j3d.AmbientLight;
import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.ImageComponent2D;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Texture;
import javax.media.j3d.TextureAttributes;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.universe.SimpleUniverse;

public class backGround extends Applet{
    private java.net.URL bgImage = null;

    public backGround(){
        init();
        setLayout(new BorderLayout());
        GraphicsConfiguration config =
                SimpleUniverse.getPreferredConfiguration();

        Canvas3D c = new Canvas3D(config);
        add("Center", c);

        SimpleUniverse u = new SimpleUniverse(c);

        //set background Texture
        u.addBranchGraph( createBackground() );

        BranchGroup scene = createSceneGraphMenu();

        // This will move the ViewPlatform back a bit so the
        // objects in the scene can be viewed.
        u.getViewingPlatform().setNominalViewingTransform();
        scene.compile();

        u.addBranchGraph(scene);

    }
    public void init(){
        setSize(1280,650);

    }
    // create the BackGround
    public BranchGroup createBackground(){
        BranchGroup bg = new BranchGroup();
        ImageComponent2D image = new TextureLoader(
                 "C:/Users/bounty_wiz/workspace/finalProject/images/sky.jpg", this).getScaledImage( 1300,750 );

        Background background = new Background(image);
        background.setApplicationBounds(new BoundingSphere(new Point3d(0,0,0), 1000));
        bg.addChild(background);
        return bg;
    }

    // create the main menu
    public BranchGroup createSceneGraphMenu(){
        BranchGroup menu = new BranchGroup();

        // Load Texture
        Texture tex = new TextureLoader( "C:/Users/bounty_wiz/workspace/finalProject/images/grass.jpg", this ).getTexture( );
        Appearance appear = new Appearance(); // appearance to configure the texture
        Shape3D planee = new plane(appear).getShape(); // create plane ( constructor of plane class)
        appear.setTexture(tex); 
        planee.setBounds(new BoundingSphere());
        menu.addChild(planee);

        // set ambient light
        AmbientLight lightA = new AmbientLight();
        lightA.setInfluencingBounds(new BoundingSphere());
        menu.addChild(lightA);

        //set Directional light
        DirectionalLight lightD1 = new DirectionalLight();
        lightD1.setInfluencingBounds(new BoundingSphere());
        Vector3f direction = new Vector3f(-1.0f, -1.0f, -1.0f);
        direction.normalize();
        lightD1.setDirection(direction);
        menu.addChild(lightD1);

        // make texts
        TransformGroup trans = new Menutexts().getTrans();
        menu.addChild(trans);

        return menu;
    }




public static void main(String argv[]) {
    Frame frame = new MainFrame(new backGround(), 750, 750);
  }
}
/*==2)平面类=============================*/

package Aplication;

import java.awt.Frame;

import javax.media.j3d.Appearance;
import javax.media.j3d.Geometry;
import javax.media.j3d.GeometryArray;
import javax.media.j3d.Material;
import javax.media.j3d.QuadArray;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Texture;
import javax.vecmath.Color3f;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.image.TextureLoader;

public class plane extends Shape3D {
    private Shape3D plane = new Shape3D();

    public plane(Appearance app){
        plane.setGeometry(createGeometry(new Point3f(-1.5f, -0.5f, -5.0f), new Point3f(-1.5f, -0.5f, 1.0f),new Point3f(1.5f, -0.5f, 1.0f), new Point3f(1.5f, -0.5f, -5.0f)));
        plane.setAppearance(createAppearance(app));
    }

    private Geometry createGeometry(Point3f A, Point3f B, Point3f C, Point3f D){
          QuadArray plane = new QuadArray(4, GeometryArray.COORDINATES
                  | GeometryArray.NORMALS);
          plane.setCoordinate(0, A);
          plane.setCoordinate(1, B);
          plane.setCoordinate(2, C);
          plane.setCoordinate(3, D);

          Vector3f a = new Vector3f(A.x - B.x, A.y - B.y, A.z - B.z);
          Vector3f b = new Vector3f(C.x - B.x, C.y - B.y, C.z - B.z);
          Vector3f n = new Vector3f();
          n.cross(b, a);

          n.normalize();

          plane.setNormal(0, n);
          plane.setNormal(1, n);
          plane.setNormal(2, n);
          plane.setNormal(3, n);

          return plane;
    }

    private Appearance createAppearance(Appearance app){
          Color3f color = new Color3f(0.0f,1.5f,0.0f);
          Material material = new Material();
          material.setDiffuseColor(color);
          app.setMaterial(material);

          return app;
    }

    public Shape3D getShape(){
        return plane;
    }
}
/=======3)菜单文本类============================/

package Aplication;

import java.awt.Color;
import java.awt.Font;

import javax.media.j3d.AmbientLight;
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Font3D;
import javax.media.j3d.FontExtrusion;
import javax.media.j3d.Material;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Text3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Color3f;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;

public class Menutexts {
    private String fontName = "TestFont";
    private String singlePlayer = null;
    private String multiPlayer = null;
    private String instructions = null;
    TransformGroup objScale;

    public Menutexts(){
        singlePlayer  = "Single Player";
        multiPlayer = "MultiPlayer";
        instructions = "Instructions";
        objScale = new TransformGroup();

        Transform3D t3d = new Transform3D();
        // Assuming uniform size chars, set scale to fit string in view
        t3d.setScale(1.5/16);
        objScale.setTransform(t3d);

        // identity.  Enable the TRANSFORM_WRITE capability so that
        // our behavior code can modify it at runtime.  Add it to the
        // root of the subgraph.
        TransformGroup objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        objScale.addChild(objTrans);

        Font3D f3d;

        f3d = new Font3D(new Font(fontName, Font.ITALIC, 1),
                 new FontExtrusion());
        Text3D txt1 = new Text3D(f3d, singlePlayer, new Point3f( -2.2f, 1f, -1.f));
        Text3D txt2 = new Text3D(f3d, multiPlayer, new Point3f( -2.2f, -0.3f, -1.f));
        Text3D txt3 = new Text3D(f3d, instructions, new Point3f( -2.2f, -1.4f, -1.f));
            Shape3D shape1 = new Shape3D();
            Shape3D shape2 = new Shape3D();
            Shape3D shape3 = new Shape3D();
            Appearance app = new Appearance();
            Material shapeMaterial = new Material();
            shapeMaterial.setLightingEnable(true);
            shapeMaterial.setDiffuseColor(new Color3f(1,1,0));
            app.setMaterial(shapeMaterial);

            shape1.setGeometry(txt1);
            shape1.setAppearance(app);

            shape2.setGeometry(txt2);
            shape2.setAppearance(app);

            shape3.setGeometry(txt3);
            shape3.setAppearance(app);

            // set Lightning
            Color3f ambientColor = new Color3f(1.0f, 1.0f, 0.0f);
            AmbientLight ambientLightNode = new AmbientLight(ambientColor);
            ambientLightNode.setInfluencingBounds(new BoundingSphere());
            objTrans.addChild(ambientLightNode);

            // Set up the directional lights
            Color3f light1Color = new Color3f(0.862f, 0.862f, 0.862f);
            Vector3f light1Direction  = new Vector3f(-1.0f, -1.0f, -1.0f);

            DirectionalLight light1
                = new DirectionalLight(light1Color, light1Direction);
            light1.setInfluencingBounds(new BoundingSphere());
            objTrans.addChild(light1);          

            objTrans.addChild(shape1);
            objTrans.addChild(shape2);
            objTrans.addChild(shape3);
    }

    public TransformGroup getTrans(){
        return objScale;
    }
}