我需要創建此軟件光柵化程序,該投影(P
),視圖(V
)和模型(M
)矩陣可以創建點雲的2D圖像( pc
)以位圖格式(單色位圖)從給定的觀點來看。使用視錐體進行3D到2D投影具有翻譯問題
我得算算下來(和東西似乎工作在大多數情況下):
- 變換的點雲的點
pc' = (P x V x M) x pc
(注意,點雲已經在均相體系) - 對於每個點,通過其
w
(同時小心丟棄具有w
接近於零的點。 - 丟棄落在視錐外部的點分割的所有組件(通過使用該方法從
P
提取平截頭體平面中描述here) - 變換
x
和y
使用(x + 1) * imageWidth/2
和(-y + 1) * imageHeight/2
(要有正確的y座標),每個點到屏幕座標的座標。 - 使用
(int)y * imageWidth + (int)x
(帶有邊界檢查)將產生的x
和y
座標映射到位圖線性索引。
看來,一切工作正常:我得到的確切位圖,如果我用OpenGL渲染它,由任意四元數旋轉點雲仍然會給出有效的結果。
事情很好,直到我有一個翻譯組件在矩陣M
!只要我有最輕微的平移量,圖像就會中斷:點雲會嚴重失真(彷彿已經應用了非仿射變換)。沿着哪個方向應用翻譯並不重要,任何翻譯都會攪亂一切,直到點雲不再被識別。起初我雖然我的模型矩陣轉置(導致非仿射變換),但似乎並非如此。
我可以發佈一些代碼,如果需要的話,但鑑於上述概述,我錯過了什麼?有什麼特別的考慮可能需要?
無論如何看起來好的看看這些相關的QA:[瞭解4x4均勻變換矩陣](http://stackoverflow.com/a/28084380/2521214)和[數學計算簡單圖形管道](http:// stackoverflow .com/a/21100338/2521214),所以你可以比較。矩陣的順序是OpenGL風格,因此您還需要使用相同樣式(列主要)中的矩陣,否則操作將表現不同,因爲轉置矩陣是它們的反轉矩陣。我會將矩陣渲染爲座標系軸向量,以查看翻譯後它們是否正常。問題的視頻將有助於 – Spektre
@Spektre謝謝,我會看看那些。內心的感覺說問題是觀看視錐體檢查......今天再次檢查,奇怪的是,翻譯後,相機後面的點仍然看起來不錯!另外,用一些人造球體進行測試,它們都很好看。我有一種感覺,翻譯不是在移動視角。奇怪的原因是,當在貼出的鏈接中使用該方法時,它說如果'P'矩陣是PxVxM,那麼在模型空間中計算平截體面... 有沒有辦法檢查點是否落在視錐體內而不提取飛機? – M2X
我會嘗試改變點的顏色......對於'z zfar'使用'blue'和對其餘的''綠色'使用'這樣你應該看到剪輯是好的...你也可以疊加Frustrum多邊形... –
Spektre