运动模糊

运动模糊效果是指物体移动时,会拖带一个尾巴。通过颜色混合,可以实现这种效果。实现原理就是每隔一小段位移以某种alpha值重复绘制物体, 通过与前面画的物体进行颜色混合来实现模糊的效果。

混合因子选择如下:

S因子:GL_SRC_ALPHA

D因子:GL_ONE

 

实例代码如下:

 

public class MyRenderer implements Renderer {

	private Square square1 = null;

	private static final float M_PI = 3.14159265358979323846f;
	private static final float blur_detail = 24;

	private float x = -2.0f;

	public MyRenderer(Context ctx) {
		square1 = new Square(ctx, false);

	}

	@Override
	public void onDrawFrame(GL10 gl) {

		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
		// Replace the current matrix with the identity matrix
		gl.glMatrixMode(GL10.GL_MODELVIEW);
		gl.glLoadIdentity();

		if (x > 2.0f)
			x = -2.0f;
		x += 0.05f;

		gl.glPushMatrix();

		float ball_alpha = 1 / blur_detail;

		gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
		gl.glTranslatef(x, 0, 0);

		for (int i = 0; i < blur_detail; ++i) {
			gl.glTranslatef(0.5f / blur_detail, 0, -0.5f / blur_detail);

			/* comment the following line for quick but boring linear blur */
			ball_alpha = (float) (Math.sin((M_PI / blur_detail) * i) / blur_detail);

			gl.glColor4f(1, 1, 1, ball_alpha);
			square1.draw(gl);

		}

		gl.glPopMatrix();

	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height) {
		float ratio = (float) width / height;
		gl.glMatrixMode(GL10.GL_PROJECTION);
		gl.glLoadIdentity();
		GLU.gluPerspective(gl, 45, ratio, 0.01f, 100);
		GLU.gluLookAt(gl, 0, 0, -5, 0, 0, 0, 0, 1, 0);
		gl.glMatrixMode(GL10.GL_MODELVIEW);
		gl.glLoadIdentity();
	}

	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		// TODO Auto-generated method stub
		gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
		// Enable Smooth Shading, default not really needed.
		gl.glShadeModel(GL10.GL_SMOOTH);
		gl.glEnable(GL10.GL_BLEND);
		gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

	}

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值