为什么对象不使用 OpenGL 显示附加纹理?

问题描述 投票:0回答:1

我有一个用于 uni 作业的 3D 场景,我想使用 OpenGL 将纹理附加到 3D 对象。纹理的路径是正确的 - 它与场景中所有加载良好的所有其他纹理相同 - 将纹理附加到对象并绘制对象的代码对于所有模型都是相同的,所以它不像这是非常不同的。我的讲师和我尝试更改文件类型,对我们知道会加载的模型应用不同的纹理,但它仍然无法附加,我们都非常困惑。

这是加载模型、纹理并将它们连接在一起的代码:

GLuint buildingTex;
Model building("Resources\\Models\\building1.obj");
buildingTex = TextureLoader::loadTexture("Resource\\Models\\wall_texture.png");
building.attachTexture(buildingTex);

这是画模型:

glm::mat4 buildingModel = glm::mat4(1.0);

buildingModel = (glm::translate(glm::mat4(1.0), glm::vec3(0.0, 0.0, 10.0))) * buildingScaleMat;
        glUniformMatrix4fv(glGetUniformLocation(basicShader, "model"), 1, GL_FALSE, glm::value_ptr(buildingModel));
        building.draw(basicShader);

this is how the scene currently looks - the black cubes should have a building texture attached to them

对于上下文,这是执行相同操作的代码,但对于实际显示纹理的模型:

Model wall("Resources\\Models\\CityWall.obj");
wall.attachTexture(wallTex);
wallTex = TextureLoader::loadTexture("Resources\\Models\\wall_texture.png");

glm::mat4 wallModel = glm::mat4(1.0);

wallModel = ((glm::translate(glm::mat4(1.0), glm::vec3(0.5, 0.0, 0.5)) * wallScaleMat) * floorScaleMat) * tallerScaleMat;
        glUniformMatrix4fv(glGetUniformLocation(basicShader, "model"), 1, GL_FALSE, glm::value_ptr(wallModel));
        wall.draw(basicShader);//Draw the outer wall
c++ opengl
1个回答
0
投票

我建议您使用可以跟踪 OpenGL API 调用的调试器之一,例如 RenderDoc - https://renderdoc.org/)

这可以帮助您确定问题是否出在从磁盘或其他地方加载时纹理格式的反序列化中。

就我个人而言,我曾经忘记在渲染后交换缓冲区,导致黑屏,直到通过这种工具才发现它,它显示我一直在绘制到同一帧中。

© www.soinside.com 2019 - 2024. All rights reserved.