Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenGL ES 2.0中的模板纹理_Java_Opengl Es_Opengl Es 2.0_Libgdx_Stencil Buffer - Fatal编程技术网

Java OpenGL ES 2.0中的模板纹理

Java OpenGL ES 2.0中的模板纹理,java,opengl-es,opengl-es-2.0,libgdx,stencil-buffer,Java,Opengl Es,Opengl Es 2.0,Libgdx,Stencil Buffer,我一直在尝试在一个项目中制作一些模板。到目前为止,我只能用模版打印出多边形(在插图后编码) 问题:我应该如何在OpenGL ES 2.0中制作出非多边形形状?(即,我不希望将透明像素绘制到模具缓冲区) 如果不使用GL_ALPHA_测试(因为opengles2.0不允许),我应该如何实现这一点 我们非常感谢您的帮助和指点 编辑:如果您能提供一些代码示例供我理解,那将非常有帮助 请参阅下面的说明: 这是渲染代码: @Override public void render(float delta)

我一直在尝试在一个项目中制作一些模板。到目前为止,我只能用模版打印出多边形(在插图后编码)

问题:我应该如何在OpenGL ES 2.0中制作出非多边形形状?(即,我不希望将透明像素绘制到模具缓冲区)

如果不使用GL_ALPHA_测试(因为opengles2.0不允许),我应该如何实现这一点

我们非常感谢您的帮助和指点

编辑:如果您能提供一些代码示例供我理解,那将非常有帮助

请参阅下面的说明:

这是渲染代码:

@Override
public void render(float delta) {
    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_STENCIL_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT );


    stage.act();
    stage.draw();

    Gdx.gl20.glColorMask(false, false, false, true);
    Gdx.gl20.glDepthMask(false);

    Gdx.gl20.glClearStencil(0x0);

    Gdx.gl20.glEnable(GL20.GL_STENCIL_TEST);

    Gdx.gl20.glStencilFunc(GL20.GL_ALWAYS, 0x1, 0x1);
    Gdx.gl20.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_REPLACE);      

    batch.begin();
    batch.draw(heart, 0, i+50);
    batch.end();

    Gdx.gl20.glColorMask(true, true, true, true);
    Gdx.gl20.glDepthMask(true);

    Gdx.gl20.glStencilFunc(GL20.GL_NOTEQUAL, 0x1, 0x1);
    Gdx.gl20.glStencilOp(GL20.GL_KEEP, GL20.GL_KEEP, GL20.GL_KEEP);

    batch.begin();
    batch.draw(heart, 0, i);
    batch.end();

    Gdx.gl20.glDisable(GL20.GL_STENCIL_TEST);
}

我没有使用libgdx的经验,但在常见情况下,您可以在片段着色器中模拟alpha测试:

if (pixelColor.a <= ALPHA_THRESHOLD) // threshold should be 0 for good visual results
        discard;
if(pixelColor.a