2012-12-02 83 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,而紋理現在映射到整個球體。