【问题标题】:How to clip or mask entity in android/andengine?如何在 android/andengine 中剪辑或屏蔽实体?
【发布时间】:2015-05-06 10:34:47
【问题描述】:

我想在 Andengine 中使用 sprite 实现遮罩。我想要与 ios 类中相同的功能,称为

SKCropNode

它就像一个屏蔽节点!在 andengine/opengl 中有这样的解决方法吗?谢谢。

编辑:这是我试图掩盖实体的东西,没有效果,有什么建议吗?

public class ClippingEntity extends Entity//BaseSprite
{

protected int mWidth;
protected int mHeight;

public ClippingEntity(float pX, float pY, int pWidth, int pHeight, TextureRegion t)
{
    super(pX, pY);//, pWidth, pHeight, t);
    mWidth = pWidth;
    mHeight = pHeight;
}

@Override
protected void onManagedDraw(GL10 pGL, Camera pCamera)
{

    pGL.glPushMatrix();
    {

        pGL.glEnable(GL10.GL_SCISSOR_TEST);
        pGL.glScissor(0 + (int) mX, 800 - mHeight + (int) mY, mWidth, mHeight);

        super.onManagedDraw(pGL, pCamera);

        pGL.glDisable(GL10.GL_SCISSOR_TEST);

    }
    pGL.glPopMatrix();

}

我也尝试过 Stencil Test,但它只是清除了矩形的颜色。 参考:opengl mask tests

最终目标是在特定实体中禁用绘图更改,它也可能具有透明背景。

【问题讨论】:

    标签: android opengl-es andengine masking clipping


    【解决方案1】:

    试试这个,它应该可以工作:

     @Override
     protected void onManagedDraw(final GLState pGLState, final Camera pCamera)
     {
        pGLState.pushProjectionGLMatrix();
        pGLState.enableScissorTest();
        GLES20.glScissor(0 + (int) mX, 800 - mHeight + (int) mY, mWidth, mHeight);
        super.onManagedDraw(pGLState, pCamera);
        pGLState.disableScissorTest();
        pGLState.popProjectionGLMatrix();
    }
    

    对于 GLES1,试试这个: http://www.andengine.org/forums/gles1/clipping-effect-t2962.html

    【讨论】:

    • 正如您在 managedDraw 函数中的问题中看到的那样,它使用 GL10。您的功能基于 GL20。所以我找不到以上opengl的功能。而且我已经尝试过简单的剪刀测试,但一无所获!
    • 对不起,我的错,我以为你在使用 GLES2。我会更新原来的答案。
    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2022-11-29
    • 2019-03-18
    • 1970-01-01
    • 2018-09-17
    • 2015-09-05
    相关资源
    最近更新 更多