我在互联网上看到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