Skip to main content

[Need Help]Java3D mipmap problem!

No replies
jiahan
Offline
Joined: 2005-01-21
Points: 0

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...