2014-11-05 238 views
1

我想开发一个应用程序使用OpenGL 4.0和Qt 5.3,我想实现颜色选择QGLWidget中选择不同的模型。 所以基本上,当我发现一个鼠标点击,我:glReadPixels似乎在错误的坐标Qt

  1. 获取鼠标
  2. 的位置渲染场景
    1. 设置一个白色背景(glClearColor然后glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    2. 我结合我的着色器程序
    3. 我绘制我的模型(每一个都有不同的颜色和自己的变换矩阵)
    4. 发布我的着色器程序
  3. 呼叫glFlushglFinish,以确保我已经完成渲染调用glReadPixels
  4. 呼叫glReadPixels(mouse.x, window_height - mouse.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data) 数据是一个GLubyte数组长度的4

我的程序运行“以及”前,但是当我想要选择一个对象,我必须点击比模型更真实的位置。我试图交换缓冲区,以检查模型是否呈现在正确的位置,是的,他们是... 我也尝试呼吁glPixelStorei(GL_PACK_ALIGNMENT, x)与x = 1,2,4,8之前glReadPixels,但它似乎并没有影响它。

+1

不要做“glFlush和glFinish”,因为OpenGL将在您下载数据之前完成所有命令。 – 2014-11-05 10:37:37

+1

关闭一个错误? 'window_height - mouse.y - 1',因为'window_height'在窗口之外。也可能是QTs鼠标原点的问题(例如,您得到的是与父元素相关的问题)。尝试打印坐标并尝试点击'0,0'。 – jozxyqk 2014-11-05 11:06:54

回答