首页 > 解决方案 > 分块绘制等轴测图?

问题描述

我想减少等轴测图实现的绘制调用,所以我考虑组合多个网格并一次性绘制它们。我目前正在从 8x8“块”中的所有图块创建网格。这意味着包含地板、墙壁和对象的网格。这些地板、墙壁和物体只是沿 Y 向上的常规轴放置的四边形。旋转的正交相机提供等距投影矩阵。大多数地板和墙壁用不透明的纹理填充整个四边形,但有些和大多数对象具有 alpha 透明度,如窗户、破损的地板或椅子对象。我正在通过向其中添加单个网格来构建“块”网格,我这样做是为了从前到下绘制,否则组合的块网格根本无法正确渲染。

然而,当我需要在这些网格块“内部”添加其他对象时,绘图问题就开始了。例如一个移动的玩家,它也是一个具有透明纹理的四边形。我需要能够将他放在那个大块网格中,也许是在他在墙前和窗户后面的瓷砖上。如果我在块之前渲染播放器,它的透明像素将不会显示块网格。如果我在块之后渲染玩家,玩家将不会通过块中的透明四边形可见。如果这可以很容易地解决并且在 CPU/GPU 上不会太贵,那将是我问题的解决方案。但是我认为自己是 OpenGL 的新手,所以我不太清楚它的魔力。

我可以想到一个不涉及OpenGL的视图解决方案来解决这个问题:

这就是我目前的渲染方式。

    Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);
    Gdx.gl.glEnable(GL20.GL_BLEND);
    Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

    shader.begin();
    shader.setUniformMatrix("u_worldView", cam.combined);

    // If I draw the player before the chunk the transparency of the player would not render the chunk.
    player.getMesh().render(shader, GL20.GL_TRIANGLES);

    // Drawing the mesh chunk combines of floors, walls and objects of each tile within the chunk.
    chunk.getCombinedMesh().render(shader, GL20.GL_TRIANGLES);


    // If I draw the player after the chunk the player would not be drawn if it is behind a transparent mesh like a window or a tree.
    player.getMesh().render(shader, GL20.GL_TRIANGLES);     
    shader.end();

那么我在这里有什么选择呢?我可以通过使用 OpenGL 帽子中的一些魔术技巧来解决这个问题吗?或者您还有其他建议可以放在上面的列表中吗?我正在为我的项目使用 LibGDX。

标签: javaopengllibgdxdrawing

解决方案


推荐阅读