【问题标题】:An alternative to glDrawPixels in OpenGL 3.0?OpenGL 3.0 中 glDrawPixels 的替代方案?
【发布时间】:2012-08-22 12:08:06
【问题描述】:

所以我知道 glDrawPixels 已被弃用。有没有做同样事情的功能? 本来想用纹理的,但是是被当前矩阵修改的,不像glDrawPixels绘制的像素。

【问题讨论】:

  • 顺便说一句,即使glDrawPixels 可用或未弃用(在 GL 2- 上),也不要使用它,而是始终使用带纹理的四边形来实现这些目的。 glDrawPixels 已被弃用是有原因的。

标签: c++ opengl gldrawpixels


【解决方案1】:

我想过用纹理,但是被当前矩阵修改了

“当前矩阵”在 3.0 中已弃用,在 3.1+ 中也已删除。所以如果你不使用glDrawPixels,你也不会使用矩阵函数。所以没什么好担心的。

【讨论】:

  • 好的。我的意思是当相机移动时纹理看起来会有所不同,这是我不想要的。
  • @Pilpel:那就不要让它们看起来不一样。
  • @Pilpel 如果您自己使用某些着色器使它们看起来不同(通过使用一些不适当的矩阵变换),它们可能看起来不同。所以不要根据相机来改变它们,那很容易。 OpenGL 不会让您从为正确的基元实际使用正确的设置中解脱出来,所以不要使用顶点混合和阴影映射来绘制屏幕大小的四边形。
【解决方案2】:

您可以使用片段着色器,其中gl_FragCoord 的函数用于对矩形纹理进行采样。

或者,您可以使用更传统的方法,只需设置转换矩阵以近似窗口的像素坐标系,然后使用您的图像绘制带纹理的四边形。

【讨论】:

    【解决方案3】:

    你需要画一个四边形:

    • 一个特定的 ModelViewProjection 矩阵,它将把它放在你想要的位置(正如 Nicol 所说,不再有“当前”矩阵)
    • 一个简单的顶点着色器,将使用所述矩阵来实际变换顶点
    • 对纹理进行采样的简单片段着色器
    • 当然还有足够的纹理坐标。

    对于初学者,请使用单位矩阵和 X 和 Y 坐标介于 0 和 1 之间的网格。

    您可能想要混合使用http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-11-2d-text/(尽管在使用的矩阵方面应该改进后者)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2012-05-12
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      相关资源
      最近更新 更多