jiahan
Junior Newbie
Java games rock!
|
 |
«
Posted
2005-03-23 14:03:44 » |
|
When I use mipmap mode in Texture component, I will get following error message.. ---------------------------------------- java.lang.NullPointerException at javax.media.j3d.TextureRetained.checkSizes(TextureRetained.java:406) at javax.media.j3d.TextureRetained.setLive(TextureRetained.java:943) at javax.media.j3d.TextureUnitStateRetained.setLive(TextureUnitStateRetained.java:471) at javax.media.j3d.AppearanceRetained.setLive(AppearanceRetained.java:927) at javax.media.j3d.Shape3DRetained.doSetLive(Shape3DRetained.java:1066) at javax.media.j3d.Shape3DRetained.setLive(Shape3DRetained.java:891) at javax.media.j3d.GroupRetained.childDoSetLive(GroupRetained.java:2125) at javax.media.j3d.GroupRetained.doSetLive(GroupRetained.java:2180) at javax.media.j3d.TransformGroupRetained.setLive(TransformGroupRetained.java:549) at javax.media.j3d.GroupRetained.childDoSetLive(GroupRetained.java:2125) at javax.media.j3d.GroupRetained.doSetLive(GroupRetained.java:2180) at javax.media.j3d.BranchGroupRetained.setLive(BranchGroupRetained.java:160) at javax.media.j3d.GroupRetained.childDoSetLive(GroupRetained.java:2125) at javax.media.j3d.GroupRetained.doSetLive(GroupRetained.java:2180) at javax.media.j3d.TransformGroupRetained.setLive(TransformGroupRetained.java:549) at javax.media.j3d.GroupRetained.childDoSetLive(GroupRetained.java:2125) at javax.media.j3d.GroupRetained.doSetLive(GroupRetained.java:2180) at javax.media.j3d.BranchGroupRetained.setLive(BranchGroupRetained.java:160) at javax.media.j3d.GroupRetained.childCheckSetLive(GroupRetained.java:2132) at javax.media.j3d.GroupRetained.checkSetLive(GroupRetained.java:1527) at javax.media.j3d.GroupRetained.checkSetLive(GroupRetained.java:1448) at javax.media.j3d.GroupRetained.doAddChild(GroupRetained.java:483) at javax.media.j3d.GroupRetained.addChild(GroupRetained.java:456) at javax.media.j3d.Group.addChild(Group.java:266)------------------------------------------------------
The code(I use setInterleavedVertexBuffer(J3DBuffer) to set geometry's vertex data):----------------------------------------- Appearance a = new Appearance(); Material m = new Material(new Color3f(0.6f,0.6f,0.6f), new Color3f(0,0,0), new Color3f(1,1,1), new Color3f(0.8f,0.8f,0.8f),32); TextureLoader loader = new TextureLoader(image,"RGBA", TextureLoader.BY_REFERENCE|TextureLoader.GENERATE_MIPMAP, null); ImageComponent2D tImage = loader.getImage(); int textureSize = RenderingCapabilityManager.getTextureSize(new Dimension(tImage.getWidth(), tImage.getHeight())); Dimension size = new Dimension(textureSize, textureSize); Shape3D shape = new Shape3D(this.createPlane(v), a); Texture2D texture = new Texture2D(RenderingCapabilityManager.getMipMapMode(), Texture.RGBA,size.width, size.height); int imageLevel =0; boolean mipMode = RenderingCapabilityManager.getMipMapMode() ==Texture.MULTI_LEVEL_MIPMAP; TextureAttributes ta = new TextureAttributes(); TextureUnitState[] tus = new TextureUnitState[1]; tus[0] = new TextureUnitState(texture, ta, null); PolygonAttributes pa = new PolygonAttributes(PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_NONE, 0, true); TransparencyAttributes tta = new TransparencyAttributes(TransparencyAttributes.NICEST, 1f); ta.setTextureMode(TextureAttributes.REPLACE); pa.setUserData(false);//don't modify PolygonAttributes a.setPolygonAttributes(pa); a.setTransparencyAttributes(tta); do{ tImage = loader.getScaledImage(size.width, size.height); texture.setImage(imageLevel++, tImage); System.out.println(tImage); size.width >>=1; size.height >>=1; }while(size.width>1 && size.height >1 && mipMode); texture.setMaximumLevel(imageLevel-1); //System.out.println(texture.getImage(imageLevel-1)); a.setTextureUnitState(tus); a.setMaterial(m); ------------------------------------------- But if I did't use mipmap mode, use baselevel mode, every thing is working fine.. I do't know why...Is everyone can help me~
My JDK is 1.5,Java3D API is 1.3.1(OpenGl) and video card is Geforce6800 Ultra Thanks...
|