gpt4 book ai didi

java - 用于 3D 游戏的 Libgdx 渲染层

转载 作者:搜寻专家 更新时间:2023-11-01 02:09:15 31 4
gpt4 key购买 nike

在我的第一个 3D 游戏中,我现在想要渲染地板,它实际上是 y = 0 上的一个平面(不是 libgdx Plane)。

我想给它添加一个Texture,这样我就可以在每一层都有不同的楼层。

现在我的问题是:创建和渲染这个带纹理的地板的最佳方法是什么?

我考虑过使用通过 ModelBuilder 制作的基本 Block Models,然后添加一个 Texture,但因为我只能看到 6 个面孔中的 1 个一个 2d Texture 就足够了,所以我想到了一个 Plane

我可以将 Texture 添加到 Plane 中吗,因为它是 3D 房间中的无限面?我最后想到的是 Decal

Decal 是我要找的东西吗?我该如何使用它们?或者您有其他解决方案。

任何教程或其他帮助都会很棒。

谢谢

最佳答案

首先关于 Decals,decals 就像 Sprites 但在 3d 坐标中,像这样使用它:

私有(private)贴花;私有(private)DecalBatch decalBatch;

在 show() 或 create() 中

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 的属性添加

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

对于具有 alpha 添加到其他属性的透明平面

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

material.set(attributes);

初始化 ModelInstance 以获取返回的模型

modelInstance = new ModelInstance(createPlaneModel(...))

使用 ModelBatch 对象在 render() 中渲染

modelBatch.render(modelInstance );

也请参阅这些链接。 http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=11884

这是我在平面与贴花上的基准 http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=12493

关于java - 用于 3D 游戏的 Libgdx 渲染层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21749483/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com