目前我可以从没有纹理的 DAE 文件加载地球模型,只是为了显示屏幕上有东西。为此,我使用了 GLU。
但现在我正在尝试使用我们的GLM 和着色器 来加载带有纹理的模型。我遇到的问题是正确地让它们一起工作以显示模型。
修订
在被指出我需要 VAO 来渲染场景后,我决定使用之前提到的来自 ogldev's tutorial 32 about Vertex Array Objects. 的示例。 我编译了该教程,它可以正常工作,但它是 GLUT。 因此,我提取了与加载模型有关的重要部分并将它们实现到我的项目中。经过一些调试后,我设法比之前描述的更进一步,但仍然没有任何显示。在反复查看我可能遗漏的内容之后,我无法确定确切的问题所在。我确保该程序正在读取值并进行适当的检查以表明该过程有效且没有任何问题,但由于某种原因,我无法显示任何内容。我已经更改了背景颜色以检查是否只有地球模型的轮廓,但屏幕上仍然没有任何渲染。
我已完成的操作会提供一份“我已完成”的拷贝。一切都显示出适当的值(value)。如果您将教程与我的进行比较,您会发现它们是一样的,除了我的硬编码相机位置和目标以指向模型所在的位置之外,实际上没有什么不同。但是我不知道在这个过程中我可能错过/忽略了什么。
(不会过期)
game.cpp
OnInit() 中的所有内容都会通过。但是当涉及到 OnRender()
时,有些地方不对。
PipeLine.cpp 与教程没有区别。
model.cpp 除了类名外,与教程没有什么不同。
Technique.h & cpp 着色器和着色器程序。与教程没有什么不同。
Lighting.h & cpp 技术类的 child 。获得制服等。
最佳答案
主要问题似乎出在您的片段定义中:
fragData = color * texture(tex, TexCoord);
其中颜色被定义为制服。在您的主程序中,您没有为它分配任何值,因此,它被初始化为零,这使得任何片段都是黑色的。与您的帧缓冲区背景颜色相同。
尽管如此,您的代码还有其他问题。首先,您使用了很多对核心配置文件 (v3.3) 没有影响的已弃用函数。
其次,您需要分配一个 VAO(顶点数组对象)才能看到任何内容。
最后,有些功能似乎没有任何效果,例如:
glm::translate(view, glm::vec3(0.f, 0.f, -20.f)); // <-----------
// Draw model
m_model.Render();
如果您提供render
函数的实现,会更容易帮助您。
关于c++ - 在中心位置渲染模型不显示(修订),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22960467/