使用glMultiDrawArrays渲染对象并添加纹理

时间:2016-02-11 00:39:27

标签: opengl glsl glew renderer texturing

目前我正在构建一个简单的3D渲染器。渲染器从Wavefront OBJ文件中读取对象信息。我从文件中得到的是顶点坐标,法线坐标和UV坐标。 OBJ文件带有一个MTL文件,其中包含有关材料的信息。我现在正在做的是使用glGenBuffers生成缓冲区:

  • Vertexbuffer
  • Normalbuffer
  • UV坐标缓冲区
  • Diffus Color Buffer
  • 镜面反射颜色缓冲区
  • 环境色缓冲
  • 透明度缓冲区

这些缓冲区或数组按顺序排列,以便每个顶点都有正确的法线,uv坐标等。

据我所知,这就是glMultiDrawArrays想要安排数据的方式,并且它有效。所以我的场景已被渲染,对象具有正确的材质颜色,但还没有纹理。我应该补充一点,我正在使用一个顶点着色器和一个片段着色器,我在教程中找到它们并开始工作。片段着色器进行颜色计算。

现在我想为我的对象添加纹理(顶点已经具有如上所述的正确的uv坐标)。我的第一个想法是首先渲染所有没有纹理的对象,以便从glMultiDrawArrays中获得速度优势,然后再渲染每个具有纹理的对象。

然后我看到片段着色器通过使用UV坐标对颜色的纹理进行采样。我的想法是以某种方式自己用UV坐标对纹理进行采样并将颜色写入我的颜色缓冲区(用具有UV坐标的顶点的纹理颜色覆盖顶点颜色)并通过这样做我可以渲染整个场景一个人去。

我对这个主题很新,所以我的问题是:

我可以以某种方式使用碎片整理器外的纹理采样器来获取颜色信息吗?

AND

我的第二个问题是,如果首先这是完全错误的方法,并且有一种我不了解的标准方法吗?

如果有人能指出我正确的方向,我将不胜感激。 谢谢

0 个答案:

没有答案
相关问题