2016-08-18 84 views
0

我有一個3D Sprite的東西,看起來像https://xoppa.github.io/blog/a-simple-card-game/的最後一步。產生其渲染這樣LibGDX可渲染只能通過着色器一次?

public void getRenderables(Array<Renderable> renderables, Pool<Renderable> pool) { 
     meshBuilder.begin(mesh.getVertexAttributes()); 
     meshBuilder.part("cards", GL20.GL_TRIANGLES, renderable.meshPart); 
     for (Card card : this) { 
      meshBuilder.setVertexTransform(card.transform); 
      meshBuilder.addMesh(card.vertices, card.indices); 
     } 
     meshBuilder.end(mesh); 

     renderables.add(renderable); 
    } 

奇怪的部分是,它似乎獲得由modelbatch呈現第一次是它永遠的樣子嘛。例如,如果我用一個幀緩衝區中的普通着色器渲染它,然後使用深度貼圖着色器(它只輸出變化的灰色陰影)再次渲染它,它會以某種方式具有顏色。因此,我認爲它無論如何都不會再次通過着色器。

有誰知道這是爲什麼?對我來說這似乎很奇怪。

儘管我知道貼花存在,但我希望「3D精靈」能夠與其他一切一起呈現。

回答

0

好的,我得到了它的工作。問題是它只添加可渲染的一次;相反,它需要每次添加一個新的可渲染。

val renderable = pool.obtain() 
renderable.material = mat 
... 
renderables.add(renderable) 

編輯:

更好的答案,renderables緩存他們使用的着色器。 renderable.shader = null也會執行這個技巧。