C++ 不正确的顶点&;使用ASIMP&;在三维模型加载中正常访问;OpenGL
我使用ASSIMP中提供的纹理3d模型加载示例。但是,对于某些模型,它似乎无法正确访问模型的顶点和法线。以下是加载错误的模型的屏幕截图: 而模型应类似于以下屏幕截图: 在第一个图像中,建筑物的屋顶放置在前视图的中心顶部。地板不见了。我假设这个问题是由于不正确地访问顶点位置和法线(CMIIW)造成的。以下是用于访问顶点位置和法线的代码段:C++ 不正确的顶点&;使用ASIMP&;在三维模型加载中正常访问;OpenGL,c++,opengl,C++,Opengl,我使用ASSIMP中提供的纹理3d模型加载示例。但是,对于某些模型,它似乎无法正确访问模型的顶点和法线。以下是加载错误的模型的屏幕截图: 而模型应类似于以下屏幕截图: 在第一个图像中,建筑物的屋顶放置在前视图的中心顶部。地板不见了。我假设这个问题是由于不正确地访问顶点位置和法线(CMIIW)造成的。以下是用于访问顶点位置和法线的代码段: glBegin(face_mode); for(i = 0; i < face->mNumIndices; i+
glBegin(face_mode);
for(i = 0; i < face->mNumIndices; i++){
int vertexIndex = face->mIndices[i]; // get group index for current index
if(mesh->mColors[0] != NULL)
Color4f(&mesh->mColors[0][vertexIndex]);
if(mesh->mNormals != NULL)
if(mesh->HasTextureCoords(0)){
glTexCoord2f(mesh->mTextureCoords[0][vertexIndex].x, mesh->mTextureCoords[0][vertexIndex].y);
}
glNormal3fv(&mesh->mNormals[vertexIndex].x);
glVertex3fv(&mesh->mVertices[vertexIndex].x);
}
glEnd();
glBegin(面部模式);
对于(i=0;imnumindice;i++){
int vertexIndex=face->mIndices[i];//获取当前索引的组索引
如果(网格->颜色[0]!=NULL)
Color4f(&mesh->mColors[0][vertexIndex]);
如果(网格->mNormals!=NULL)
如果(网格->快速排序(0)){
glTexCoord2f(网格->mTextureCoords[0][vertexIndex].x,网格->mTextureCoords[0][vertexIndex].y);
}
glNormal3fv(&mesh->mNormals[vertexIndex].x);
glVertex3fv(&mesh->mVertices[vertexIndex].x);
}
格伦德();
我们如何才能正确访问模型的顶点位置和法线?结果是,具有相同位置的顶点是“共享的”。这是有问题的,因为(在OpenGL术语中),顶点是[位置、法线、纹理坐标、其他属性…]的整个组合 在导出器或装入器中的某个位置,此信息丢失 您可以在3D modeler中通过在硬边分割网格来解决此问题,即选择平滑照明曲面的连续面片并将其转换为单独的子图(例如,在Blender中通过“分割网格”功能,热键“Y”)