나는 이것에 대한 코드는 (내 이해) Assimp와 모델 로딩이 간다까지로 매우 간단합니다 내가 C에서 OpenGL을에 시험 로딩 모델에 사용하는 프로그램이 있습니다문제는 OpenGL을
const struct aiScene* scene = aiImportFile(objfile, aiProcessPreset_TargetRealtime_Fast);
unsigned int vbo, ibo, tex;
if(scene == NULL)
{
fprintf(stderr, "Could not load file '%s'\n", objfile);
return 1;
}
int count = 0, size = 0;
int i, j, k;
for(i = 0; i < scene->mNumMeshes; i ++)
size += (3 * scene->mMeshes[i]->mNumFaces);
Vertex* vertices = (Vertex*)malloc(size * sizeof(Vertex));
int* indices = (int*)malloc(size * sizeof(int));
for(i = 0; i < scene->mNumMeshes; i ++)
{
struct aiMesh* mesh = scene->mMeshes[i];
int meshFaces = mesh->mNumFaces;
for(j = 0; j < meshFaces; j ++)
{
struct aiFace* face = &(mesh->mFaces[j]);
for(k = 0; k < face->mNumIndices; k ++)
{
int index = face->mIndices[k];
struct aiVector3D pos = mesh->mVertices[index];
struct aiVector3D uv = mesh->mTextureCoords[0][index];
struct aiVector3D normal = {.x=1.0f,.y=1.0f,.z=1.0f};
if(mesh->mNormals != NULL)
normal = mesh->mNormals[index];
Vertex _vertex = {.x=pos.x * scale,
.y=pos.y * scale,
.z=pos.z * scale,
.u=uv.x, .v=uv.y,
.nx=normal.x * scale,
.ny=normal.y * scale,
.nz=normal.z * scale};
vertices[count] = _vertex;
indices[count] = count;
count ++;
}
}
}
aiReleaseImport(scene);
tex = loadTexture(texfile);
if(tex == 0)
{
fprintf(stderr, "Could not load file '%s'\n", texfile);
return 1;
}
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, size * sizeof(Vertex), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, size * sizeof(int), indices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
내 loadTexture
함수는 내가 사용한 다른 모든 텍스처에도 잘 작동하므로 문제는 아닌지 의심 스럽습니다. 그리고 더 기본적인 모델 중 일부는 전혀 문제가 없습니다. 질감이 같은 방식으로 떨어져 던져 좌표 Quad Shotgun rendered in Blender
: :이처럼 더 복잡한 모델을로드 할 때뿐만 아니라 Quad Shotgun rendered first person
, 그것은 .mtl
을로드하지에 문제가 아니에요 보장 파일은 .obj
과 적절히 연관되어 있습니다. .mtl
에서 텍스처 파일을 정의한 부분을 제외하고 모든 것을 없앴습니다. 그래야 블렌더에로드 할 수 있습니다. 같은 결과. 나는 Assimp on에 대한 연구를 해왔고, 렌더링 루프에 문제가 없다고 확신한다. 제발 도와주세요, 내가 여기에서 무엇을 놓쳤는 지, 아니면 내 프로그램에 잘못 될 수 있다는 것을 전혀 모릅니다!