gpt4 book ai didi

opengl - mousePressed 中的 glReadPixels

转载 作者:行者123 更新时间:2023-12-02 06:48:48 29 4
gpt4 key购买 nike

当用户点击它时,我试图获取 JOGL 中像素的颜色。如果我将以下代码放入显示方法中(来自GLEventListener),它就可以正常工作。

FloatBuffer buffer = FloatBuffer.allocate(4);

gl.glReadBuffer(GL3.GL_FRONT);
gl.glReadPixels(10, 10, 1, 1, GL3.GL_RGBA, GL3.GL_FLOAT, buffer);
float[] pixels = new float[3];
pixels = buffer.array();
float red = pixels[0];
float green = pixels[1];
float blue = pixels[2];
System.out.println(red + ", " + green + ", " + blue);

但是,如果我将代码放入 mousePressed 方法中,则在检查是否成功时会收到无效操作错误,并且颜色返回黑色 (0, 0, 0)。

有没有办法让它在我的 mousePressed 方法中工作,或者我必须存储选定的像素以及一个 bool 值来指示选择(这样我就不会每帧调用 glReadPixels )并进行选择在显示方法中?

P.s. (x,y) 坐标 = (10,10) 只是为了确保选择确实在我的窗口内(确实如此,因为像素颜色在显示方法中正确显示)。

最佳答案

OpenGL 上下文一次只能在一个线程中处于事件状态,如果鼠标按下的事件处理发生在不同的线程上,那么您当时将无法从 OpenGL 正确查询信息。一般来说,我会错误地在显示函数中读取像素值。如果您想避免每帧读取像素,您可以跟踪上次读取的位置,并且仅在读取位置发生更改时才调用 glReadPixels

正如 datenwolf 提到的,如果需要的话,可以停用和激活上下文以跨多个线程访问它。

关于opengl - mousePressed 中的 glReadPixels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8329663/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com