如何在 android/andengine 中剪辑或屏蔽实体?
Posted
技术标签:
【中文标题】如何在 android/andengine 中剪辑或屏蔽实体?【英文标题】:How to clip or mask entity in 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
最终目标是在特定实体中禁用绘图更改,它也可能具有透明背景。
【问题讨论】:
【参考方案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。我会更新原来的答案。以上是关于如何在 android/andengine 中剪辑或屏蔽实体?的主要内容,如果未能解决你的问题,请参考以下文章