OpenGL ES 学习教程(六) 使用开源库 Assimp 将 Obj 模型 转换成自己的格式
2017-03-17 16:38
351 查看
转自http://blog.csdn.net/huutu 转载请带上 http://www.thisisgame.com.cn
前面都是在代码中手写 Cube 的顶点数据、UV坐标。虽然不是很多,但是看得还是肉疼。
在项目开发中可不能这么干,虽然咱们可以手写一个软件,但是要手敲一个模型的几千个顶点数据,这估计得找最强大脑。
模型有专门负责模型制作的人,她们使用3dmax 或者 maya 或者Blende来制作各种精美的模型,然后用QQ发给程序猿。
程序猿就负责把这些模型文件解析出来,从里面读取顶点信息、纹理信息、摄像机、灯光等等。
转自http://blog.csdn.NET/huutu http://www.thisisgame.com.cn
由于世界上模型格式很多中,如果为每一种模型都去编写相应的解析代码那真是噩耗。幸好已经有对应的开源库供我们使用。这就是 Assimp。
Assimp官网:
[cpp] view
plain copy
http://assimp.sourceforge.net/main_doc.html
Assimp使用CMake 来构建,这样大家需要去了解一下CMake 的简单的使用方式。
Cmake官网
[cpp] view
plain copy
http://www.cmake.org/
转自http://blog.csdn.Net/huutu http://www.thisisgame.com.cn
需要注意的一点是,需要安装DX 开发包。
[html] view
plain copy
http://www.microsoft.com/en-us/download/details.aspx?id=6812
如果不愿意使用CMake,也可以直接下载我打包的Visual Studio 2013版本。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
我们并不是要在项目中使用Assimp来读取模型到游戏中渲染,而是使用Assimp来编写工具把别人提供给我们的模型转换成我们自己需要的格式。
在我们使用 Assimp 之前,先来了解 Assimp 加载一个模型之后,会把这个模型中的数据存为怎样的结构。
总结如下:
1、整个模型中的数据都存放在 Scene 中。Scene中有RootNode 引用,以及存放所有真实顶点数据的 mMeshs[] 、存放真实纹理数据的 mMaterials[] 。
2、Rootnode 包含有子节点 mChildren[] 和 Mesh的引用 mMeshes[] 。
3、Mesh 中除了顶点属性之外,也包含有 纹理的引用 mMaterialIndex 。
Tips:
如果美术给我们的模型中,一个 Mesh 包含有多个 Material 引用,那么Assimp 会把Material 拆分。即 复制出来一个Mesh 给 Material 用。确保一个 Mesh 一个 Material。
根据 上面的 Assimp 结构图,我们编写相应的类来存储对应的数据。
例如顶点属性我们用 Vertex 类来存储
[cpp] view
plain copy
#pragma once
#include"glm\glm.hpp"
class Vertex
{
public:
glm::vec3 Position;
glm::vec3 Normal;
glm::vec2 TexCoords;
};
其它还创建了 Mesh 、 Texture 、 Model 来存储对应数据。可以把代码下载查看。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
示例工程中,把一个 obj 模型转换成了 model 格式的文件。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
如果需要对 Assimp 需要更多的了解,可以参照下面的文章
[html] view
plain copy
http://learnopengl.com/#!Model-Loading/Assimp
示例工程下载:
[html] view
plain copy
http://pan.baidu.com/s/1pKuZy6f
前面都是在代码中手写 Cube 的顶点数据、UV坐标。虽然不是很多,但是看得还是肉疼。
在项目开发中可不能这么干,虽然咱们可以手写一个软件,但是要手敲一个模型的几千个顶点数据,这估计得找最强大脑。
模型有专门负责模型制作的人,她们使用3dmax 或者 maya 或者Blende来制作各种精美的模型,然后用QQ发给程序猿。
程序猿就负责把这些模型文件解析出来,从里面读取顶点信息、纹理信息、摄像机、灯光等等。
转自http://blog.csdn.NET/huutu http://www.thisisgame.com.cn
由于世界上模型格式很多中,如果为每一种模型都去编写相应的解析代码那真是噩耗。幸好已经有对应的开源库供我们使用。这就是 Assimp。
Assimp官网:
[cpp] view
plain copy
http://assimp.sourceforge.net/main_doc.html
Assimp使用CMake 来构建,这样大家需要去了解一下CMake 的简单的使用方式。
Cmake官网
[cpp] view
plain copy
http://www.cmake.org/
转自http://blog.csdn.Net/huutu http://www.thisisgame.com.cn
需要注意的一点是,需要安装DX 开发包。
[html] view
plain copy
http://www.microsoft.com/en-us/download/details.aspx?id=6812
如果不愿意使用CMake,也可以直接下载我打包的Visual Studio 2013版本。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
我们并不是要在项目中使用Assimp来读取模型到游戏中渲染,而是使用Assimp来编写工具把别人提供给我们的模型转换成我们自己需要的格式。
在我们使用 Assimp 之前,先来了解 Assimp 加载一个模型之后,会把这个模型中的数据存为怎样的结构。
总结如下:
1、整个模型中的数据都存放在 Scene 中。Scene中有RootNode 引用,以及存放所有真实顶点数据的 mMeshs[] 、存放真实纹理数据的 mMaterials[] 。
2、Rootnode 包含有子节点 mChildren[] 和 Mesh的引用 mMeshes[] 。
3、Mesh 中除了顶点属性之外,也包含有 纹理的引用 mMaterialIndex 。
Tips:
如果美术给我们的模型中,一个 Mesh 包含有多个 Material 引用,那么Assimp 会把Material 拆分。即 复制出来一个Mesh 给 Material 用。确保一个 Mesh 一个 Material。
根据 上面的 Assimp 结构图,我们编写相应的类来存储对应的数据。
例如顶点属性我们用 Vertex 类来存储
[cpp] view
plain copy
#pragma once
#include"glm\glm.hpp"
class Vertex
{
public:
glm::vec3 Position;
glm::vec3 Normal;
glm::vec2 TexCoords;
};
其它还创建了 Mesh 、 Texture 、 Model 来存储对应数据。可以把代码下载查看。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
示例工程中,把一个 obj 模型转换成了 model 格式的文件。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
如果需要对 Assimp 需要更多的了解,可以参照下面的文章
[html] view
plain copy
http://learnopengl.com/#!Model-Loading/Assimp
示例工程下载:
[html] view
plain copy
http://pan.baidu.com/s/1pKuZy6f
相关文章推荐
- OpenGL ES 学习教程(六) 使用开源库 Assimp 将 Obj 模型 转换成自己的格式
- OpenGL教程翻译 第二十二课 使用Assimp加载模型
- 【Scikit-Learn 中文文档】四十八:数据转换和预测变量的组合模型- 关于科学数据处理的统计学习教程 - scikit-learn 教程 | ApacheCN
- OpenGL ES 学习教程(五) 极速绘制,使用 VBO (顶点缓冲区对象)!
- 将tf训练的权重保存为CKPT,PB ,CKPT 转换成 PB格式。并将权重固化到图里面,并使用该模型进行预测
- [转载]iPhone中OpenGL ES显示3DS MAX模型之一:OBJ文件格式分析
- obj2opengl:转换OBJ 3D模型到iPhone OpenGL ES兼容的数组中
- 【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
- (更新视频教程)Tensorflow object detection API 搭建属于自己的物体识别模型(2)——训练并使用自己的模型
- 使用blender做一个地球模型,贴上UV纹理,导出Obj格式
- 深度学习【19】ncnn安卓搭建并使用自己的模型
- obj2opengl:转换OBJ 3D模型到iPhone OpenGL ES兼容的数组中
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置
- 不同格式图片相互转换的开源库分享(使用CxImage,并有VC6的配置过程)
- Tensorflow教程学习笔记(一)----将自己的数据集转换成TFRecord
- 【深度学习】笔记6:使用caffe中的CIFAR10网络模型和自己的图片数据训练自己的模型(步骤详解)
- Wavefront OBJ 转换成OpenGL ES使用的C/C++文件
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【四】——实现模型工厂,依赖注入以及格式配置
- 将OBJ模型转换为.h文件给Xcode使用
- obj2opengl:转换OBJ 3D模型到iPhone OpenGL ES兼容的数组中