Hallo Leute, ich habe ein Problem. Kann mir jemand erklären, warum der TextureLoader hier nicht das Bild setzt, das ich als Hintergrund haben möchte? Bitte erkläre mir das Problem. In diesem Teil des Codes, der in der Funktion createSceneGraph() platziert ist, möchte ich mein sky.jpg Bild, das sich im Bilderordner befindet, als backGround einstellen. Was soll ich in meinem Code reparieren? Danke fürs Helfen.wie man backGround Bild in Java3D (SimpleUniverse) setzen
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.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.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);
BranchGroup scene = createSceneGraph();
SimpleUniverse u = new SimpleUniverse(c);
// 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);
}
public BranchGroup createSceneGraph(){
BranchGroup firstBranch = new BranchGroup();
//background.setColor(0.0f,0.0f,2.0f);
BoundingSphere backgroundBounds = new BoundingSphere(new Point3d(0,0,0), 1000);
TextureLoader myLoader = new TextureLoader("../images/sky.jpg",this);
ImageComponent2D myImage = myLoader.getImage();
Background background = new Background();
background.setImage(myImage);
background.setApplicationBounds(backgroundBounds);
firstBranch.addChild(background);
Shape3D plane = new createPlane().getGeo();
plane.setBounds(new BoundingSphere());
firstBranch.addChild(plane);
AmbientLight lightA = new AmbientLight();
lightA.setInfluencingBounds(new BoundingSphere());
firstBranch.addChild(lightA);
DirectionalLight lightD1 = new DirectionalLight();
lightD1.setInfluencingBounds(new BoundingSphere());
Vector3f direction = new Vector3f(-1.0f, -1.0f, -1.0f);
direction.normalize();
lightD1.setDirection(direction);
firstBranch.addChild(lightD1);
return firstBranch;
}
public static void main(String argv[]) {
Frame frame = new MainFrame(new backGround(), 750, 750);
}
}
/========= Ebene Klasse, die mit dieser Klasse arbeitet, um es auszuführen =======/
package Aplication;
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.vecmath.Color3f;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;
public class createPlane extends Shape3D {
Shape3D plane;
public class LitQuad extends Shape3D {
LitQuad(Point3f A, Point3f B, Point3f C, Point3f D) {
this.setGeometry(createGeometry(A, B, C, D));
this.setAppearance(createAppearance());
}
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;
}
Appearance createAppearance() {
Appearance appear = new Appearance();
Color3f color = new Color3f(0.0f,1.5f,0.0f);
Material material = new Material();
material.setDiffuseColor(color);
appear.setMaterial(material);
return appear;
}
}
public createPlane(){
plane = new LitQuad(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));
}
public Shape3D getGeo(){
return plane;
}
}
sehen Sie die Fensterrahmen ?? es funktioniert nach mir – gpasch
ja ich sehe den Rahmen. Es ist, weil ich eine andere Klasse für das Flugzeug habe, hier einfügen: –
gerade aktualisiert die Antwort, die ich die Klasse, die mir das Flugzeug zeichnen, putted ist es notwendig, das Programm zu starten. danke für die Hilfe @gpasch –