libgdx学习记录22——3d物体创建
libgdx是一个强大的游戏框架,不仅支持2d部分,同时还支持3d部分。
libgdx的3d部分投影主要通过PerspectiveCamera实现。
物体的显示过程:
1. 创建远景相机,角度一般设为67,并设置其位置、观看点、近距离和远距离。
2. 创建模型创建器,并创建出一个物体模型。之后通过模型创建出对应的实例。
3. 创建环境和相机控制器。
4. render函数中进行渲染绘制。
具体实例:
package com.fxb.newtest; import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Environment;
import com.badlogic.gdx.graphics.g3d.Material;
import com.badlogic.gdx.graphics.g3d.Model;
import com.badlogic.gdx.graphics.g3d.ModelBatch;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;
import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder; public class Lib022_3dTest extends ApplicationAdapter{ PerspectiveCamera camera;
Model model;
ModelInstance instance;
ModelBatch modelBatch;
Environment environment; CameraInputController cameraController; @Override
public void create() {
// TODO Auto-generated method stub
super.create(); camera = new PerspectiveCamera( 67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight() );
camera.position.set( 10, 10, 10 );
camera.lookAt( 0, 0, 0 );
camera.near = 1f;
camera.far = 300f;
camera.update(); ModelBuilder modelBuilder = new ModelBuilder();
model = modelBuilder.createBox( 5f, 5f, 5f, new Material( ColorAttribute.createDiffuse(Color.GREEN) ), Usage.Position | Usage.Normal );
instance = new ModelInstance( model );
modelBatch = new ModelBatch(); environment = new Environment();
environment.set( new ColorAttribute( ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f ) );
environment.add( new DirectionalLight().set( 0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f ) ); cameraController = new CameraInputController( camera );
Gdx.input.setInputProcessor( cameraController );
} @Override
public void render() {
// TODO Auto-generated method stub
super.render();
Gdx.gl.glViewport( 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight() );
Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT ); cameraController.update();
modelBatch.begin( camera );
//modelBatch.render( instance );
modelBatch.render( instance, environment );
modelBatch.end(); } @Override
public void dispose() {
// TODO Auto-generated method stub
modelBatch.dispose();
model.dispose();
super.dispose();
} }
运行结果:

拖拽物体可以变换角度和方向
libgdx学习记录22——3d物体创建的更多相关文章
- Libgdx学习记录28——创建Desktop程序
		1.新建Java Project. 2.添加libs,添加相关的jar文件. 3. 在Project Build Path中,添加Reference. 4. 添加文件夹assets,并右键Build ... 
- ROS学习记录(一)————创建简单的机器人模型smartcar
		这是我在古月居上找的(http://www.guyuehome.com/243),但直接运行的话,没办法跑起来,我也是查了好多博客和日志,才实现最后的功能的,所以,记录下来,以备后用吧,也欢迎其他和我 ... 
- libgdx学习记录18——Box2d物理引擎
		libgdx封装了Box2D物理引擎,通过这个引擎能够模拟物理现实,使设计出的游戏更具有真实感. libgdx中,Box2d程序的大概过程: 1. 创建物理世界world,并设置重力加速度. 2. 创 ... 
- libgdx学习记录17——照相机Camera
		照相机在libgdx中的地位举足轻重,贯穿于整个游戏开发过程的始终.一般我们都通过Stage封装而间接使用Camera,同时我们也可以单独使用Camera以完成背景的移动.元素的放大.旋转等操作. C ... 
- ROS学习记录(三)————创建一个简单的发布节点和订阅节点
		暑假在家有些懈怠,不,非常懈怠- -||!良心已经发痛了,想快些补回原来的进度,但忽然发现,中断了一段时间再重新去学习,有的地方连最基本的符号都忘记了 ,这次特意弄个最最基础的,恢复一下,以前的进度. ... 
- libgdx学习记录26——Polygon多边形碰撞检测
		libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon ... 
- Libgdx学习记录14——数据保存Preferences,XmlReader
		在游戏过程过程中,常常需要对某些数据进行保存,以确保下次运行时能够正确读取.如游戏中的金币.道具.游戏分数.已通过的关卡等. Libgdx中常用的数据保存方式有Preferences和XmlReade ... 
- libgdx学习记录11——平铺地图TiledMap
		地图对于游戏场景十分重要,很多游戏都需要对地图进行编辑,可使用TileMap进行编辑并生成对应的tmx格式地图文件. 编辑好后,可通过TmxMapLoader来读取地图文件.可通过一个正交相机Otho ... 
- libgdx学习记录9——FreeType,ttf中文显示
		前面讲到使用Hireo创建的BitmapFont以显示中文字体.这种方式效率很高,当所要显示的字的总数较少,并且大小比较固定时,可以采用这种方式. 但是这种也有弊端: (1)字体大小不能随意设置,当放 ... 
随机推荐
- orcl 中upper()和lower()和initcap()的用法
			upper(字符串 | 列):输入的字符串变为大写返回: 将 bqh4表里的zym字段信息中含有字母的全部转成大写的方法: select * from bqh4 select upper(zym) f ... 
- ansible 增加本机/etc/hosts 下hostsname 与IP
			--- - hosts: all vars: IP: "{{ ansible_eth0['ipv4']['address'] }}" tasks: - name: 将原有的host ... 
- ffmpeg常用参数一览表
			基本选项: -formats 输出所有可用格式 -f fmt 指定格式(音频或视频格式) -i filename 指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头 -y 覆盖已有 ... 
- BZOJ5415:[NOI2018]归程(可持久化并查集,最短路)
			Description Input Output Sample Input1 14 31 2 50 12 3 100 23 4 50 15 0 23 02 14 13 13 2 Sample Outp ... 
- centos6.5 64位静默安装oracle 10G R2
			操作系统:CentOS release 6.5 (Final) 64位 oracle版本:Oracle Database 10g Enterprise Edition Release 10.2.0.1 ... 
- VMware虚拟机下Linux系统的全屏显示
			在VMware虚拟机下的Linux无法全屏的问题的解决方案如下: 1. 启动虚拟机,并启动Redhat6.4. 2. 点击“view”——然后将Autofit window这个选项勾选.(一般 ... 
- WorldWind源码剖析系列:地形瓦片类TerrainTile和地形瓦片服务类TerrainTileService
			地形瓦片类TerrainTile 用来抽象封装用户漫游中所请求的地形瓦片数据类型. 地形瓦片服务类TerrainTileService提供了从BIL(Binary Interleaved by Lin ... 
- create_buffer_tree  example
			假设这样一种情况: 绕线完修完timing 后,designer 修改了netlist,给了eco.v,其中改动了 clock tree 的一个分支,导致这个分支上的buffer 都没有了,如下图 一 ... 
- Python - for 循环
			Python 3 - for 循环 这次将为大家介绍 Python 3 中的 for 循环语句的使用 for 循环的一般格式如下: for <variable> in <seque ... 
- opencv7-ml之KNN
			准备知识 在文件"opencv\sources\modules\ml\src\precomp.hpp"中 有cvPrepareTrainData的函数原型. int cvPrepa ... 
