`

ASSIMP的数据结构

 
阅读更多

 

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

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-4.1.0

    Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。当Assimp加载完模型之后,我们就能够从Assimp的数据结构中提取我们所需的所有数据了。由于...

    assimp_VS2015 编译结果

    ------------------------------------------- 包含: lib , dll 以及头文件...Assimp把不同的模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。

    assimp-vc142-mt.dll

    现在市面上有一个很流行的模型加载库,叫做Assimp...Assimp把不同的模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。 此资源为assimp dll文件

    assimp-3.3.1.tar.gz

    一个非常流行的模型导入库是Assimp,它是Open Asset Import Library(开放的资产导入库)...Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中。

    assimp-vc142-mtd.dll

    Open Asset Import Library。...Assimp把不同的模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。 此资源为assimp dll文件

    Android-assimp.zip

    Android-assimp.zip,正式开放...将40多个三维文件格式加载到一个统一且干净的数据结构中。,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。

    Assimp库 VS2015 2017 x64 debug/release包

    Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至Assimp的通用数据结构中; 本包包含VS2015及2017编译的x64 debug/release版本 没有编译32位版本

    模型加载库 Assimp

    Assimp 可以将几十种模型文件都转换为一个统一的数据结构,所有无论我们导入何种格式的模型文件,都可以用同一个方式去访问我们需要的模型数据。 当导入一个模型文件时,即Assimp加载一整个包含所有模型和场景数据的...

    assimp:官方的开放资产进口商库。 将40多种3D文件格式加载到一个统一且干净的数据结构中

    一个库,用于导入和导出各种3D模型格式,包括场景后处理以生成丢失的渲染数据。 当前项目状态 提供了用于C和C ++的API。 与其他语言(C#,Java,Python,Delphi,D)有各种绑定。 Assimp还可以在Android和iOS上...

    基于opencv,glm,assimp实现的简单光栅化渲染器,支持obj模型读入,blinn-phone光照模型。.zip

    Core:包含基本的数据结构(如cv::Mat用于图像存储和操作)、基本的图像和矩阵操作、数学函数、文件I/O等底层功能。 ImgProc:提供图像预处理、滤波、几何变换、形态学操作、直方图计算、轮廓发现与分析等图像...

Global site tag (gtag.js) - Google Analytics