我正在关注Assimp's documentation以从 struct aiMaterial 类型中检索属性。从他们的文档中,这是 aiGetMaterialString()的用法:
aiGetMaterialFloat(mat,<material-key>,<where-to-store>)
我能够使用 aiGetMaterialString()获取材质名称,并使用 aiGetMaterialColor()获取属性的颜色,但是将其添加到我的代码中:
float f = 1.0f;
aiGetMaterialFloat(mat, AI_MATKEY_SHININESS, (float*)&f);
结果:
gcc src/*.c examples/game.c -o bin/game.o -lGL -lGLEW -lSDL2 -lSDL2_image -lassimp -lm
In file included from /usr/include/assimp/scene.h:53:0,
from src/../include/mesh.h:13,
from src/mesh.c:1:
src/mesh.c: In function ‘mesh_setMaterialData’:
src/mesh.c:71:2: error: ‘pMat’ undeclared (first use in this function)
aiGetMaterialFloat(mat, AI_MATKEY_SHININESS, (float*)&f);
^
src/mesh.c:71:2: note: each undeclared identifier is reported only once for each function it appears in
src/mesh.c:71:2: error: ‘type’ undeclared (first use in this function)
aiGetMaterialFloat(mat, AI_MATKEY_SHININESS, (float*)&f);
^
src/mesh.c:71:2: error: ‘pKey’ undeclared (first use in this function)
aiGetMaterialFloat(mat, AI_MATKEY_SHININESS, (float*)&f);
^
src/mesh.c:71:2: error: ‘pOut’ undeclared (first use in this function)
aiGetMaterialFloat(mat, AI_MATKEY_SHININESS, (float*)&f);
^
src/mesh.c:71:2: error: expected ‘;’ before ‘aiGetMaterialFloatArray’
aiGetMaterialFloat(mat, AI_MATKEY_SHININESS, (float*)&f);
^
make: *** [makefile:2: ALL] Error 1
(在我的代码中,mat的类型为struct aiMaterial *)。
我使用的代码与assimp / material.h,第1363行中描述的代码基本相同:
float specStrength = 1.f; //默认值,如果我们失败则保持不变。
aiGetMaterialFloat(mat,AI_MATKEY_SHININESS_STRENGTH, (浮点*)及specStrength);
有人可以向我解释我做错了吗?
谢谢。
修改 这是 aiGetMaterialFloat
的定义#define aiGetMaterialFloat (pMat, type, index, pKey, pOut) \
aiGetMaterialFloatArray(pMat, type, index, pKey, pOut, NULL)
和 aiGetMaterialFloatArray
ASSIMP_API C_ENUM aiReturn aiGetMaterialFloatArray(const C_STRUCT aiMaterial* pMat, const char* pKey, unsigned int type, unsigned int index, float* pOut, unsigned int* pMax);
我取代了之前的内容:
aiGetMaterialFloatArray(mat, AI_MATKEY_SHININESS, &f, NULL);
并编译......如果我在这个函数调用上交换参数,我可以让gcc告诉我,我发送的第四个参数实际上被认为是 aiGetMaterialFloatArray 的第6个参数(无符号) int * pMax)。我真的不太了解宏来了解正在发生的事情。