gpt4 book ai didi

c++ - 使用 ASSIMP 和 OpenGL 加载 3D 模型时顶点和正常访问不正确

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:17 25 4
gpt4 key购买 nike

我使用 ASSIMP 的 sample code 中提供的带纹理的 3d 模型加载示例.但是,对于某些模型,它似乎无法正确访问模型的顶点和法线。这是模型加载不正确的屏幕截图:

enter image description here

虽然模型应该像下面的截图:

enter image description here

在第一张图片中,建筑物的屋顶位于前 View 的中央顶部。地板不见了。我假设这个问题是由对顶点位置和法线 (CMIIW) 的不正确访问引起的。以下是用于访问顶点位置和法线的代码段:

        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();

我们如何才能正确访问模型的顶点位置和法线?

最佳答案

发生的事情是,具有相同位置的顶点是“共享的”。这是有问题的,因为(在 OpenGL 术语中)顶点是 [位置、法线、纹理坐标、其他属性……] 的整体组合。

此信息在导出器或加载器的某处丢失。

您可以在 3D 建模器中修复此问题,方法是在硬边处分割网格,即选择平滑光照表面的连续 block 并将它们变成单独的子网格(例如,在 Blender 中通过“分割网格”功能,热键“Y” ).

关于c++ - 使用 ASSIMP 和 OpenGL 加载 3D 模型时顶点和正常访问不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7976116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com