我在互聯網上看到Libgdx現在支持立方體貼圖,我正在考慮如何將一個添加到我的遊戲中。我在StackOverflow上搜索了一個例子,但我找到了一個,它看起來已經過時了。我對OpenGL着色器沒有太多的經驗,所以如果Libgdx可以爲我提供一個立方體貼圖而不必閱讀一本關於OpenGL着色器的大書,只是爲了向我的遊戲中的盾添加反射效果,那將會很不錯。任何幫助將不勝感激。Libgdx CubemapAttribute:如何使用Libgdx的CubemapAttribute創建反射?
-1
A
回答
1
A cubemap是通用的,就像2d紋理一樣。它可以用於任何你喜歡的。您也可以有多個立方體貼圖用於不同的目的。同樣,CubemapAttribute
可用於爲您的環境或材料添加立方體貼圖。就像TextureAttribute
可以用來添加2d紋理一樣。
如下您可以創建一個立方體貼圖:
Cubemap cubemap = new Cubemap(
Gdx.files.internal("image_px.png"),
Gdx.files.internal("image_nx.png"),
Gdx.files.internal("image_py.png"),
Gdx.files.internal("image_ny.png"),
Gdx.files.internal("image_pz.png"),
Gdx.files.internal("image_nz.png"), false);
Here你可以找到,你可以用它來創建一個立方體貼圖一些示例圖像。確保相應地調整名稱。
立方體貼圖保存OpenGL資源,因此需要在不再需要時處理。不要忘了此行添加到您的dispose
方法:
cubemap.dispose();
爲立方體貼圖的一個典型用法是提供一種用於模仿反射的「環境地圖」。您可以添加這樣的地圖到您的環境如下:
environment.set(new CubemapAttribute(CubemapAttribute.EnvironmentMap, cubemap));
如果使用DefaultShader
實現,那麼它將綁定這個立方體貼圖到u_environmentCubemap
均勻,這樣你就可以在你的着色器使用它。
請注意,默認着色器程序(glsl文件)不支持反射,您將不得不爲此使用不同的着色器。如果您願意,您可以使用this shader。請注意,模型的材質必須是反光的(see this example material)。
modelBatch = new ModelBatch(new DefaultShaderProvider(
Gdx.files.internal("vertex.glsl"),
Gdx.files.internal("fragment.glsl")));
如果你想使用立方體貼圖在自己的着色器,那麼你可以用它基本上like this(只是一個簡單的例子,我不會進入實際着色器寫,因爲這超出了問題的範圍) :
gl_FragColor = vec4(textureCube(u_environmentCubemap, reflectDir).rgb, 1.0);
相關問題
- 1. 創建從LibGdx
- 2. LibGDX如何用Java創建消息框?
- 3. 如何使用libgdx
- 4. 如何使用libgdx
- 5. 如何使用LibGDX?
- 6. 使用LibGdx創建Facebook遊戲請求
- 7. 使用libgdx創建交互式動畫
- 8. 使用libGDX在Java中創建對話
- 9. 使用libGDX創建2D Android遊戲
- 10. LibGdx如何創建多個子彈?
- 11. libGDX:我如何創建單向平臺?
- 12. 如何在LibGDX中創建Minimap?
- 13. LibGDX,如何創建2d碰撞地形
- 14. 如何在libgdx中啓用反射來爲我的遊戲使用json解析
- 15. Libgdx創建多個動畫
- 16. LIBGDX - 錯誤創建音樂
- 17. Libgdx - 反覆處理?
- 18. 如何使用LIBGDX TexturePacker2?
- 19. Libgdx - 如何使用「長按」?
- 20. 如何創建皮膚文件在libgdx中使用
- 21. 如何使用libgdx創建Android UI元素
- 22. 如何使用libgdx創建自定義文本框?
- 23. Libgdx - 使用MipMaps
- 24. LibGDX-通過libgdx
- 25. 如何使用-moz-element()創建反射?
- 26. 如何創建使用反射
- 27. LibGdx如何從libgdx類返回到androidActivity
- 28. LibGDX如何使用LibGDX從屏幕底部滑動spritebatch?
- 29. 如何LibGDX
- 30. 如何在libgdx
哇!精彩的回答,謝謝Xoppa – amedina
我真的很感謝你的幫助,Xoppa。我測試了着色器,並且在215行的fragment.glsl中發現了一個bug。現在是:'vec4 specular = vec4(0.0);'它應該是'vec3 specular = vec3(0.0);'我糾正它,它的工作原理,我不知道如果我做的不好,但如果我設置Cubemap屬性,我不能設置環境光,對吧?如果可以,我該怎麼做?謝謝你的幫助。 – amedina
謝謝,我會檢查要點並根據您的更改進行修改,當我找到一些時間在幾臺設備上進行測試時。我沒有用燈光和材料的所有可能組合來檢查着色器(這幾乎不可能),所以可能是某種組合存在問題。環境光實際上只是爲gl_FragColor添加一個值,以便您可以根據需要將它用作自己着色器的基礎。但是,實現這個超出了這個問題的範圍。 – Xoppa