ASSIMP的数据结构

  • 博客分类:
  • Assimp

数据结构是对文件的描述,也是我们想要获取的最终产物,一般来说我们会用这个结果映射到我们自己的模型里面去(这样做是为了降低对这个项目的依赖,如果你的模型都用别人的,还搞毛啊)

1.aiScene :根节点

Java代码  

  1. struct aiScene
  2. {
  3. unsigned int mFlags;  // 一个状态段
  4. C_STRUCT aiNode* mRootNode;  // 根节点
  5. // 网格
  6. unsigned int mNumMeshes;
  7. C_STRUCT aiMesh** mMeshes;
  8. //材质
  9. unsigned int mNumMaterials;
  10. C_STRUCT aiMaterial** mMaterials;
  11. //动画
  12. unsigned int mNumAnimations;
  13. C_STRUCT aiAnimation** mAnimations;
  14. //纹理
  15. unsigned int mNumTextures;
  16. C_STRUCT aiTexture** mTextures;
  17. //光源
  18. unsigned int mNumLights;
  19. C_STRUCT aiLight** mLights;
  20. //摄像机
  21. unsigned int mNumCameras;
  22. C_STRUCT aiCamera** mCameras;
  23. };

这结构太简洁了。

2.aiNode :

Cpp代码  

  1. struct aiNode
  2. {
  3. C_STRUCT aiString mName; // 名字
  4. C_STRUCT aiMatrix4x4 mTransformation; // 父的相对变换
  5. C_STRUCT aiNode* mParent; // 父节点
  6. // 孩纸节点
  7. unsigned int mNumChildren;
  8. C_STRUCT aiNode** mChildren;
  9. // 网格
  10. unsigned int mNumMeshes;
  11. unsigned int* mMeshes;
  12. };

3.aiMesh :网格

Cpp代码  

  1. struct aiMesh
  2. {
  3. unsigned int mPrimitiveTypes;
  4. unsigned int mNumVertices; // 顶点数
  5. unsigned int mNumFaces;   // 面数
  6. C_STRUCT aiVector3D* mVertices;  // 顶点集合
  7. C_STRUCT aiVector3D* mNormals;  // 法向量集合
  8. C_STRUCT aiVector3D* mTangents; // 切线集合
  9. C_STRUCT aiVector3D* mBitangents; //双向切线集合
  10. C_STRUCT aiColor4D* mColors[AI_MAX_NUMBER_OF_COLOR_SETS]; // 顶点颜色集合
  11. C_STRUCT aiVector3D* mTextureCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS]; // 顶点的纹理坐标(u,v)
  12. unsigned int mNumUVComponents[AI_MAX_NUMBER_OF_TEXTURECOORDS];//??
  13. C_STRUCT aiFace* mFaces; //面的集合
  14. unsigned int mMaterialIndex; // 材质索引
  15. C_STRUCT aiString mName; //名字
  16. // 骨头
  17. unsigned int mNumBones;
  18. C_STRUCT aiBone** mBones;
  19. //动画(这一组参数还未被使用)
  20. unsigned int mNumAnimMeshes;
  21. C_STRUCT aiAnimMesh** mAnimMeshes;
  22. };

4.aiMaterial :材质是一个模板数据结构,材质本身就是N多属性

5.aiTexture :

Java代码  

  1. struct aiTexture
  2. {
  3. unsigned int mWidth;
  4. unsigned int mHeight;
  5. char achFormatHint[4]; //这个的纹理文件的类型['dds\\0', 'pcx\\0', 'jpg\\0']
  6. C_STRUCT aiTexel* pcData; //纹理的内容
  7. };
  8. struct aiTexel
  9. {
  10. unsigned char b,g,r,a;  // 四元数描述某个像素的颜色和透明度
  11. }

6.aiAnimation :动画

Java代码  

  1. struct aiAnimation
  2. {
  3. C_STRUCT aiString mName;
  4. double mDuration;
  5. double mTicksPerSecond;
  6. //节点动画集合,骨骼动画属于节点动画
  7. unsigned int mNumChannels;
  8. C_STRUCT aiNodeAnim** mChannels;
  9. //网格动画集合
  10. unsigned int mNumMeshChannels;
  11. C_STRUCT aiMeshAnim** mMeshChannels;
  12. };

6.1 aiNodeAnim :节点动画

Java代码  

  1. struct aiNodeAnim
  2. {
  3. C_STRUCT aiString mNodeName;
  4. //位置的轨迹
  5. unsigned int mNumPositionKeys;
  6. C_STRUCT aiVectorKey* mPositionKeys;
  7. //旋转的轨迹
  8. unsigned int mNumRotationKeys;
  9. C_STRUCT aiQuatKey* mRotationKeys;
  10. //缩放的轨迹
  11. unsigned int mNumScalingKeys;
  12. C_STRUCT aiVectorKey* mScalingKeys;
  13. C_ENUM aiAnimBehaviour mPreState;
  14. C_ENUM aiAnimBehaviour mPostState;
  15. };
  16. struct aiVectorKey //顶点帧
  17. {
  18. double mTime;  // 时间
  19. C_STRUCT aiVector3D mValue;  // 值
  20. };
  21. struct aiQuatKey  // 四元数帧
  22. {
  23. double mTime;  // 时间
  24. C_STRUCT aiQuaternion mValue;  //值
  25. };

6.2 aiMeshAnim :网格动画

Cpp代码  

  1. struct aiMeshAnim
  2. {
  3. C_STRUCT aiString mName;
  4. //所有移动的点都会有一个网格帧
  5. unsigned int mNumKeys;
  6. C_STRUCT aiMeshKey* mKeys;
  7. };
  8. struct aiMeshKey // 网格帧
  9. {
  10. double mTime;  // 时间
  11. unsigned int mValue; // 值 (这个值没有理解啊)
  12. };

7.aiLight :光源

Cpp代码  

  1. struct aiLight
  2. {
  3. C_STRUCT aiString mName;
  4. C_ENUM aiLightSourceType mType; // 光源类型 4种
  5. C_STRUCT aiVector3D mPosition; // 位置
  6. C_STRUCT aiVector3D mDirection; // 方向
  7. // 衰减因子,衰减=1/(att0+ ATT1* D+ ATT2* D* D),D是距离
  8. float mAttenuationConstant; // att0
  9. float mAttenuationLinear;      // ATT1
  10. float mAttenuationQuadratic; // ATT2
  11. C_STRUCT aiColor3D mColorDiffuse; // 漫反射光的颜色
  12. C_STRUCT aiColor3D mColorSpecular; // 镜面光的颜色
  13. C_STRUCT aiColor3D mColorAmbient; // 环境光的颜色
  14. // 当光源类型为aiLightSource_SPOT(聚光灯)的时候有效
  15. float mAngleInnerCone; // 内角弧度
  16. float mAngleOuterCone; // 外角弧度
  17. };
  18. enum aiLightSourceType // 光源的类型
  19. {
  20. aiLightSource_UNDEFINED     = 0x0,   // 全局光
  21. aiLightSource_DIRECTIONAL   = 0x1,  // 定向光源,光源的位置无限远
  22. aiLightSource_POINT         = 0x2,        // 点光源
  23. aiLightSource_SPOT          = 0x3,        // 聚光灯类似的光
  24. };

8.aiCamera :摄像机

Cpp代码  

  1. struct aiCamera
  2. {
  3. C_STRUCT aiString mName; // 名字
  4. C_STRUCT aiVector3D mPosition; // 相机的位置,默认值0|0|0
  5. C_STRUCT aiVector3D mUp;         // 相机的上方,默认值0| 1 | 0
  6. C_STRUCT aiVector3D mLookAt;  // 视点方向,默认值0|0|1
  7. float mHorizontalFOV; // 半水平视角的幅度 默认值1/4PI
  8. float mClipPlaneNear; // 近视截体平面,默认值 0.1f.
  9. float mClipPlaneFar;   //  远视截体平面,默认值是1000.f..
  10. float mAspect; // 屏幕的宽高比,这个需要获取
  11. };

ASSIMP的数据结构相关推荐

  1. Opengl-模型(告别箱子加载模型)

    先放一个效果图 关于模型加载 一个非常流行的模型导入库是Assimp,它是Open Asset Import Library(开放的资产导入库)的缩写.Assimp能够导入很多种不同的模型文件格式(并 ...

  2. OpenGL 网格Mesh

    OpenGL 网格Mesh 网格Mesh简介 初始化 渲染 网格Mesh简介 通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构.我们最终仍要将这些数 ...

  3. OpenGL基础28:模型

    参考文献:https://learnopengl.com/#!Getting-started/OpenGL 前置:OpenGL基础27:网格 一.模型 有了mesh类之后,接下来就是实现一个model ...

  4. android OpenGL渲染3D模型文件

    码字不易,转载请注明出处喔 https://blog.csdn.net/newchenxf/article/details/121402859 1 前言 大部分OpenGL示例代码,要么播放个视频,要 ...

  5. OPenGL 学习笔记之 Mesh 网格知识

    通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构.我们最终仍要将这些数据转换为OpenGL能够理解的格式,这样才能渲染这个物体.我们从上一节中学到, ...

  6. 大作业——OpenGL-基于物理的渲染挂线项目说明书

    提示:各种渲染效果的切换需要手动在片段着色器中切换FragColor的赋值函数 目录 简介 效果图 一.开发流程 1.环境配置 2.框架搭建 二.基础功能 1.图形绘制 2.着色器 3.纹理材质 4. ...

  7. CSharpGL(50)使用Assimp加载骨骼动画

    CSharpGL(50)使用Assimp加载骨骼动画 在(http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html)介绍了C++用Asism ...

  8. OpenGL基础26:Assimp库

    一.模型文件 游戏中有很多复杂的模型往往都是美术通过3D建模工具构建出来的,当然不是程序将顶点写死在代码里的,想想看一个简单的人物模型可能就有上千个顶点,这个时候按之前"生成木箱子" ...

  9. [OpenGL] 使用Assimp库的骨骼动画

    Tutorial 38: Skeletal Animation With Assimp 最终,我们来到了这里.有数百万的读者都要求这一教程(我可能夸大了一些,但确实有不少).骨骼动画(skeletio ...

  10. DirectX12(D3D12)基础教程(外篇四)——用Assimp载入模型基础操作(无渲染纯命令行版)

    目录 1.前言 2.Assimp使用简介 3.Assimp头文件和库文件引入 4.Import模型文件 5.aiScene基本数据结构及遍历 5.1.Assimp类图及关系 5.2.aiScene遍历 ...

最新文章

  1. CTO丢给我《技术Leader的30条军规》:照着做,做不好滚回去写代码!
  2. 库克退休前将再推出一个新品类?可能是AR眼镜
  3. 学校计算机协会招新策划案,本部 | 计算机协会招新中
  4. spring-boot 免xml配置直接使用spring
  5. 在visual studio2015中使用easyX画图
  6. Java springcloud B2B2C o2o多用户商城 springcloud架构- ribbon
  7. 如何把map的value转为list_Java 8 将Map转换为List
  8. libfdk_aac介绍
  9. 琪琪格不因为漂亮而自信
  10. 盘点2020年北京市小升初考试关于信息学竞赛的那些事儿!
  11. A dependency may only have one source.
  12. Unity学习第二周
  13. 远程入侵原装乘用车(上)
  14. Python PYQT5中用Label控件显示以numpy表示的灰度图像
  15. python关于FIFA球员的数据分析
  16. P1247 取火柴游戏 (博弈论)
  17. 判断当前浏览器是否为IE11
  18. 电视上做独立音箱,小米的野望
  19. 使用VS C#实现距离的计算(点点、点线、点面、线面、线线、面面)
  20. Alfred Workflow 入门指南

热门文章

  1. python制作编程软件的方法_利用python程序生成word和PDF文档的方法
  2. app抓包工具_安卓APP逆向入门分析——破解某APP登陆请求参数
  3. python显示图片固定大小
  4. 放入http请求头中的内容如果含有中文必须编码
  5. 组装计算机的主要配置,自己组装电脑的基本配置跟一些注意事项
  6. Java实现文本加密
  7. 三角函数及其之间的关系
  8. 农历和阳历日期互转,Python实现
  9. matplotlib常用图形
  10. php 数据库 编程,php数据库编程(mysql mysqli pdo)