2014-02-13 139 views
3

在我的第一個3D遊戲中,我現在想渲染地板,它實際上是一個飛機(不是libgdx Plane)的y = 0Libgdx渲染3D遊戲的地板

我想添加一個Texture它,所以我可以在每個級別有不同的樓層。

現在我的問題是:什麼是創建和渲染這個紋理地板的最佳方式是什麼?

我想到使用具有ModelBuilder製成鹼性Block Models,然後加入一Texture,但我只能看到6 1面對2D Texture就足夠了,所以我想約Plane

我可以添加一個TexturePlane,因爲它是3D房間裏的無限面孔嗎?我最後想到的是Decal

Decal s我在找什麼?我該如何使用它們?或者你有其他解決方案。

任何教程或其他幫助將是偉大的。

感謝

回答

5

首先關於貼花,貼花像精靈,但在三維座標,使用這樣的:

私人貼花貼花; 私人DecalBatch decalBatch;

在顯示

()或創建()

decalBatch = new DecalBatch(); 
CameraGroupStrategy cameraGroupStrategy = new CameraGroupStrategy(camera); 
decal = Decal.newDecal(textureRegion, true); 
decal.setPosition(5, 8, 1); 
decal.setScale(0.02f); 
decalBatch.setGroupStrategy(cameraGroupStrategy); 
在渲染()

//Add all your decals then flush() 
decalBatch.add(decal); 
decalBatch.flush(); 

也與decalBatch.dispose處置

();

請注意,在未來的貼花將是3D的一部分,我個人不鼓勵你使用貼花作爲我自己使用3D平面,我看到它的一些問題,使用3D平面使用像這些,我貼了一些我的這裏代碼

private Model createPlaneModel(final float width, final float height, final Material material, 
      final float u1, final float v1, final float u2, final float v2) { 

modelBuilder.begin(); 
MeshPartBuilder bPartBuilder = modelBuilder.part("rect", 
GL10.GL_TRIANGLES, Usage.Position | Usage.Normal | Usage.TextureCoordinates, 
material); 
//NOTE ON TEXTURE REGION, MAY FILL OTHER REGIONS, USE GET region.getU() and so on 
bPartBuilder.setUVRange(u1, v1, u2, v2); 
     bPartBuilder.rect(
       -(width*0.5f), -(height*0.5f), 0, 
       (width*0.5f), -(height*0.5f), 0, 
       (width*0.5f), (height*0.5f), 0, 
       -(width*0.5f), (height*0.5f), 0, 
       0, 0, -1); 


     return (modelBuilder.end()); 
    } 

紋理可以作爲屬性材料

material.set(new TextureAttribute(TextureAttribute.Diffuse, texture) 

對於已經阿爾法添加到其他屬性透明平面

attributes.add(new BlendingAttribute(color.getFloat(3)));   
attributes.add(new FloatAttribute(FloatAttribute.AlphaTest, 0.5f)); 

material.set(attributes); 

初始化的ModelInstance與ModelBatch對象

modelBatch.render(modelInstance); 

看到這些鏈接也得到一個返回

​​

渲染渲染)模型(。 http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=11884

這是我對平面基準VS貼花 http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=12493

+0

因此,在這一刻,我不應該使用貼花?使用MeshPartBuilder,我可以在3D空間中構建2D矩形?多數民衆贊成我正在尋找,因爲我想創建tilebased地板。通過這種方法,每塊瓷磚都將作爲材質的矩形。我對嗎? – Springrbua

+0

你可以使用任何你想要的東西,這取決於你的使用情況,如果你有很多的透明的然後使用飛機,否則使用貼花或模型,也注意如果你想渲染精靈,然後在模型批次後添加精靈,順序是重要的,因爲我寫了你可以同時使用貼花和模型貼花有點記憶友好,但你應該測試兩個看看什麼對你有好處。請注意,如果您在u中添加更高的值,並且v您有重複的紋理。 – daniel

+0

+1。非常感謝。我會嘗試。 – Springrbua