PyopenGL glReadPixels
PyopenGL glReadPixels
我尝试使用 glReadPixels 方法对屏幕中的一个简单三角形进行颜色编码,只是没有任何辅助渲染功能等,但没有给出好的结果。代码:
import pygame as pg
from OpenGL.GL import *
pg.display.set_mode((500,500),pg.OPENGL)
glClearColor(0.5,0.0,0.5,0.0)
done=0
def first():
glColor3f(0.5,0.6,0.7)
glBegin(GL_TRIANGLES)
glVertex(0.0,0.0,0.0)
glVertex(1.0,0.0,0.0)
glVertex(0.0,1.0,0.0)
glEnd()
cl=0
clock=pg.time.Clock()
while not done:
for event in pg.event.get():
if event.type==pg.QUIT: done=1
elif event.type==pg.MOUSEBUTTONDOWN:
pos=pg.mouse.get_pos()
color=glReadPixels(pos[0],pos[1],1,1,GL_RGB,GL_FLOAT)
print color, pos[0], pos[1])
glClear(GL_COLOR_BUFFER_BIT)
first()
pg.display.flip()
clock.tick(20)
pg.quit()
但它总是给出相同的颜色输出:
[[[ 0.50196081 0. 0.50196081]]] 288 217
我该如何解决?
你的主要问题是 glReadPixels 接受左下原点而 pygame 给出左上角。
首先,您应该始终保存您的 pygame Surface
(我将很快说明原因)。所以:
window = pg.display.set_mode((500,500),pg.OPENGL)
现在您可以访问 window.width
和 window.height
。所以现在你的 glReadPixels
将得到正确的位置:
color=glReadPixels(x,window.height-y,1,1,GL_RGB,GL_FLOAT)
PS:如果您确实想要 最近的 颜色,您应该将颜色检测放在 first()
之后 pg.display.flip()
之前(OpenGL 始终绑定到后台缓冲区(除非您另有指定(但您不想这样做)))
编辑:pg,不是 py
编辑:我错了,它以像素为单位。我的错。
我尝试使用 glReadPixels 方法对屏幕中的一个简单三角形进行颜色编码,只是没有任何辅助渲染功能等,但没有给出好的结果。代码:
import pygame as pg
from OpenGL.GL import *
pg.display.set_mode((500,500),pg.OPENGL)
glClearColor(0.5,0.0,0.5,0.0)
done=0
def first():
glColor3f(0.5,0.6,0.7)
glBegin(GL_TRIANGLES)
glVertex(0.0,0.0,0.0)
glVertex(1.0,0.0,0.0)
glVertex(0.0,1.0,0.0)
glEnd()
cl=0
clock=pg.time.Clock()
while not done:
for event in pg.event.get():
if event.type==pg.QUIT: done=1
elif event.type==pg.MOUSEBUTTONDOWN:
pos=pg.mouse.get_pos()
color=glReadPixels(pos[0],pos[1],1,1,GL_RGB,GL_FLOAT)
print color, pos[0], pos[1])
glClear(GL_COLOR_BUFFER_BIT)
first()
pg.display.flip()
clock.tick(20)
pg.quit()
但它总是给出相同的颜色输出: [[[ 0.50196081 0. 0.50196081]]] 288 217 我该如何解决?
你的主要问题是 glReadPixels 接受左下原点而 pygame 给出左上角。
首先,您应该始终保存您的 pygame Surface
(我将很快说明原因)。所以:
window = pg.display.set_mode((500,500),pg.OPENGL)
现在您可以访问 window.width
和 window.height
。所以现在你的 glReadPixels
将得到正确的位置:
color=glReadPixels(x,window.height-y,1,1,GL_RGB,GL_FLOAT)
PS:如果您确实想要 最近的 颜色,您应该将颜色检测放在 first()
之后 pg.display.flip()
之前(OpenGL 始终绑定到后台缓冲区(除非您另有指定(但您不想这样做)))
编辑:pg,不是 py
编辑:我错了,它以像素为单位。我的错。