libgdx是一个强大的游戏框架,不仅支持2d部分,同时还支持3d部分。

libgdx的3d部分投影主要通过PerspectiveCamera实现。

物体的显示过程:

1. 创建远景相机,角度一般设为67,并设置其位置、观看点、近距离和远距离。

2. 创建模型创建器,并创建出一个物体模型。之后通过模型创建出对应的实例。

3. 创建环境和相机控制器。

4. render函数中进行渲染绘制。

具体实例:

  1. package com.fxb.newtest;
  2.  
  3. import com.badlogic.gdx.ApplicationAdapter;
  4. import com.badlogic.gdx.Gdx;
  5. import com.badlogic.gdx.graphics.Color;
  6. import com.badlogic.gdx.graphics.GL10;
  7. import com.badlogic.gdx.graphics.PerspectiveCamera;
  8. import com.badlogic.gdx.graphics.VertexAttributes.Usage;
  9. import com.badlogic.gdx.graphics.g3d.Environment;
  10. import com.badlogic.gdx.graphics.g3d.Material;
  11. import com.badlogic.gdx.graphics.g3d.Model;
  12. import com.badlogic.gdx.graphics.g3d.ModelBatch;
  13. import com.badlogic.gdx.graphics.g3d.ModelInstance;
  14. import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
  15. import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
  16. import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
  17. import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
  18.  
  19. public class Lib022_3dTest extends ApplicationAdapter{
  20.  
  21. PerspectiveCamera camera;
  22. Model model;
  23. ModelInstance instance;
  24. ModelBatch modelBatch;
  25. Environment environment;
  26.  
  27. CameraInputController cameraController;
  28.  
  29. @Override
  30. public void create() {
  31. // TODO Auto-generated method stub
  32. super.create();
  33.  
  34. camera = new PerspectiveCamera( 67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight() );
  35. camera.position.set( 10, 10, 10 );
  36. camera.lookAt( 0, 0, 0 );
  37. camera.near = 1f;
  38. camera.far = 300f;
  39. camera.update();
  40.  
  41. ModelBuilder modelBuilder = new ModelBuilder();
  42. model = modelBuilder.createBox( 5f, 5f, 5f, new Material( ColorAttribute.createDiffuse(Color.GREEN) ), Usage.Position | Usage.Normal );
  43. instance = new ModelInstance( model );
  44. modelBatch = new ModelBatch();
  45.  
  46. environment = new Environment();
  47. environment.set( new ColorAttribute( ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f ) );
  48. environment.add( new DirectionalLight().set( 0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f ) );
  49.  
  50. cameraController = new CameraInputController( camera );
  51. Gdx.input.setInputProcessor( cameraController );
  52. }
  53.  
  54. @Override
  55. public void render() {
  56. // TODO Auto-generated method stub
  57. super.render();
  58. Gdx.gl.glViewport( 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight() );
  59. Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT );
  60.  
  61. cameraController.update();
  62. modelBatch.begin( camera );
  63. //modelBatch.render( instance );
  64. modelBatch.render( instance, environment );
  65. modelBatch.end();
  66.  
  67. }
  68.  
  69. @Override
  70. public void dispose() {
  71. // TODO Auto-generated method stub
  72. modelBatch.dispose();
  73. model.dispose();
  74. super.dispose();
  75. }
  76.  
  77. }

运行结果:

拖拽物体可以变换角度和方向

libgdx学习记录22——3d物体创建的更多相关文章

  1. Libgdx学习记录28——创建Desktop程序

    1.新建Java Project. 2.添加libs,添加相关的jar文件. 3. 在Project Build Path中,添加Reference. 4. 添加文件夹assets,并右键Build ...

  2. ROS学习记录(一)————创建简单的机器人模型smartcar

    这是我在古月居上找的(http://www.guyuehome.com/243),但直接运行的话,没办法跑起来,我也是查了好多博客和日志,才实现最后的功能的,所以,记录下来,以备后用吧,也欢迎其他和我 ...

  3. libgdx学习记录18——Box2d物理引擎

    libgdx封装了Box2D物理引擎,通过这个引擎能够模拟物理现实,使设计出的游戏更具有真实感. libgdx中,Box2d程序的大概过程: 1. 创建物理世界world,并设置重力加速度. 2. 创 ...

  4. libgdx学习记录17——照相机Camera

    照相机在libgdx中的地位举足轻重,贯穿于整个游戏开发过程的始终.一般我们都通过Stage封装而间接使用Camera,同时我们也可以单独使用Camera以完成背景的移动.元素的放大.旋转等操作. C ...

  5. ROS学习记录(三)————创建一个简单的发布节点和订阅节点

    暑假在家有些懈怠,不,非常懈怠- -||!良心已经发痛了,想快些补回原来的进度,但忽然发现,中断了一段时间再重新去学习,有的地方连最基本的符号都忘记了 ,这次特意弄个最最基础的,恢复一下,以前的进度. ...

  6. libgdx学习记录26——Polygon多边形碰撞检测

    libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon ...

  7. Libgdx学习记录14——数据保存Preferences,XmlReader

    在游戏过程过程中,常常需要对某些数据进行保存,以确保下次运行时能够正确读取.如游戏中的金币.道具.游戏分数.已通过的关卡等. Libgdx中常用的数据保存方式有Preferences和XmlReade ...

  8. libgdx学习记录11——平铺地图TiledMap

    地图对于游戏场景十分重要,很多游戏都需要对地图进行编辑,可使用TileMap进行编辑并生成对应的tmx格式地图文件. 编辑好后,可通过TmxMapLoader来读取地图文件.可通过一个正交相机Otho ...

  9. libgdx学习记录9——FreeType,ttf中文显示

    前面讲到使用Hireo创建的BitmapFont以显示中文字体.这种方式效率很高,当所要显示的字的总数较少,并且大小比较固定时,可以采用这种方式. 但是这种也有弊端: (1)字体大小不能随意设置,当放 ...

随机推荐

  1. go语言练习:类型转换

    package main import "fmt" func main() { var a int var b uint var c float32 var d float64 a ...

  2. 数据结构入门之链表(C语言实现)

    这篇文章主要是根据<数据结构与算法分析--C语言描述>一书的链表章节内容所写,该书作者给出了链表ADT的一些方法,但是并没有给出所有方法的实现.在学习的过程中将练习的代码记录在文章中,并添 ...

  3. python函数-匿名函数

    1,匿名函数,故名思意,就是没有名字的函数. def fun(x): return x+x 上述代码的作用就是求x+x的和的函数.如果调用该函数的话,可以使用fun(1)即可.那么lambda函数和上 ...

  4. js实现双向链表

    1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...

  5. 转:queue

    数据结构C#版笔记--队列(Quene)   队列(Quene)的特征就是“先进先出”,队列把所有操作限制在"只能在线性结构的两端"进行,更具体一点:添加元素必须在线性表尾部进行, ...

  6. Android图形显示之硬件抽象层Gralloc【转】

    https://blog.csdn.net/yangwen123/article/details/12192401 FrameBuffer驱动程序分析文中介绍了Linux系统下的显示驱动框架,每个显示 ...

  7. 【转】Java学习---线程间的通信

    [原文]https://www.toutiao.com/i6572378564534993415/ 两个线程间的通信 这是我们之前的线程. 执行效果:谁抢到资源,谁运行~ 实现线程交替执行: 这里主要 ...

  8. 设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。

    设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入 ABC,则没有抛出异常.(只有 ...

  9. Asp.net core 2.0.1 Razor 的使用学习笔记(二)

    ASP.net core 2.0.1 中 asp.net identity 2.0.1 的基本使用(一)—启用用户管理 一.修改和启用默认的用户账户管理和角色管理 在Data目录中添加Applicat ...

  10. 自己模拟写C++中的String类型

    下面是模拟实现字符串的相关功能,它包括一下功能:    String(const char * s);//利用字符串来初始化对象    String(); //默认构造函数    String(con ...