首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2ME开发 >

关于M3G纹理有关问题

2012-01-06 
关于M3G纹理问题代码如下:protectedvoidinitialize(){//读取两个M3G文件firstWorld(World)load(FILE_NAME

关于M3G纹理问题
代码如下:

protected   void   initialize()   {

//读取两个M3G文件
    firstWorld   =   (World)   load(FILE_NAME)[0];
    secondWorld   =   (World)   load(FILE_NAME)[0];

//设置3D模型的背景

    Image   bgImage_1   =   null;
    Image   bgImage_2   =   null;
    try   {
      bgImage_1   =   Image.createImage( "/images/cj02_1.gif ");
      bgImage_2   =   Image.createImage( "/images/cj02_2.gif ");
    }   catch   (IOException   e)   {
      //   TODO   自动生成   catch   块
      e.printStackTrace();
    }

    Image2D   bg2D_1   =   null;
    Image2D   bg2D_2   =   null;
    if   ((bgImage_1   !=   null)   &&   (bgImage_2   !=   null))   {
      bg2D_1   =   new   Image2D(Image2D.RGB,   bgImage_1);
      bg2D_2   =   new   Image2D(Image2D.RGB,   bgImage_2);
    }

    background_1   =   new   Background();
    background_1.setImage(bg2D_1);
    firstWorld.setBackground(background_1);

    background_2   =   new   Background();
    background_2.setImage(bg2D_2);
    secondWorld.setBackground(background_2);
   

//生成Texture2D对象
    Image   image   =   null;
          try   {
            image   =   Image.createImage( "/images/texture03.jpg ");
          }   catch   (IOException   e)   {
            //   TODO   自动生成   catch   块
            e.printStackTrace();
          }
   
    Image2D   image2D   =   new   Image2D(Image2D.RGB,image);
          texture   =   new   Texture2D(image2D);
          texture.setWrapping(Texture2D.WRAP_REPEAT,   Texture2D.WRAP_REPEAT);
          texture.setFiltering(Texture2D.FILTER_NEAREST,   Texture2D.FILTER_NEAREST);
          texture.setBlending(Texture2D.FUNC_DECAL);
   

//遍历所有mesh,设置纹理
        traverse(firstWorld);
        traverse(secondWorld);
  }

private   void   traverse(Node   aNode)
        {    
                if   (aNode   instanceof   Mesh)
                {
                        Mesh   mesh   =   (Mesh)aNode;                        
                        for   (int   i   =   0;   i   <   mesh.getSubmeshCount();   i++)
                        {


                          Appearance   app   =   mesh.getAppearance(i);                                                
                          app.setTexture(0,   texture);
                        }
                }
                if   (aNode   instanceof   Group)
                {
                        Group   group   =   (Group)aNode;
                        for   (int   i   =   0;   i   <   group.getChildCount();   i++)
                        {
                                traverse(group.getChild(i));
                        }
                }
        }


执行到render方法时,抛出了异常:

java.lang.IllegalStateException
  at   javax.microedition.m3g.Util3D.throwEx(+79)
  at   javax.microedition.m3g.Graphics3D.render(+185)
  at   cn.edu.upc.trojan.MyGraphics3D.render(+40)
  at   cn.edu.upc.trojan.MyGraphics3D.render(+20)
  at   cn.edu.upc.trojan.MyGraphics3D.render(+15)
  at   cn.edu.upc.trojan.MyCanvas.paint(+78)
  at   javax.microedition.lcdui.Canvas.callPaint(+80)
  at   javax.microedition.lcdui.Display.repaint(+77)
  at   javax.microedition.lcdui.Display.registerNewCurrent(+237)
  at   javax.microedition.lcdui.Display.access$400(+6)
  at   javax.microedition.lcdui.Display$DisplayAccessor.foregroundNotify(+46)
  at   javax.microedition.lcdui.Display$DisplayManagerImpl.notifyWantsForeground(+152)
  at   javax.microedition.lcdui.Display$DisplayManagerImpl.access$100(+6)
  at   javax.microedition.lcdui.Display.setCurrentImpl(+115)
  at   javax.microedition.lcdui.Display.setCurrent(+29)
  at   cn.edu.upc.trojan.MainMIDLET.startApp(+63)
  at   javax.microedition.midlet.MIDletProxy.startApp(+7)
  at   com.sun.midp.midlet.Scheduler.schedule(+270)
  at   com.sun.midp.main.Main.runLocalClass(+28)
  at   com.sun.midp.main.Main.main(+116)

不加纹理的话,两个模型都可以正常显示

纹理图片是一个16*16的单色JPG图片

请问这是什么问题呀?


[解决办法]
首先, 用png.......

热点排行