2017-08-15 38 views
-5

我想填充我的魔方。我找到了背面剔除算法。你能解釋我是如何工作的嗎?我在矢量8分:填充立方體(背面剔除算法)?

CHECK HERE

也許你知道另一個更簡單的算法或解釋我,我應該與背面剔除嗎?

wallX[0] - 點0; wallX[1] - 點1; wallX[2] - 從圖像點2)

代碼拳頭壁:

x1[0]=wallX[1]-wallX[0]; 
y1[0]=wallY[1]-wallY[0]; 
z1[0]=wallZ[1]-wallZ[0]; 

x2[0]=wallX[2]-wallX[0]; 
y2[0]=wallY[2]-wallY[0]; 
z2[0]=wallZ[2]-wallZ[0]; 

x3[0]=0; 
y3[0]=0; 
z3[0]=1000; 

wall1={y2[0]*z1[0]-z2[0]*y1[0], z2[0]*x1[0]-x2[0]*z1[0], x2[0]*y1[0]-y2[0]*x1[0]}; 
wall1*={X3, Y3, Z3}; 
if(wall1[2]>0) cout<<"wall is watching"<<endl; 
+0

您是否曾嘗試在發佈之前研究背面剔除自己? – xander

+0

你用什麼來渲染魔方?通常OpenGL或DirectX已經包含了多種剔除算法,你不必親自編寫。 – xander

+0

我不能使用OpenGL或DirectX,我必須編寫算法來填充我的多維數據集。我必須自己寫。 – urusmi

回答

2

據推測,要渲染的立方體,爲不透明的固體。

這實際上是通過繪製臉部來完成的,這樣可以讓您看到更接近觀看者的臉部。

我認爲

  • 你有一個多邊形繪畫算法,
  • 你能計算出顏色/陰影分配給每個人臉上。

您可以訴諸兩種方法:

  • 畫家算法,即繪畫從後到前所有面。您可以通過排列每個臉部最近頂點的深度座標上的臉部來實現此目的。這很容易做到,但是效率有點低,因爲當三張圖片足夠時你會畫六張臉。

  • 背面剔除,即忽略其法向矢量的深度分量指向後方的面。只是一點點矢量微積分。