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

这篇具有很好参考价值的文章主要介绍了OpenGL ES相关库加载3D 车辆模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求类似奇瑞的这个效果,就是能全方位旋转拖拽看车,以及点击开关车门车窗后备箱等 瑞虎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 下载下来可以直接运行,如果问题的话可以留言一起沟通下,运行出来如图所示:

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

2.2 加载obj模型

先看效果:
OpenGL ES相关库加载3D 车辆模型,Android,3d

这里只给出主要的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的例子,找到的小伙伴给我说一下,感谢~
OpenGL ES相关库加载3D 车辆模型,Android,3d

总结:
目前没有实现加载带有骨骼动画的3D车辆模型这个功能,如果有大佬有做过类似需求的请留言沟通,不胜感激。
文章来源地址https://www.toymoban.com/news/detail-740031.html

到了这里,关于OpenGL ES相关库加载3D 车辆模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【我的OpenGL学习进阶之旅】Assimp库支持哪些3D模型格式?

    在通过LearnOpenGL学习 OpenGL 知识的时候,有介绍如何通过Assimp来加载3D模型,并了解了Mesh网格的概念。 Assimp Mesh网格 3D模型 在 https://learnopengl-cn.github.io/03%20Model%20Loading/01%20Assimp/ 中有介绍使用 Assimp 库来加载 3D 模型 .obj 格式。 一个非常流行的模型导入库是Assimp,它是 Open Asse

    2024年02月05日
    浏览(40)
  • Python+OpenGL绘制3D模型(六)材质文件载入和贴图映射

    一、逆向工程 Sketchup 逆向工程(一)破解.skp文件数据结构 Sketchup 逆向工程(二)分析三维模型数据结构 Sketchup 逆向工程(三)软件逆向工程从何处入手 Sketchup 逆向工程(四)破解的乐趣 钩子 外挂 代码注入 二、OpenGL渲染模型 Python+OpenGL绘制3D模型(一)Python 和 PyQt环境搭建

    2024年02月03日
    浏览(48)
  • Python+OpenGL绘制3D模型(九)完善插件功能: 矩阵,材质,法线

    一、逆向工程 Sketchup 逆向工程(一)破解.skp文件数据结构 Sketchup 逆向工程(二)分析三维模型数据结构 Sketchup 逆向工程(三)软件逆向工程从何处入手 Sketchup 逆向工程(四)破解的乐趣 钩子 外挂 代码注入 二、OpenGL渲染模型 Python+OpenGL绘制3D模型(一)Python 和 PyQt环境搭建

    2024年02月03日
    浏览(37)
  • 【Cesium学习(六)】Cesium加载3D模型(3D tiles和glTF模型)

    前面我们学习到了绘制基本的形状,但是Cesium还可以加载3D模型,因为像高德地图这种的技术来加载大型复杂的建筑模型性能不加,所有只能想Cesium这种专门做3D地图的技术。接下来就学习一下如何加载模型。 Cesium目前支持两种模型方案,一个是使用3D tiles, 另一个是加载g

    2024年02月07日
    浏览(47)
  • 如何使用 ThreeJs 以 glTF、FBX 和 OBJ 文件格式加载 3D 模型,使用 ThreeJS 加载和显示带有纹理的 3D 模型

    在本文中,我展示了如何使用 ThreeJS 在 Web 视图中加载 3D 模型。Three.js 是一个跨浏览器的 JavaScript 库和应用程序编程接口,用于使用 WebGL 在 Web 浏览器中创建和显示动画 3D 计算机图形。加载不完整的原因有很多,例如纹理和材质渲染不正确。 创建场景 渲染场景 动画立方体

    2023年04月08日
    浏览(50)
  • three.js加载3D模型,在网页上展示3D模型(.glb.gltf.fbx格式)

    Three.js是一款开源的主流3D绘图JS引擎,简单点,可以将它理解为three+js就可以了,three表示3D,js表示JavaScript的意思。 结构  .glb.gltf文件最好放在服务器上 放在本地容易报找不到的错 .fbx格式文件可以在本地用3d看图(win10自带)打开另存为.glb格式 index.html代码 js代码 项目案例

    2024年02月11日
    浏览(54)
  • VUE百度地图加载3D模型(MapVThreeGallery)

    参考百度开发文档 补充下(里面有免费的可以拿来玩)3D模型下载网址 步骤 1: npm install mapv-three 安装插件 2:在index.html加载百度地图 注:加载model.glb文件需要是请求服务器来的,没有服务器资源的可以像我一样在本地用VS插件(Live Server)起了个小型服务器放3D模型数据 ----使用

    2024年02月11日
    浏览(48)
  • qt加载obj格式的3D模型

    在 Qt 中加载 obj 格式的 3D 模型可以使用 Qt 3D 模块。 首先,你需要在你的工程文件中包含 Qt 3D 模块,方法是在工程文件的顶部添加以下行: 然后,在你的代码中包含 Qt 3D 的头文件: 接下来,你可以使用 Qt3DRender::QObjLoader 类来加载 obj 格式的 3D 模型。首先,创建一个 Qt3DRen

    2024年02月16日
    浏览(61)
  • cesium加载glb格式的3d模型

    官方示例: Cesium Sandcastle https://sandcastle.cesium.com/?src=3D%20Models.htmllabel=Tutorials glb模型下载:https://sandcastle.cesium.com/SampleData/models/CesiumAir/Cesium_Air.glb   

    2024年02月11日
    浏览(34)
  • Unity动态加载资源 - 从硬盘任意地址加载任意格式3D模型

    前言 一、Unity官方给的动态资源加载方式 二、Unity中调用windows资源管理器 三、从资源管理器获得文件地址后复制到Unity指定文件夹 附上全部代码(不完善,仅框架) Unity官方给的动态资源加载方式就不赘述了。大体分为3种:(1) Resources.Load (2)AssetBundle(3) WWW加载 。 其中前两

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包