在中心位置渲染模型未显示(修订)

时间:2014-04-09 10:59:30

标签: c++ shader render opengl-3 sdl-2

目前我可以从没有纹理的DAE文件加载地球模型,只是为了显示屏幕上有东西。为此,我使用了 GLU。

但是现在我试图用 GLM和着色器来加载带有纹理的模型。我遇到的问题是让他们两个一起工作以显示模型。

REVISED

在被指出我需要VAO渲染场景之后,我决定使用前面提到的 ogldev's tutorial 32 about Vertex Array Objects. 示例,我编译了教程并且它可以正常工作,但是它是 GLUT。所以我提取了与加载模型有关的重要部分,并将它们实现到我的项目中。经过一些调试后,我设法比以前描述的更进一步,但仍然没有显示。在回顾过我可能错过的内容之后,我无法确定问题所在。我确保该程序正在读取值并进行适当的检查,以显示该过程是有效的,没有打嗝,但我出于某种原因,我无法得到任何东西。我改变了背景颜色以检查是否只有地球模型的轮廓,但是仍然没有渲染到屏幕上。

我所做的是提供了我已完成的副本。一切都显示出适当的价值。如果你将教程与我的教程进行比较,你会发现它是相同的东西,除了我的硬编码摄像机位置和目标指向模型的位置,没有什么不同。但我不知道在这个过程中我可能错过/忽略了什么。

(非过期)

game.cpp   OnInit()中的所有内容都会通过。但是当谈到OnRender()时,有些事情是对的。

PipeLine.cpp 与教程没什么不同。

model.cpp 除了课程名称,与教程没有什么不同。

Technique.h & cpp 着色器和着色器程序。与教程没有什么不同。

Lighting.h & cpp 技术课的孩子。获得制服等。

1 个答案:

答案 0 :(得分:0)

主要问题似乎在你的片段定义中:

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函数的实现,将更容易为您提供帮助。