OpenGL?picking在計算機編程中是指一旦場景被渲染,確定三維(3D)場景中的對象位于屏幕上給定點的過程。它也可以指在一個點或一個框內定位多個對象。通常,OpenGL?picking用于確定屏幕上的3D對象用戶正試圖用鼠標光標進行...
OpenGL?picking在計算機編程中是指一旦場景被渲染,確定三維(3D)場景中的對象位于屏幕上給定點的過程。它也可以指在一個點或一個框內定位多個對象。通常,OpenGL?picking用于確定屏幕上的3D對象用戶正試圖用鼠標光標進行選擇。雖然此操作看起來很簡單,但OpenGL?渲染場景的方式有幾個微妙之處,會使場景變得相當復雜。此外,某些圖形卡和驅動程序中存在固有的問題,可能會導致OpenGL?拾取功能失敗并返回false結果:OpenGL拾取是指在一個三維場景中,當場景被渲染后,確定哪個對象位于屏幕上給定的點上的過程。當用戶在計算機監視器上觀看3D場景時,產生的圖像被稱為場景的渲染。場景實際上以原始形狀或多邊形的集合形式存儲在內存中,這些基本形狀或多邊形本身就是場景空間中三維點的集合。計算機使用世界坐標(有時稱為絕對坐標)來執行最基本的功能在大多數應用程序中,用戶可以將場景的視圖調到不同的角度,以便可以從不同的角度看到對象。用戶在場景中的虛擬位置稱為攝影機角度或攝影機位置。OpenGL?拾取的復雜性來自于從可能是場景中任意的位置和角度,攝像機的位置。另外,由于從人類觀眾的角度來看,渲染是真實的2D,用戶無法提供場景內部鼠標點擊的深度OpenGL?picking函數通過兩種方式解決了這個復雜的問題。第一種方法是,它不是執行一系列單獨的計算來轉換觀察者的抽象位置,然后在渲染窗口中找到一個對象,而是像正常工作時一樣渲染場景,除了不顯示用于選擇的渲染外,它只用于計算對象的正確位置。區別在于,它沒有渲染用戶可以看到的整個區域,它只渲染鼠標所在的區域,這意味著渲染的對象在技術上都是在鼠標指針所在的點上,第二個問題,即無法表示所選區域的深度,通過返回場景中鼠標坐標下的所有對象來解決。OpenGL拾取函數返回數組中的所有對象以及它們與查看器位置的距離。這允許程序在需要時快速找到最近的對象。可視化OpenGL?拾取的一種方法是想象線,在3D編程中有時被稱為光線,它從鼠標指針的位置移動到場景中,遠離觀看者的位置。光線接觸到的每個對象都被添加到一個對象數組中,以及它離觀看者的距離。這是一個非常簡單的解釋,解釋了一種形式的OpenGL?拾取是如何工作的。OpenGL?中的另一種對象拾取方法涉及到通過顏色定位對象,而且速度可以快得多。這種方法可以渲染場景,但不是對對象應用照明和紋理,而是對對象應用照明和紋理取而代之的是用一種簡單的顏色渲染。每個對象或一組對象都有自己不同的顏色。場景只在內存中渲染而不顯示,因此這不會影響用戶看到的內容而不是尋找對象之間的三維碰撞,而是返回鼠標光標所在位置的顏色,該顏色將與特定對象相關聯
-
發表于 2020-08-07 20:30
- 閱讀 ( 602 )
- 分類:電腦網絡