大家好,我非常感谢我的代码帮助。我刚刚在Java3d(VirtualUniverse)中为我的第一个游戏制作了一个主菜单。所以我无法解决的问题是我试图在我制作的平面上绘制纹理而不是它的工作。纹理不会出现它只是用纹理像素着色平面但仅此而已。我试图在backGround类的第78行加载图像...我在这里3 classe 1)backGround是渲染所有的主类。 2)飞机课在这里我做一架飞机。 3)Menutexts课在这里我做了一些话。
1)backGround课程:
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)Menutexts类============================ /
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;
}
}