【问题标题】:OpenGL 2D pixel perfect renderingOpenGL 2D像素完美渲染
【发布时间】:2013-12-21 15:04:10
【问题描述】:

我正在尝试渲染 2D 图像,以便它完全覆盖整个窗口。
对于我的测试,我设置了一个窗口,使客户区正好是 320x240,纹理也是这个大小。
我将正交投影设置为以原点为中心的 1x1x1 立方体,并将视口设置为 0,0,320,240
纹理被映射到以原点为中心的大小为 1x1 的四边形。
着色器是执行 ProjModelViewPos

的普通着色器

我创建了一个测试纹理,可以让我验证渲染,我看到了我无法摆脱的一致差异。

渲染的结果总是有些拉伸,将一些像素放在窗口的右边,并且似乎总是相同的数量,不管窗口大小(相同数量的像素,如果我替换320x240 由另一个值)

我认为它与窗口装饰宽度有关,但我不确定如何修复它,因此解决方案不是特定于平台/机器的。

编辑:
代码是使用 freeglut 和 glew 的直接 C++
已验证如果我调用 glutFullScreen 不会发生这种情况,因此它肯定与窗口模式有关。

【问题讨论】:

  • 找到问题来源。我在初始化的早期设置了视口,一些库函数将其重置为更小的视口。在渲染循环中添加 glViewport 调用解决了这个问题。

标签: c++ opengl textures 2d rendering


【解决方案1】:

注意:这是在添加语言标签之前回答的

不确定您使用的是什么模块。 如果您使用 Pyglet,最简单的方法是:

import pyglet

width = 320
height = 240
window = pyglet.window.Window(width, height)
image = pyglet.resource.image('image.png')

@window.event
def on_draw():
    window.clear()
    image.blit(0, 0, 0, width, height)

pyglet.app.run()

您可以在此处找到更多相关信息: http://www.pyglet.org/doc/programming_guide/size_and_position.html http://www.pyglet.org/doc/programming_guide/displaying_images.html

【讨论】:

  • 谢谢,但我使用的是 C++,而不是 python
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多