Android使用LiquidFun物理引擎实现果冻碰撞效果

一、效果展示

Android使用LiquidFun物理引擎实现果冻碰撞效果

二、LiquidFun物理引擎简介

LiquidFun是一个由Google开发并开源的2D物理模拟库,它基于Box2D物理引擎,并扩展了流体模拟的功能。

  1. 流体动力学模拟:LiquidFun提供了强大的流体动力学系统,可以模拟流体的行为,包括液体的流动、受力、碰撞等。这使得开发者能够创建逼真的水流、波浪、液体效果,为游戏和图形应用增加真实感。

  2. 刚体动态系统:除了流体模拟,LiquidFun还支持刚体的模拟,包括物体的运动、碰撞、旋转等。这使得开发者可以在同一个场景中同时模拟流体和刚体的行为,创建复杂的物理交互场景。

三、Android例程代码

        添加软体 箱子和球体

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        this.addBox(gl, 1, 20, -20, 10, 0, BodyType.staticBody, 10, R.drawable.wall);
        this.addBox(gl, 1, 20, 20, 10, 0, BodyType.staticBody, 10, R.drawable.wall);
        this.addBox(gl, 20, 1, 0, 0, 0, BodyType.staticBody, 10, R.drawable.wall);
        this.addBox(gl, 20, 1, 0, 30, 0, BodyType.staticBody, 10, R.drawable.wall);


        // 添加软体
        this.addSoftBody(gl, 2, 2, 8.5f, 5, 0.2f, R.drawable.nut3);
//        this.addSoftBody(gl, 2, 2, 8.5f, 5, 0.2f, R.drawable.nut3);
//        this.addSoftBody(gl, 2, 2, 8.5f, 5, 0.2f, R.drawable.maricha);

        // 添加一个箱子
        this.addBox(gl, 2, 2, 10, 15, 0, BodyType.dynamicBody, 1, R.drawable.wall);
        // 添加一个球
        this.addCircle(gl, 1, 11, 15, 0, BodyType.dynamicBody, 1, R.drawable.ball);

        //gl.glEnable(GL10.GL_DEPTH_TEST);
        // 背景颜色
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        gl.glEnable(GL10.GL_LIGHTING);
        gl.glEnable(GL10.GL_LIGHT0);
        gl.glDepthFunc(GL10.GL_LEQUAL);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);


        gl.glEnable(GL10.GL_TEXTURE_2D);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
        gl.glEnable(GL10.GL_BLEND);
    }

    private int makeTexture(GL10 gl10, int resId) {
        Integer texId = this.mapResIdToTextureId.get(resId);
        if (texId != null) {
            return  texId;
        }
        Bitmap bmp= BitmapFactory.decodeResource(this.view.getContext().getResources(), resId);


        int[] textureIds=new int[1];
        gl10.glGenTextures(1,textureIds, 0);


        gl10.glActiveTexture(GL10.GL_TEXTURE0);
        gl10.glBindTexture(GL10.GL_TEXTURE_2D,textureIds[0]);
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);


        gl10.glTexParameterf(GL10.GL_TEXTURE_2D,
                GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
        gl10.glTexParameterf(GL10.GL_TEXTURE_2D,
                GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_NEAREST);
        this.mapResIdToTextureId.put(resId, textureIds[0]);
        return textureIds[0];
    }

四、完整例程代码下载:

LiquidFunTest.zip: https://url83.ctfile.com/f/45573183-1357424168-253b9e?p=7526 (访问密码: 7526)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lilihewo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值