2014-02-13 67 views
0

目前我正在做3D投影和渲染的第一次經歷。因此,我使用lövelua(ik,不是3D的最佳平臺),並且我可以完美呈現所有多邊形(僅三角形)。因爲按照到攝像機的距離排列多邊形表是一項任務,這需要花費大量時間,因此我正在爲此實現一個z緩衝區。但我不太清楚如何做到這一點。我知道這些原理,但是如何找出三角形中某個點與相機位置的距離? 我目前的解決方案聽起來像這樣:實現z緩衝區的好方法

translate edge points of the triangle to 2D points -> 
create polygon of those -> 
for every pixel in the polygon: -> 
translate 2D point back to 3D vertex (somehow) -> 
calculate distance of vertex to camera position -> 
if distance is bigger than zbuffer entry, overwrite zbuffer entry and 
set pixel to polygon color 

這聽起來確實效率低下。我如何加快速度?有沒有人有更好的方式來實現zbuffering?

+0

我認爲你的愛意味着love2d,如果不是的話,可以刪除該標籤 – Schollii

回答

1

如果您要實現軟件Z緩衝區,則不需要對多邊形進行排序,只有那些具有alpha混合並且不能包含在Z-Buffer technique中的。

將頂點轉換到相機空間(using view matrix calculations)後,您將獲得每個頂點的detph Z值,然後它會出現polygon rasterization,最終爲您提供每個像素的Z深度。

現在是每次在屏幕上寫入像素時進行Z測試的時間;如果像素位於當前像素的前面,則寫入,否則什麼也不做。

性能說明: - 請注意,你不需要使用多邊形Z緩衝區時 -Be小心,當你說「頂點到攝像機位置的距離」。不要犯任何距離計算,矩陣排序轉型將更加高效地爲您提供您需要的價值。