首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyopenGL glReadPixels

PyopenGL glReadPixels
EN

Stack Overflow用户
提问于 2015-04-25 23:00:00
回答 1查看 1.5K关注 0票数 0

我尝试使用glReadPixels方法在屏幕上对一个简单的三角形进行颜色编码,只是没有任何次要的呈现函数等等,但是没有给出好的结果。代码:

代码语言:javascript
复制
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]288217我怎样才能修好它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-26 00:17:11

您的主要问题是glReadPixels接受左下角的原点,而吡咯则给出左上角。

首先,您应该始终保存您的游戏Surface (因为我即将演示的原因)。所以:

代码语言:javascript
复制
window = pg.display.set_mode((500,500),pg.OPENGL)

现在您可以访问window.widthwindow.height了。所以现在您的glReadPixels将得到正确的位置:

代码语言:javascript
复制
color=glReadPixels(x,window.height-y,1,1,GL_RGB,GL_FLOAT)

PS:如果你真的想要最近的颜色,你应该把你的颜色检测放在first()之后,但在pg.display.flip()之前(OpenGL总是绑定到后台缓冲区(除非你指定了其他颜色(但你不想))

编辑: pg,而不是py

编辑:我错了,它以像素为单位。是我的错。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29871685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档