数据结构是对文件的描述,也是我们想要获取的最终产物,一般来说我们会用这个结果映射到我们自己的模型里面去(这样做是为了降低对这个项目的依赖,如果你的模型都用别人的,还搞毛啊)
1.aiScene :根节点
struct aiScene
{
unsigned int mFlags; // 一个状态段
C_STRUCT aiNode* mRootNode; // 根节点
// 网格
unsigned int mNumMeshes;
C_STRUCT aiMesh** mMeshes;
//材质
unsigned int mNumMaterials;
C_STRUCT aiMaterial** mMaterials;
//动画
unsigned int mNumAnimations;
C_STRUCT aiAnimation** mAnimations;
//纹理
unsigned int mNumTextures;
C_STRUCT aiTexture** mTextures;
//光源
unsigned int mNumLights;
C_STRUCT aiLight** mLights;
//摄像机
unsigned int mNumCameras;
C_STRUCT aiCamera** mCameras;
};
这结构太简洁了。
2.aiNode :
struct aiNode
{
C_STRUCT aiString mName; // 名字
C_STRUCT aiMatrix4x4 mTransformation; // 父的相对变换
C_STRUCT aiNode* mParent; // 父节点
// 孩纸节点
unsigned int mNumChildren;
C_STRUCT aiNode** mChildren;
// 网格
unsigned int mNumMeshes;
unsigned int* mMeshes;
};
3.aiMesh :网格
struct aiMesh
{
unsigned int mPrimitiveTypes;
unsigned int mNumVertices; // 顶点数
unsigned int mNumFaces; // 面数
C_STRUCT aiVector3D* mVertices; // 顶点集合
C_STRUCT aiVector3D* mNormals; // 法向量集合
C_STRUCT aiVector3D* mTangents; // 切线集合
C_STRUCT aiVector3D* mBitangents; //双向切线集合
C_STRUCT aiColor4D* mColors[AI_MAX_NUMBER_OF_COLOR_SETS]; // 顶点颜色集合
C_STRUCT aiVector3D* mTextureCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS]; // 顶点的纹理坐标(u,v)
unsigned int mNumUVComponents[AI_MAX_NUMBER_OF_TEXTURECOORDS];//??
C_STRUCT aiFace* mFaces; //面的集合
unsigned int mMaterialIndex; // 材质索引
C_STRUCT aiString mName; //名字
// 骨头
unsigned int mNumBones;
C_STRUCT aiBone** mBones;
//动画(这一组参数还未被使用)
unsigned int mNumAnimMeshes;
C_STRUCT aiAnimMesh** mAnimMeshes;
};
4.aiMaterial :材质是一个模板数据结构,材质本身就是N多属性
5.aiTexture :
struct aiTexture
{
unsigned int mWidth;
unsigned int mHeight;
char achFormatHint[4]; //这个的纹理文件的类型['dds\\0', 'pcx\\0', 'jpg\\0']
C_STRUCT aiTexel* pcData; //纹理的内容
};
struct aiTexel
{
unsigned char b,g,r,a; // 四元数描述某个像素的颜色和透明度
}
6.aiAnimation :动画
struct aiAnimation
{
C_STRUCT aiString mName;
double mDuration;
double mTicksPerSecond;
//节点动画集合,骨骼动画属于节点动画
unsigned int mNumChannels;
C_STRUCT aiNodeAnim** mChannels;
//网格动画集合
unsigned int mNumMeshChannels;
C_STRUCT aiMeshAnim** mMeshChannels;
};
6.1 aiNodeAnim :节点动画
struct aiNodeAnim
{
C_STRUCT aiString mNodeName;
//位置的轨迹
unsigned int mNumPositionKeys;
C_STRUCT aiVectorKey* mPositionKeys;
//旋转的轨迹
unsigned int mNumRotationKeys;
C_STRUCT aiQuatKey* mRotationKeys;
//缩放的轨迹
unsigned int mNumScalingKeys;
C_STRUCT aiVectorKey* mScalingKeys;
C_ENUM aiAnimBehaviour mPreState;
C_ENUM aiAnimBehaviour mPostState;
};
struct aiVectorKey //顶点帧
{
double mTime; // 时间
C_STRUCT aiVector3D mValue; // 值
};
struct aiQuatKey // 四元数帧
{
double mTime; // 时间
C_STRUCT aiQuaternion mValue; //值
};
6.2 aiMeshAnim :网格动画
struct aiMeshAnim
{
C_STRUCT aiString mName;
//所有移动的点都会有一个网格帧
unsigned int mNumKeys;
C_STRUCT aiMeshKey* mKeys;
};
struct aiMeshKey // 网格帧
{
double mTime; // 时间
unsigned int mValue; // 值 (这个值没有理解啊)
};
7.aiLight :光源
struct aiLight
{
C_STRUCT aiString mName;
C_ENUM aiLightSourceType mType; // 光源类型 4种
C_STRUCT aiVector3D mPosition; // 位置
C_STRUCT aiVector3D mDirection; // 方向
// 衰减因子,衰减=1/(att0+ ATT1* D+ ATT2* D* D),D是距离
float mAttenuationConstant; // att0
float mAttenuationLinear; // ATT1
float mAttenuationQuadratic; // ATT2
C_STRUCT aiColor3D mColorDiffuse; // 漫反射光的颜色
C_STRUCT aiColor3D mColorSpecular; // 镜面光的颜色
C_STRUCT aiColor3D mColorAmbient; // 环境光的颜色
// 当光源类型为aiLightSource_SPOT(聚光灯)的时候有效
float mAngleInnerCone; // 内角弧度
float mAngleOuterCone; // 外角弧度
};
enum aiLightSourceType // 光源的类型
{
aiLightSource_UNDEFINED = 0x0, // 全局光
aiLightSource_DIRECTIONAL = 0x1, // 定向光源,光源的位置无限远
aiLightSource_POINT = 0x2, // 点光源
aiLightSource_SPOT = 0x3, // 聚光灯类似的光
};
8.aiCamera :摄像机
struct aiCamera
{
C_STRUCT aiString mName; // 名字
C_STRUCT aiVector3D mPosition; // 相机的位置,默认值0|0|0
C_STRUCT aiVector3D mUp; // 相机的上方,默认值0| 1 | 0
C_STRUCT aiVector3D mLookAt; // 视点方向,默认值0|0|1
float mHorizontalFOV; // 半水平视角的幅度 默认值1/4PI
float mClipPlaneNear; // 近视截体平面,默认值 0.1f.
float mClipPlaneFar; // 远视截体平面,默认值是1000.f..
float mAspect; // 屏幕的宽高比,这个需要获取
};
分享到:
相关推荐
Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后,我们就能够从Assimp的数据结构中提取我们所需的所有数据了。由于...
现在市面上有一个很流行的模型加载库,叫做Assimp...Assimp把不同的模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。 此资源为assimp dll文件
------------------------------------------- 包含: lib , dll 以及头文件...Assimp把不同的模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。
3. **数据结构**:Assimp将模型数据转换为统一的内存表示,包括顶点、法线、纹理坐标、骨骼、动画等,这些数据可以方便地映射到Direct3D或OpenGL等图形API。 4. **3D场景加载**:除了基本的几何数据外,Assimp还...
Assimp 5.0.1提供了对多种3D模型格式的解析支持,能够将这些格式的数据转换为统一的数据结构,便于在OpenGL中渲染。 在Assimp 5.0.1的压缩包中,包含了适用于不同平台的编译结果。针对Windows操作系统,分别提供了...
它的核心功能在于将复杂的3D模型数据转换为统一的内部数据结构,使得开发者无需关注具体格式的细节,只需处理通用的数据结构,大大降低了3D模型处理的复杂性。在Windows 7.0环境下,assimp_model_read_parser通过 ...
Assimp库的设计目标是提供一个统一的接口,用于读取不同三维模型格式的数据,并将它们转换为统一的数据结构,便于进一步处理。它包含了一套完整的预处理步骤,如模型优化、纹理坐标校正等,确保导入的模型能够适应...
assimp库的核心目标是为用户提供一个统一的接口,用于导入和预处理3D模型数据。它支持超过40种不同的3D文件格式,包括但不限于OBJ、FBX、3DS、 COLLADA、BLEND、MD5等。通过这个库,开发者可以轻松地将各种格式的3D...
5. **处理模型数据**:遍历`aiScene`对象,获取并处理模型的网格、材质、节点等信息,将它们转换为应用所需的数据结构。 6. **编译和运行**:最后,编译项目并运行,验证assimp库是否成功地在VS环境中运行并加载了...
"include"目录通常包含ASSIMP库的头文件,这些头文件定义了开发者在Android应用中与ASSIMP交互所需的函数原型、数据结构和常量。通过包含这些头文件,开发者可以在自己的源代码中使用ASSIMP的功能,例如: 1. `#...
Assimp库的设计目标是简化3D模型的预处理工作,包括解码文件格式、优化模型数据结构、以及处理各种模型的转换和校正。这样,开发者无需关心底层细节,就能快速地将3D模型整合到自己的应用程序中,无论是用于游戏开发...
FBX是由Autodesk提供的一个广泛使用的3D模型交换格式,常用于游戏开发和三维建模软件之间数据交换。 在Qt中使用Assimp,你需要首先将Assimp库集成到你的项目中。这通常涉及下载Assimp源码,编译并生成静态或动态库...
Open Asset Import Library。...Assimp把不同的模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。 此资源为assimp dll文件
一个非常流行的模型导入库是Assimp,它是Open Asset Import Library(开放的资产导入库)...Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。
1. **文件格式解析**:Assimp能够读取多种3D文件格式,并将其转换为统一的数据结构,便于进一步处理。 2. **数据优化**:在导入模型时,Assimp执行一系列优化步骤,如去除冗余数据(如重复的顶点、面和纹理坐标)、...
Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中; 本包包含VS2015及2017编译的x64 debug/release版本 没有编译32位版本
2. **数据处理**:Assimp提供了一整套工具来处理3D模型数据,包括优化模型的拓扑结构、删除冗余数据、合并相近顶点等,从而提高渲染效率。 3. **转换和导出**:可以将加载的模型转换为其他格式,或者根据需求对模型...
2. **加载模型**:调用`Importer`对象的`ReadFile()`方法,传入3D模型的文件路径,此方法会返回一个`const aiScene*`指针,表示模型的数据结构。 3. **处理模型数据**:`aiScene`结构包含了模型的所有信息,如场景...
对于OpenGL开发者来说,Assimp库尤其有用,因为它能够无缝地将导入的3D模型转换为OpenGL可渲染的数据结构。通过使用Assimp,开发者可以避免编写复杂的模型解析代码,专注于渲染和交互逻辑。在游戏开发中,这可以大大...
这一步骤包括了解析文件结构、解码模型数据、处理纹理和骨骼动画等。 3. **OpenGL**:OpenGL是一个用于渲染2D和3D图形的低级图形库,广泛应用于游戏开发、科学可视化和CAD等领域。在这个程序中,OpenGL可能被用来...