当前位置: 首页 > article >正文

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)
 


http://www.kler.cn/news/310409.html

相关文章:

  • JAVA网络编程【基于TCP和UDP协议】超详细!!!
  • C编程演奏中文版“生日快乐歌”
  • Java html生成pdf和图片
  • 【kafka】基本概念
  • SAP学习笔记 - 开发06 - CDSView + Fiori Element 之 List Report
  • Vue3 项目引入阿里 iconfont 图标和字体的多种方式
  • 2024 VMpro 虚拟机中如何给Ubuntu Linux操作系统配置联网
  • 总结拓展十:SAP开发计划(上)
  • 新峰商城之分类三级联动实现
  • PyQt / PySide + Pywin32 + ctypes 自定义标题栏窗口 + 完全还原 Windows 原生窗口边框特效项目
  • html+css+js网页设计 旅游 龙门石窟8个页面
  • HarmonyOS ArkTS 用户首选项的开发及测试
  • AI大模型与产品经理:替代与合作的深度剖析
  • 概率论原理精解【14】
  • 计算机网络(七) —— https协议与网络安全证书
  • 问:Java中如何优雅退出线程?
  • 切换淘宝最新npm镜像源是
  • Day26_0.1基础学习MATLAB学习小技巧总结(26)——数据插值
  • 软件开发小程序服务器怎么挑选
  • 华为od手撕-数组元素top1
  • netstat命令详解
  • Vue 3 Composition API 实战技巧:组件间通信与SPA架构
  • 如何用Appium实现移动端UI自动化测试?
  • 达梦数据库SCHEMA使用初探
  • Android中的Intent的作用
  • 关于循环Socket创建超Linux文件句柄限制现象分析
  • Web接入Sonic平台之安装
  • 【yolo格式标签转VOC格式】
  • 滚雪球学SpringCloud[4.1讲]: Spring Cloud Gateway详解
  • mysql的分区表