热门标签 | 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



推荐阅读
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
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社区 版权所有