大家好我刚刚在java3d(SimpleUniverse)编写代码我不明白它落到了我的异常以及为什么它无法读取文件...我试图通过TextureLoader将图像作为我的backGround图像感谢任何帮帮我们 这是例外:
com.sun.j3d.utils.image.ImageException:javax.imageio.IIOException: 无法读取输入文件!在 com.sun.j3d.utils.image.TextureLoader $ 1.run(TextureLoader.java:344)at at java.security.AccessController.doPrivileged(Native Method)at com.sun.j3d.utils.image.TextureLoader。(TextureLoader.java:337) 在 com.sun.j3d.utils.image.TextureLoader。(TextureLoader.java:291) 在Aplication.backGround.createSceneGraph(backGround.java:60)at Aplication.backGround。(backGround.java:39)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) at sun.reflect.NativeConstructorAccessorImpl.newInstance(未知 来源)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来自java.lang.reflect.Constructor.newInstance(未知来源) 在java.lang.Class.newInstance(未知来源)at sun.applet.AppletPanel.createApplet(未知来源)at sun.applet.AppletPanel.runLoader(未知来源)at sun.applet.AppletPanel.run(未知来源)at java.lang.Thread.run(未知来源)引起: javax.imageio.IIOException:无法读取输入文件!在 javax.imageio.ImageIO.read(未知来源)at com.sun.j3d.utils.image.TextureLoader $ 1.run(TextureLoader.java:342) ......还有14个
这是代码:
/ =========================================== ========================= /
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);
}
}
/ * =============== plane运行上面代码所必需的类====== * /
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;
}
}