`
kingj
  • 浏览: 426401 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

libgdx系列之-加载obj(3D文件)

 
阅读更多

原文链接:http://blog.csdn.net/cng1991/article/details/7293946

今天看了下libgdx,觉得加载3d模型的功能很炫。所以分享下代码。

首先用blender(开源的3D模型工具,百度即可搜到)新建一个工程,然后导出为cube.obj。最主要的是获取obj文件。将.obj文件放在android工程的assets/data目录下。然后搭建android下的libgdx环境,即导入架包。

然后编写代码:

[java] view plaincopy
  1. package com.cng;  
  2.   
  3.   
  4.   
  5.   
  6. import android.os.Bundle;  
  7.   
  8. import com.badlogic.gdx.ApplicationListener;   
  9. import com.badlogic.gdx.Gdx;   
  10. import com.badlogic.gdx.backends.android.AndroidApplication;  
  11. import com.badlogic.gdx.graphics.Color;   
  12. import com.badlogic.gdx.graphics.GL10;   
  13. import com.badlogic.gdx.graphics.Mesh;  
  14. import com.badlogic.gdx.graphics.PerspectiveCamera;  
  15. import com.badlogic.gdx.graphics.Texture;   
  16. import com.badlogic.gdx.graphics.Texture.TextureFilter;  
  17. import com.badlogic.gdx.graphics.g2d.BitmapFont;   
  18. import com.badlogic.gdx.graphics.g2d.SpriteBatch;   
  19. import com.badlogic.gdx.graphics.g2d.TextureRegion;   
  20. import com.badlogic.gdx.graphics.g3d.loaders.ModelLoaderOld;  
  21. import com.badlogic.gdx.utils.ScreenUtils;  
  22.   
  23.   
  24.   
  25.   
  26. public class MyGameActivity extends AndroidApplication {  
  27.        
  28.     class MyGameListen  implements ApplicationListener  
  29.     {  
  30.         SpriteBatch batch;  
  31.         Texture texture;  
  32.         TextureRegion fbteRegion;  
  33.         BitmapFont font;  
  34.         PerspectiveCamera camera;  
  35.         Mesh mesh;  
  36.         Color clearColor=new Color(0.2f, 0.2f, 0.2f, 1);  
  37.         float angle;  
  38.         @Override  
  39.         public void create()  
  40.         {  
  41.             mesh=ModelLoaderOld.loadObj(Gdx.files.internal("data/cube.obj").read());  
  42.             texture=new Texture(Gdx.files.internal("data/badlogic.jpg"),true);  
  43.             texture.setFilter(TextureFilter.MipMap, TextureFilter.Linear);  
  44.               
  45.             batch=new SpriteBatch();  
  46.             font=new BitmapFont();  
  47.               
  48.             camera=new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());  
  49.             camera.position.set(333);  
  50.             camera.direction.set(-1, -1, -1);  
  51.         }  
  52.         @Override  
  53.         public void dispose()  
  54.         {  
  55.               
  56.         }  
  57.   
  58.         @Override  
  59.         public void pause()  
  60.         {  
  61.               
  62.         }  
  63.   
  64.         @Override  
  65.         public void render()  
  66.         {  
  67.             GL10 gl=Gdx.graphics.getGL10();  
  68.             gl.glViewport(00, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());  
  69.             gl.glClearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a);  
  70.             gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);  
  71.             gl.glEnable(GL10.GL_DEPTH_TEST);  
  72.             gl.glEnable(GL10.GL_TEXTURE_2D);  
  73.               
  74.             camera.update();  
  75.             camera.apply(gl);  
  76.             angle+=45*Gdx.graphics.getDeltaTime();  
  77.             gl.glPushMatrix();  
  78.             gl.glRotatef(angle, 100);  
  79.             texture.bind();  
  80.             mesh.render(GL10.GL_TRIANGLES);  
  81.             gl.glPopMatrix();  
  82.             if(fbteRegion==null||Gdx.input.justTouched())  
  83.             {  
  84.                 if(fbteRegion!=null) fbteRegion.getTexture().dispose();  
  85.                 fbteRegion=ScreenUtils.getFrameBufferTexture();  
  86.             }  
  87.             batch.begin();  
  88.             if(fbteRegion!=null)  
  89.             {  
  90.                 batch.draw(fbteRegion, 00100100);  
  91.             }  
  92.             batch.end();  
  93.         }  
  94.   
  95.         @Override  
  96.         public void resize(int arg0, int arg1)  
  97.         {  
  98.               
  99.         }  
  100.   
  101.         @Override  
  102.         public void resume()  
  103.         {  
  104.         }  
  105.   
  106.   
  107.           
  108.   
  109.     }  
  110.       
  111.       
  112.     @Override  
  113.     protected void onCreate(Bundle savedInstanceState)  
  114.     {  
  115.         super.onCreate(savedInstanceState);  
  116.         initialize(new MyGameListen(), false);  
  117.     }  
  118.       
  119. }  
因为我是libgdx的初学者,里面有些代码不能解释,所以就先不解释了,只是提供一个例子。

 

 

分享到:
评论

相关推荐

    android平台libgdx 解析obj文件

    总的来说,Android平台上的LibGDX通过`ObjLoader`提供了一种便捷的方式去解析和加载OBJ格式的3D模型,使开发者能够轻松地将复杂的3D内容引入到游戏或应用中。理解其工作原理和使用方法对于优化游戏性能和实现更复杂...

    libGDX3DTest:一些使用 libgdx 的 3D 测试

    `ModelLoader`负责读取3D模型文件(如OBJ、FBX、3DS等)并转换为libGDX内部的表示形式。`ModelInstance`则表示模型的一个实例,可以在场景中多次复用,每个实例可以有自己的位置、旋转和缩放。 在libGDX中,光照和...

    android 3d

    - `assets/`: 这个目录通常用于存储非编译的资源,如3D模型文件(如`.obj`或`.gltf`)、纹理图像等。 - `.classpath`: 这是Eclipse(Android Studio早期版本的IDE)的配置文件,指定了项目的类路径。 - `.project...

    PanicFlower:一个Java Android应用程序,使用LibGDX和Cardboard显示3D花模型

    3. **3D建模**:PanicFlower中的花朵模型需要先由3D建模软件(如Blender或Maya)创建,然后导出为LibGDX支持的格式(如.obj或.g3db),以便在应用中加载和渲染。 4. **VR技术**:Google Cardboard SDK被整合进项目...

    Android 3D游戏案例大全 源代码第四章

    这涉及到解析3D模型文件格式,如OBJ、3DS或FBX。源代码可能包含模型加载器,用于解析这些文件并将其转换为OpenGL ES可理解的数据结构。 3. **纹理映射**:3D物体的真实感很大程度上取决于纹理。开发者需要学会如何...

    android 3D教程

    2. **加载模型(Loading Models)**:可以使用OBJ、3DS等格式的3D模型文件,通过第三方库将其转换为Android可读的格式。 3. **绘制(Drawing)**:使用OpenGL ES的`glDrawArrays()`或`glDrawElements()`函数绘制几何...

    Android 3D 游戏开发教程

    2. **模型加载与处理**: 游戏中的3D模型通常以OBJ、FBX等格式存在,需要使用库(如Assimp)将这些模型转换为可被OpenGL ES理解和渲染的数据结构。 3. **纹理贴图**: 3D模型的外观依赖于纹理,开发者需要学会如何...

    Android3D游戏实例(代码)02章

    模型文件(如.obj或.fbx格式)被导入到游戏中,并需要与纹理贴图结合以产生色彩和细节。 4. **场景管理**:在游戏实例中,你可能发现有关如何组织和管理3D对象的代码,比如使用 scenegraph 或 octree 结构来提高...

    game-resources1234:2g游戏资源,我们的一个游戏项目

    4. 3D模型和场景:对于3D游戏,可能包含.obj、.fbx等格式的模型文件,以及描述游戏场景的文件。Java的3D图形库,如jMonkeyEngine,可以处理这些资源。 5. 脚本资源:游戏逻辑可能部分通过脚本来实现,如Lua或...

    RobotsGame:一个Android机器人游戏,使用C ++和OpenGL ES 3.0从头开始编写

    这通常涉及3D建模软件(如Blender或3DS Max)的使用,以及相关的文件格式转换(如.obj或 FBX)。游戏中的机器人可能包含复杂的关节和运动学系统,需要通过骨骼动画来实现逼真的动作。 六、物理引擎 为了让机器人在...

Global site tag (gtag.js) - Google Analytics