OpenGL選擇模式中的問題

來源:互聯網
上載者:User

  ---------作者 熊斌

    OpenGL中的互動功能中最重要的一個是拾取(或者叫選擇),但是我們經常會碰到開啟了選擇模式,但是確在螢幕上選不到物體,或者是點螢幕上任何地方都有物體被選中的情況....

     這是為什麼呢?

   看看使用選擇模式的過程是怎麼樣的:

   1.在繪圖函數中給圖元命名

   2.在滑鼠響應中調用你的選擇處理函數

   3. 在處理函數中設定選擇緩衝區,

   4.###### 最重要的地方 #########

    1)  調用矩陣操作函數,切換到投影矩陣模式,然後將其壓棧,共置為單位矩陣

          glMatrixMode(GL_PROJECTION);
          glPushMatrix();
         glLoadIdentity();

   2) 產生你的拾取矩陣

        glGetIntegerv(GL_VIEWPORT, viewport);
        gluPickMatrix(point.x, viewport[3] - point.y, 2,2, viewport); 

      要注意上面的函數的操作對象是投影矩陣, 所以調用它以後必須緊跟著下面的函數 設定與渲染模式下相同的透視投影矩陣,中間千萬不要再幹擾投影矩陣了,否則你就永遠別想得到正確的選取了

   3) 設定與渲染模式下相同的透視投影矩陣

     gluPerspective(m_dFovy, (double)viewport[2]/(double)viewport[3],NEARPLANE, FARPLANE);

    到此位置要進行的投影矩陣的準備工作就完成了

5. 切換渲染模式 到SELECT模式

    glRenderMode(GL_SELECT);

6.渲染並搜集點擊

    RenderScene();

    hits = glRenderMode(GL_RENDER);

 

  根據上面的過程可以看出,要正確的使用選擇模式,關鍵在於設定正確的投影矩陣,  gluPickMatrix ,gluPerspective 兩個函數所設定的投影矩陣的值不能被破壞,否則你就無法得到正確的結果了.

  一般情況下,如果出現選擇異常,則需要檢查投影和模型視圖矩陣的超作,比如PushMatrix後有沒有PopMatrix, 是不是

對這些矩陣進行了不正確的改動.

   以上為本人實踐經驗,如果有錯,歡迎指正.

   協助俺點俺部落格中左邊的圖圖咯........ 

   不要看了就跑(太自私了吧)......

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.