libgdx贴图未拉入模具缓冲区

Veljko

我正在使用libgdx引擎中的3d应用程序。

我只是想知道decalBatch不会拖入模具缓冲区中。我想为3d世界制作模板遮罩,但它根本没有用。

这是适用于sprite批处理的代码,但不适用于decal批处理。请帮助!

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_STENCIL_BUFFER_BIT);
    // batch.setProjectionMatrix(camera.combined);

    // setup drawing to stencil buffer
    Gdx.gl20.glEnable(GL20.GL_STENCIL_TEST);
    Gdx.gl20.glStencilFunc(GL20.GL_ALWAYS, 0x1, 0xffffffff);
    Gdx.gl20.glStencilOp(GL20.GL_REPLACE, GL20.GL_REPLACE, GL20.GL_REPLACE);
    Gdx.gl20.glColorMask(false, false, false, false);

    // draw base pattern
    shapeRenderer.begin(ShapeType.Filled);
    shapeRenderer.identity();
    shapeRenderer.setColor(1f, 0f, 0f, 0.5f);

    shapeRenderer.rect(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 100, 100);

    shapeRenderer.end();

    spriteBatch.begin();
    // fix stencil buffer, enable color buffer
    Gdx.gl20.glColorMask(true, true, true, true);
    Gdx.gl20.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_KEEP);

    // draw where pattern has NOT been drawn
    Gdx.gl20.glStencilFunc(GL20.GL_NOTEQUAL, 0x1, 0xff);

    // decalBatch.add(decal);
    // decalBatch.flush();

    spriteBatch.draw(Assets.instance.background, 0, 0, Gdx.graphics.getWidth(),         Gdx.graphics.getHeight());

    // draw where pattern HAS been drawn.
    // Gdx.gl20.glStencilFunc(GL20.GL_EQUAL, 0x1, 0xff);

    // spriteBatch.draw(Assets.instance.actor1, -Gdx.graphics.getWidth() /
    // 2, -Gdx.graphics.getHeight() / 2, Gdx.graphics.getWidth(),
    // Gdx.graphics.getHeight());

    spriteBatch.end();

编辑:

我发现应该清除深度缓冲区,并启用和禁用DepthMask,但是我无法对其进行管理。

Veljko

哦,我只是想通了。必须启用深度缓冲区,因为贴图在3d世界中。

如果有人感兴趣,这是解决方案:

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_STENCIL_BUFFER_BIT |     GL20.GL_DEPTH_BUFFER_BIT);

    // setup drawing to stencil buffer
    Gdx.gl20.glEnable(GL20.GL_STENCIL_TEST);
    Gdx.gl20.glStencilFunc(GL20.GL_ALWAYS, 0x1, 0xffffffff);
    Gdx.gl20.glStencilOp(GL20.GL_REPLACE, GL20.GL_REPLACE, GL20.GL_REPLACE);
    Gdx.gl20.glColorMask(false, false, false, false);
    Gdx.gl20.glDepthMask(false);

    // draw base pattern
    shapeRenderer.begin(ShapeType.Filled);
    shapeRenderer.identity();
    shapeRenderer.setColor(1f, 0f, 0f, 0.5f);

    shapeRenderer.rect(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2, 100, 100);

    shapeRenderer.end();

    // fix stencil buffer, enable color buffer
    Gdx.gl20.glColorMask(true, true, true, true);
    Gdx.gl20.glDepthMask(true);
    Gdx.gl20.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_KEEP);

    // draw where pattern has NOT been drawn
    Gdx.gl20.glStencilFunc(GL20.GL_NOTEQUAL, 0x1, 0xff);

    decalBatch.add(decal);
    decalBatch.flush();

    Gdx.gl20.glDisable(GL20.GL_STENCIL_TEST);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

LibGDX帧缓冲区

来自分类Dev

模具传递是否写入颜色缓冲区?

来自分类Dev

在OpenGL中更新模具缓冲区时的问题

来自分类Dev

模具缓冲区似乎无法正常工作

来自分类Dev

libGDX帧缓冲区Alpha问题

来自分类Dev

OpenGL帧缓冲区+ LibGDX

来自分类Dev

libGDX帧缓冲区Alpha问题

来自分类Dev

在OpenGL ES中使用深度和模具渲染缓冲区附件作为帧缓冲区

来自分类Dev

glreadpixels模具缓冲区总是抛出GL_INVALID_OPERATION

来自分类Dev

LibGDX 如何从 FrameBuffer 获取深度缓冲区?

来自分类Dev

使用帧缓冲区渲染为立方体贴图纹理

来自分类Dev

使用立方体贴图时的OpenGL清除缓冲区

来自分类Dev

是否可以使用带有立方贴图颜色附件的深度渲染缓冲区?

来自分类Dev

使用帧缓冲区渲染为立方体贴图纹理

来自分类Dev

需要CFReadStream块,直到未填充缓冲区大小

来自分类Dev

套接字缓冲区大小未增加

来自分类Dev

Winapi:编辑控件未扩展其缓冲区

来自分类Dev

扫描仪缓冲区未清除

来自分类Dev

比较缓冲区

来自分类Dev

请求缓冲区

来自分类Dev

如何将行拉入同一寄存器,然后粘贴到新缓冲区中?

来自分类Dev

(阴影贴图)将深度缓冲区渲染为纹理并进行绘制以进行检查

来自分类Dev

NodeJS缓冲区-读取小端缓冲区

来自分类Dev

多个缓冲区还是单个缓冲区?

来自分类Dev

何时使用数组,缓冲区或直接缓冲区

来自分类Dev

Vim检测当前缓冲区是哪种缓冲区

来自分类Dev

重叠缓冲区的内存

来自分类Dev

清除键盘缓冲区

来自分类Dev

缓冲区何时刷新