2011-12-03 51 views
0

简单的任务:画一个带纹理的全屏四边形,仅此而已,所以我们可以确定纹理将填充整个屏幕空间。 (我们稍后会做更多的着色器魔术)。如何使用SDL在OpenGL 2.0中制作纹理全屏四边形?

使用简单的片段着色器绘制全屏四连杆很容易,但现在我们被困在一整天试图使其纹理。我们阅读了大量的教程,但他们都没有帮助我们。大约主要使用 1.x,那些关于OpenGL 2.0的不是关于纹理或SDL。 :(

代码为here,一切都在colorLUT.c,和片段着色器是colorLUT.fs,结果是一样大小的图像的窗口,如果你对此有何评论着色器的最后一行,你会得到漂亮的红/绿梯度,所以着色器是好的。

回答

3
  1. 纹理初始化相比的OpenGL 1.4并没有改变。教程将正常工作。
  2. 如果片段着色器的作品,但你看不到纹理(并获得黑屏),纹理加载被破坏或纹理未被正确设置。禁用着色器,并尝试显示具有固定功能功能的纹理多边形。
  3. 在尝试初始纹理之前,您可能需要调用glPixelStorei(GL_UNPACK_ALIGNMENT, 1)。默认值为4.
  4. 将纹理对齐到屏幕的更简单的方法是添加顶点着色器并传递纹理坐标 - 而不是尝试使用gl_FragCoord来计算它们。
  5. 您将表面大小传递到“分辨率”统一。这是一个错误。您应该传递视口大小。
  6. 您可能想要生成mipmap。要么自己生成它们,要么使用GL_GENERATE_MIPMAPS,因为它在OpenGL 2中可用(但在更高版本中已被弃用)
  7. OpenGL.org具有OpenGL 2.0和GLSL 1.5的规范。下载它们并将其用作参考,如有疑问。
  8. NVIdia OpenGL SDK提供了您可能需要检查的示例 - 它们覆盖着色器。
  9. 还有“OpenGL橙色书”(OpenGL着色语言),专门处理着色器。
  10. 下一次将代码添加到问题中。
+0

'glGenerateMipmap(GL_TEXTURE_2D);'做了诡计! – Pitel

相关问题