热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

libgdx3D从资源文件加载模型

1.资源下载:https:github.comxoppablogtreemastertutorialsassetsloadmodelsdata把资源文件放到andro

1. 资源下载:https://github.com/xoppa/blog/tree/master/tutorials/assets/loadmodels/data

把资源文件放到android/assets/data下

别忘了将Run Config的working directory指向assets

2. 代码

1 package com.mygdx.game;
2
3 import com.badlogic.gdx.ApplicationAdapter;
4 import com.badlogic.gdx.Gdx;
5 import com.badlogic.gdx.assets.AssetManager;
6 import com.badlogic.gdx.graphics.GL20;
7 import com.badlogic.gdx.graphics.PerspectiveCamera;
8 import com.badlogic.gdx.graphics.g3d.*;
9 import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
10 import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
11 import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
12 import com.badlogic.gdx.utils.Array;
13
14 public class MyGdxGame2 extends ApplicationAdapter {
15 public Environment environment;//可以包含点光源集合和线光源集合
16 public PerspectiveCamera cam;//3D视角
17 public CameraInputController camController;//视角控制器
18
19 public AssetManager assets;
20 public Array instances = new Array();
21 public ModelBatch modelBatch;
22
23 public boolean loading;
24
25 @Override
26 public void create () {
27 environment = new Environment();
28 environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));//环境光
29 environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));//直线光源
30
31 modelBatch = new ModelBatch();
32 cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());//67可以理解成一个定值,视角宽度(67度)
33 cam.position.set(10f, 10f, 10f);
34 cam.lookAt(0,0,0);
35 cam.near = 1f;
36 cam.far = 300f;
37 cam.update();
38
39 camController = new CameraInputController(cam);
40 Gdx.input.setInputProcessor(camController);
41
42 assets = new AssetManager();
43 assets.load("data/ship.obj", Model.class);
44 loading = true;
45
46 }
47
48 private void doneLoading() {
49 Model ship = assets.get("data/ship.obj", Model.class);
50 ModelInstance shipInstance = new ModelInstance(ship);
51 instances.add(shipInstance);
52 loading = false;
53 }
54
55 @Override
56 public void render () {
57 if (loading && assets.update()){
58 doneLoading();
59 }
60
61 camController.update();
62 Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
63 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
64
65 modelBatch.begin(cam);
66 modelBatch.render(instances,environment);
67 modelBatch.end();
68 }
69
70 @Override
71 public void dispose() {
72 modelBatch.dispose();
73 instances.clear();
74 assets.dispose();
75 super.dispose();
76 }
77 }

3. 截图

 

4. 多个实例

1 private void doneLoading() {
2 Model ship = assets.get("data/ship.obj", Model.class);
3 for (float x &#61; -5f; x <&#61; 5f; x &#43;&#61; 2f) {
4 for (float z &#61; -5f; z <&#61; 5f; z &#43;&#61; 2f) {
5 ModelInstance shipInstance &#61; new ModelInstance(ship);
6 shipInstance.transform.setToTranslation(x, 0, z);//设置位置
7 instances.add(shipInstance);
8 }
9 }
10 loading &#61; false;
11 }

 

 5. obj文件对于目前测试用是没有问题的&#xff0c;但是实际应用中&#xff0c;模型要复杂得多&#xff0c;obj貌似支持不了。

libgdx支持两种文件格式&#xff0c;g3db(二进制)和g3dj(json)。

可以使用 fbx-conv工具进行格式转换&#xff0c;支持的格式FBX/Collada/Obj。FBX是大多数3d建模软件都支持的。

工具主页&#xff1a;https://github.com/libgdx/fbx-conv

 

 

转:https://www.cnblogs.com/hanhongmin/p/3844948.html



推荐阅读
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文详细介绍了如何在 Android 应用中获取系统的版本号,包括具体的应用场景和实现步骤。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
author-avatar
TTTTTTTT-Tang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有