2014-11-05 237 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

回答