OpenGL ES相关库加载3D 车辆模型

news2024/12/22 19:46:07

需求类似奇瑞的这个效果,就是能全方位旋转拖拽看车,以及点击开关车门车窗后备箱等 瑞虎9全景看车 (chery.cn)

最开始收到这个需求的时候还有点无所适从,因为以前没有做过类似的效果,后面一经搜索后发现实现的方式五花八门,但始终绕不过opengl,于是通过opengl 逐步展开…

1、推荐一个学习OpenglGL 基础操作的文章

OpenGL ES_york2017的博客-CSDN博客 里面有一些基本的操作和概念,可以作为像我这样完全没有接触过opengl 的小白入手,一套文章看下来也熟悉了一些基本的接口,比如,添加一个灯光、网格线、obj模型、awd模型等,在后面的库中能用得着

2.1、OpenGL ES 封装库 – Rajawali

Rajawali-github

由于我是一个纯Java er,对c++不熟悉,所以试了一下这个纯Java语言的封装库,从他的demo例子来看是可以实现我的需求的,但是当我仔细看代码的时候,发现加载骨骼动画的方式只能通过加载 .md5mesh 和 .fbx 文件,但是,我搜索良久,也没有找到 .md5mesh 文件后缀的免费的车辆模型(当然要白嫖拉),于是尝试使用 .fbx的方式,但是demo里面并没有做这种方式的例子,于是我自己写了一个,然后就 报错了,在库github的issue里面也找到了一些类似的提问,但是并没有解决,似乎是说不支持这种方式,索性开发人员就直接抛出了一个异常 FBX Loader Issue · Issue #2303 ,如果有大佬找到了用rajawali加载fbx文件的告诉我一声,感谢~

进入正题:

Rajawali的 github 下载下来可以直接运行,如果问题的话可以留言一起沟通下,运行出来如图所示:

Rajawali_smalll

2.2 加载obj模型

先看效果:
Rajawali加载obj模型

这里只给出主要的initScene的代码,完整代码可以在 这里查看
注释和需要注意的点都在代码里面有所体现,这里就不细说了

protected void initScene() {
            try {
                PointLight light = new PointLight();
                light.setPosition(0, 10, 4);
                light.setPower(3);
                getCurrentScene().addLight(light);

                DirectionalLight directionalLight = new DirectionalLight();
                directionalLight.setLookAt(0, 5, 10);
                directionalLight.setPower(3);
                getCurrentScene().addLight(directionalLight);

                //加载obj文件需要注意的点:
                //一、加载obj文件的时候,如果有纹理文件.mtl ,mtl文件里面的png 图片需要放在drawable 里面才能被识别到,如果放到mipmap的话是识别不到的。
                //二、mtl文件的命名格式为xxx_mtl,是没有后缀的,而在.obj文件里面引用mtl文件的时候则是需要   xxx.mtl
                LoaderOBJ loaderOBJ = new LoaderOBJ(getResources(), mTextureManager, R.raw.freigther_bi_export_obj);//multiobjects_obj
                loaderOBJ.parse();
                Object3D object3D = loaderOBJ.getParsedObject();
                getCurrentScene().addChild(object3D);
                object3D.setScale(0.5);

                //设置拖拽功能
                ArcballCamera arcballCamera = new ArcballCamera(getContext(), getActivity().findViewById(R.id.fl_empty));
                //设置相机的位置
                arcballCamera.setPosition(1, 7, 10);
                //替换当前场景下的相机,第一个参数的旧的相机,第二个是新的
                getCurrentScene().replaceAndSwitchCamera(getCurrentCamera(), arcballCamera);

                //车辆自旋转
                Animation3D animation3D = new RotateOnAxisAnimation(Vector3.Axis.Y, 360);
                //一圈时间
                animation3D.setDurationMilliseconds(8000);
               /* 设置旋转重复类型:
                    NONE:无,转一圈后会停止
                    INFINITE:一直旋转
                    RESTART:转一圈后停止
                    REVERSE:转一圈后停止
                    REVERSE_INFINITE:顺时针一圈,逆时针一圈,如此循环
                 */
                animation3D.setRepeatMode(Animation.RepeatMode.INFINITE);
                animation3D.setTransformable3D(object3D);
                getCurrentScene().registerAnimation(animation3D);
//                animation3D.play();

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
2.3 加载fbx模型

前面说过,这个加载不了3d模型,似乎是由于框架的限制问题,所以也不细说了

3 libGdx 加载3d模型

LibGDX-github
也是一个高star的3d引擎框架,但是苦于没有中文文档让我很难受,相关3d资料较少,看了基于libgdx的一些例子似乎都是2d的产品较多,其中一个例子运行出来是这样的,不太满足我的需求,也没找到合适的3d的例子,找到的小伙伴给我说一下,感谢~
libgdx的2d例子

总结:
目前没有实现加载带有骨骼动画的3D车辆模型这个功能,如果有大佬有做过类似需求的请留言沟通,不胜感激。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十月听书笔记

十月听书笔记 1、《宝贵的人生建议》2、《后工作时代》3、《我们何以不同》4、《恰到好处的帮助》5、《24个比利》6、《恰到好处的安慰》7、《为什么越无知的人越自信》8、《陌生人效应》9、《往里走,安顿自己》10、《为什么学生不喜欢上学》11、《自律力》12、《弹…

浅析Redis大Key | 京东云技术团队

一、背景 在京东到家购物车系统中,用户基于门店能够对商品进行加车操作。用户与门店商品使用Redis的Hash类型存储,如下代码块所示。不知细心的你有没有发现,如果单门店加车商品过多,或者门店过多时,此Key就会越来越大…

Qt之基于QCustomPlot绘制直方图(Histogram),叠加正态分布曲线

一.效果 二.原理 1.正态分布 高斯分布(Gaussian distribution),又名正态分布(Normal distribution),也称"常态分布",也就是说,在正常的状态下,一般的事物,都会符合这样的分布规律。 比如人的身高为一个随机变量,特别高的人比较少,特别矮的也很少,大部分都…

轻量封装WebGPU渲染系统示例<9>- 基本光照(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/SimpleLightTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5. 用户操…

初始SpringSecurity

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏&#xf…

【JavaSE专栏55】Java集合类HashTable解析

🌲Java集合类HashTable解析 🌲Java集合类HashTable解析摘要引言Hashtable是什么?Hashtable vs. HashMap:何时使用Hashtable?多线程环境:历史遗留系统:不需要进行特殊操作: Hashtable…

Mysql系列 -索引数据结构

索引就是排好序的数据结构,可以帮助我们快速的查找到数据,那么底层的数据到底是如何存储的呢? 为什么InnoDB 用的是Btree 存储结构? 大家可以看看这个可视化的网站 数据结构和算法的可视化工具 可以看到数据结构里面有链表&…

@ModelAttribute注解之如何使用postman传递参数

代码实例&#xff1a; GetMapping("/selectOpenList")ApiOperation(value "公开问卷列表")AnonymityAnnotation(access true)public WebResponse<PageInfo<QuestionnaireVo>> selectOpenList(ModelAttribute QuestionnaireDto dto){xxxxxxxx…

如何在3dMax中创建具有自定义图标和MaxScript的自定义按钮?

如何在3dMax中创建自定义按钮? 在本教程中,将向您展示如何创建具有自定义图标组和MaxScript的自定义按钮。 在3dMax中,主工具栏上有许多按钮。许多3dMax用户会问:是否可以制作一个带有自定义图像图标的自定义按钮,该按钮后面有自定义MaxScript代码来实现一定的功能?那么…

rust代码学习笔记(未完待续10/31)

文章目录 一、案例一&#xff1a;读取输入打印出来二、案例二&#xff1a;&#xff08;引入新包&#xff09;猜数字游戏三、案例三&#xff1a;循环猜测数字四、案例四&#xff1a;猜字游戏&#xff08;彩色版本&#xff09;五、rust一些注意事项1&#xff09;声明变量默认是不…

C# 如何反射获取常量值

首先&#xff0c;常量是一个字段&#xff0c;所以需要从字段中获取该值。 但是需要传入的BindingFlags是什么&#xff0c;与其盲猜&#xff0c;不如直接反射所有字段值&#xff0c;查看其中的常量有哪些特性和bool值来判断。 ...static void Main(string[] args){var type typ…

禁止使用Lombok,在Lombok的加持下,“小狗”.equals(“老狗”) = true

目录 一、禁止使用Lombok1、jdk版本问题2、被迫营业3、可读性差 二、Lombok中的真实小坑三、看看编译后的代码&#xff0c;到底怎么回事1、编译class2、添加一个注解EqualsAndHashCode(callSuper true) 大家好&#xff0c;我是哪吒。 一、禁止使用Lombok 我有一个同学&#…

VASSAL 3.7.4 发布,开源棋牌游戏构建引擎

导读VASSAL Engine 3.7.4 版本现已发布。VASSAL 是一个游戏引擎&#xff0c;用于在线构建棋盘游戏和纸牌游戏&#xff0c;构建的游戏可在 Internet 上或通过电子邮件实时运行。 VASSAL Engine 可在所有平台上运行&#xff0c;是免费的开源软件。具体更新内容包括&#xff1a; …

【2024版】最新Nessus工具安装激活教程,三分钟手把手教会,非常简单!收藏这一篇就够了

Nessus工具介绍 Nessus号称是世界上最流行的漏洞扫描程序&#xff0c;而且它开源&#xff0c;全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上…

护眼灯亮度多少合适?适合学生儿童的护眼灯推荐

为什么需要购买台灯&#xff1f;正常的顶灯不行吗&#xff1f; 正常顶灯的光照射到桌子上时&#xff0c;已经发散的差不多了&#xff0c;无法满足看书写字环境下的需要。 看书写字时人是要低头的&#xff0c;很容易挡住顶灯照射的光&#xff0c;桌上需要光的位置正好被挡住。…

如何为模型添加光照效果?

1、光照贴图的原理 光照贴图&#xff08;Lightmap&#xff09;是一种用于模拟光照效果的贴图技术。它通过将场景中的光照信息渲染到纹理图像中&#xff0c;然后将其应用到模型表面来实现对光照效果的模拟。光照贴图通常使用灰度图像来表示场景中的光照信息&#xff0c;白色表示…

让GPT替我写vue3代码,看的我血压升高

事情是这样子的&#xff0c;最近在写Vue3相关的代码&#xff0c;就想着能不能让GPT辅助我写代码&#xff0c;于是&#xff0c;我就先写了一个中文的prompt Prompt1: 使用vue3写一个用户登录的页面 分割线内部是GPT的回答&#xff1a; 使用 Vue 3 来创建一个用户登录页面需要涉…

编译源码时报错,程序包找不到

在编译源码时&#xff0c;出现了个问题&#xff0c;程序包找不到 原本这里是没有这个浮标的&#xff0c;无法打开点击&#xff0c;里面是空的&#xff0c;打开本地maven的库看找到相应的包也是没有问题的。 这里我尝试过删除相关文件&#xff0c;删除pom文件相关内容再次进行下…

Python数据可视化入门指南

Matplotlib和Plotly是两个在Python中广泛使用的数据可视化库&#xff0c;它们具有丰富的API和功能&#xff0c;用于创建各种类型的图表和图形。在本篇博客中&#xff0c;我们将介绍它们的主要特点和基本用法。 Matplotlib 主要特点&#xff1a; 高度自定义&#xff1a; Matp…

赋能制造业高质量发展,释放采购数字化新活力——企企通亮相武汉2023国际智能制造创新论坛

摘要 “为应对成本上升、供应端不稳定、供应链上下游协同困难、决策无数据依据等问题&#xff0c;利用数字化手段降本增效、降低潜在风险十分关键。在AI等先进技术发展、供应链协同效应和降本诉求等机遇的驱动下&#xff0c;采购供应链数字化、协同化成为企业激烈竞争的优先选…