assimp的下载使用
3D加载的前提基础和学习教程
在此感谢创作者的创作
assimp编译好的库文件----如果是需要在Qt上使用,而且编译器是minGw不用使用这个
转自
上面的assimp源码可能会编译失败,使用这个链接的源码
编译过程---链接
1,提取下载好的源码中的include目录以及其中文件和目录,;
2,再提取构建好的build目录中的bin目录下的库文件到项目中,;
3,复制libs下的config.h文件到include下的aasimp目录下;
4,在CMakeLists.txt中include_directories头文件和target_link_libraries链接动态库即可。
`aiMaterial` 是`Assimp`库中的一个类,用于表示一个模型材质。`GetTexture` 函数是 `aiMaterial` 类中的一个成员函数,用于获取一个指定类型的纹理贴图。以下是该函数的函数原型:
```c++
aiReturn GetTexture(aiTextureType type, unsigned int index, aiString* path = NULL,
aiTextureMapping* mapping = NULL, unsigned int* uvindex = NULL,
float* blend = NULL, aiTextureOp* op = NULL,
aiTextureMapMode* mapmode = NULL,
int* flags = NULL) const
```
函数参数说明:
- `type`: 纹理贴图类型,可以是 `aiTextureType_DIFFUSE`、`aiTextureType_SPECULAR`、`aiTextureType_AMBIENT`、`aiTextureType_EMISSIVE`、`aiTextureType_HEIGHT`、`aiTextureType_NORMALS`、`aiTextureType_SHININESS`、`aiTextureType_OPACITY
AI对话未来丨智能写作对话:
`、`aiTextureType_DISPLACEMENT`、`aiTextureType_LIGHTMAP`、`aiTextureType_REFLECTION`、`aiTextureType_UNKNOWN`其中的一种。
- `index`:同一种类型可能会有多个纹理贴图,这个参数用于获取指定在同一类型下的第几个纹理贴图。
- `path`:用于返回纹理贴图的文件路径。
- `mapping`:纹理映射方式,可以是 `aiTextureMapping_UV`、`aiTextureMapping_SPHERE`、`aiTextureMapping_CYLINDER`、`aiTextureMapping_BOX`、`aiTextureMapping_PLANE`其中的一种。
- `uvindex`:纹理映射坐标,可以是0到7。
- `blend`:纹理贴图颜色混合系数,从0到1。
- `op`:纹理贴图运算类型,可以是 `aiTextureOp_Multiply`、`aiTextureOp_Add`、`aiTextureOp_Subtract`、`aiTextureOp_SmoothAdd`、`aiTextureOp_SignedAdd`其中的一种。
- `mapmode`:纹理贴图的坐标映射模式,可以是 `aiTextureMapMode_Wrap`、`aiTextureMapMode_Clamp`、`aiTextureMapMode_Decal`、`aiTextureMapMode_Mirror`其中的一种。
- `f
lags`:纹理贴图的标志,目前未被使用。
函数返回值类型为 `aiReturn` 类型,表示函数执行的结果。具体值有:
- `aiReturn_SUCCESS`:获取纹理贴图成功
- `aiReturn_FAILURE`:获取纹理贴图失败
- `aiReturn_OUTOFMEMORY`:内存不足
示例代码:
```c++
unsigned int numTextures = material->GetTextureCount(aiTextureType_DIFFUSE); // 获取漫反射贴图的数量
if(numTextures > 0){
// 获取第0个漫反射贴图(通常一个材质只使用一个漫反射贴图)
aiString path;
if(material->GetTexture(aiTextureType_DIFFUSE, 0, &path) == aiReturn_SUCCESS){
std::cout << "Diffuse texture file path:" << path.C_Str() << std::endl;
}
}