【发布时间】:2013-01-24 21:53:45
【问题描述】:
我有一些代码在 glut 窗口中使用 PyOpenGL 显示图形。在视网膜 Macbook Pro 上,此窗口以低分辨率模式显示,一个 OpenGL 像素由四个物理像素表示。如果它以完整的原始分辨率显示会更好。
我的问题
有什么方法可以在 Retina 显示器上使用 glut 或其他方式在 Python 中获得原生分辨率的 OpenGL 上下文?
问题示例
下面是一个 PyOpenGL 程序的最小工作示例。它没有什么特别之处——任何工作的 PyOpenGL 代码都会出现这个问题。这是屏幕截图的放大细节。请注意,构成白色三角形的像素是 OS X 小部件像素大小的四倍。这是不是专门为 Retina 设备设计的程序的默认设置。我想知道如何为 PyOpenGL 程序关闭它。
代码如下:
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
import os
def initFunc():
glDisable(GL_DEPTH_TEST)
glClearColor(0.0, 0.0, 0.0, 0.0)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0.0, 400.0, 0.0, 400.0)
def displayFunc():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0, 1.0, 1.0)
glBegin(GL_TRIANGLES)
glVertex2f(10.0, 10.0)
glVertex2f(10.0, 100.0)
glVertex2f(100.0, 100.0)
glEnd()
glFlush()
if __name__ == '__main__':
glutInit()
glutInitWindowSize(400,400)
glutCreateWindow("GL test")
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutDisplayFunc(displayFunc)
initFunc()
os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
# prevent GL window from appearing behind other applications
glutMainLoop()
【问题讨论】:
-
你应该发布一些代码。
-
您所追求的内容记录在 developer.apple.com/library/mac/#documentation/… 中,更直接地记录在 developer.apple.com/library/mac/#documentation/graphicsimaging/… 中。现在您需要将其映射到 Python。
-
@Nathaniel 所以问题是另一个问题。似乎您不知道需要什么,现在您只需知道如何使用由
from AppKit import NSOpenGLView获得的NSOpenGLView。 -
@mmgp 为我草率的评论深表歉意。我根本不知道可以从 Python 调用这个 AppKit 的东西,所以我认为“将它映射到 Python”你只是意味着“以某种方式在 Python 中做同样的事情”。我将很快研究 AppKit 模块。 (如果您可以发布一个更详细的版本作为答案,那就太棒了。)
-
@Nathaniel 我可以提供一个答案,但我没有现成的视网膜 macbook 来测试它。
标签: python osx-lion glut retina-display pyopengl