2012-12-02 50 views
2

我想映射围绕从Blender导出的球体的单个纹理。模型在Blender中看起来很棒,但是当我在我的Android应用程序中使用它时,纹理似乎映射到几乎所有的面部,而不是整个球体。有任何想法吗?我在Android上使用libGDX。围绕球体的地图纹理OpenGL ES Android

设置代码:

model = G3dtLoader.loadStillModel(Gdx.files.internal("models/planet.g3dt"), true); 

    for(StillSubMesh mesh: model.subMeshes) { 
     mesh.mesh.scale(0.1f, 0.1f, 0.1f); 
    } 

    G3dExporter.export(model, Gdx.files.local("models/planet.g3d")); 
    model = G3dLoader.loadStillModel(Gdx.files.local("models/planet.g3d")); 

    texture = new Texture(Gdx.files.internal("textures/planet1_pot.png"), true); 

    bounds = new BoundingBox(); 
    model.getBoundingBox(bounds); 
    float len = bounds.getDimensions().len(); 

    cam = new PerspectiveCamera(60, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    cam.position.set(bounds.getCenter().cpy().add(len/2, len/2, len/2)); 
    cam.lookAt(bounds.getCenter().x, bounds.getCenter().y, bounds.getCenter().z); 
    cam.near = 0.1f; 
    cam.far = 1000; 

    renderer = new ImmediateModeRenderer10(); 

渲染代码:

@Override 
    public void renderScreen(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0, 1.0f); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
     Gdx.gl.glEnable(GL10.GL_DEPTH_TEST); 

     cam.update(); 
     cam.apply(Gdx.gl10); 

     if(texture != null) { 
      Gdx.gl.glActiveTexture(GL10.GL_TEXTURE); 
      Gdx.gl.glEnable(GL10.GL_TEXTURE_2D); 
      texture.bind(); 
     } 

     model.render(); 

     if(texture != null) { 
      Gdx.gl.glActiveTexture(GL10.GL_TEXTURE); 
      Gdx.gl.glDisable(GL10.GL_TEXTURE_2D); 
     } 
    } 

编辑: 下面是一个屏幕截图,展示我的问题: enter image description here

+0

也许张贴坏的渲染图片? AFAIK认为只有那样会导致这样的问题的东西可能是不好的模型或不好的模型加载器。我没有使用搅拌机模型导出的快乐记录(它们通常以某种方式破坏我),因此可能检查模型以确保其正确导出?只要它不是二进制文件,也可以在你的文章中添加模型源代码。 – Tim

+0

@Tim我添加了我的问题的屏幕截图。我有点以为这是从Blender出口的问题(我不是Blender的专家,哈哈),所以也许就是这样。我可能会尝试在代码中手动创建一个Sphere,并查看是否可以使它以这种方式正确呈现。 – DRiFTy

回答

1

我结束了出来搞清楚这个问题。我在Blender中重新创建了我的模型this link,它说它已被弃用,并且缺少屏幕截图,但它帮助我。我最终只是将模型导出为.obj,而纹理现在映射到整个球体。