opengl es的射線拾取

       在opengl中關於拾取有封裝好的選擇模式,名字棧,命中記錄,實現拾取的功能,相對容易一些。可是到了opengl es裏面就比較倒黴了,由於opengl es是opengl的簡化版,不少功能都被去掉了。沒辦法,要想實現拾取的功能只有本身動手。目前比較成熟並且相對較簡單的拾取方案是:射線相交拾取。android

      先介紹一下射線相交拾取的原理:開發

      (1):將用戶在屏幕上點擊的座標(X, Y),轉換爲歸一化座標(Xn, Yn)博客

      (2):考慮到透視投影的可視錐有一個近平面和一個遠平面,因此能夠將剛纔的歸一化座標轉換爲兩個歸一化座標,一個的z值在近平面上,z值爲-1;另外一個的z值在遠平面上,z值爲1原理

      (3):計算出透視投影的逆矩陣,用這個逆矩陣分別乘以兩個歸一化座標,相乘以後獲得的值分別除以w,也就是作透視除法,這樣就獲得了在虛擬空間中的兩個點。opengl

      (4):用上一步計算出的虛擬空間中的兩個點,生成一條射線。生成

      (5):用這條射線和其餘的物體作相交檢測。爲了便於檢測,能夠將要檢測的物體當成一個球體,這樣射線和球體之間是否相交就比較容易檢測了。封裝

 

本來想本身在這篇博客中,將全部的步驟都講的詳細透徹,可是,真正動手才發現本身水平不夠。既然這樣就向你們推薦一處好的資料吧,《opengl es應用開發實踐指南 android卷》的第九章,講的很精彩。

相關文章
相關標籤/搜索