2017-08-15 90 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

据推测,要渲染的立方体,为不透明的固体。

这实际上是通过绘制脸部来完成的,这样可以让您看到更接近观看者的脸部。

我认为

  • 你有一个多边形绘画算法,
  • 你能计算出颜色/阴影分配给每个人脸上。

您可以诉诸两种方法:

  • 画家算法,即绘画从后到前所有面。您可以通过排列每个脸部最近顶点的深度坐标上的脸部来实现此目的。这很容易做到,但是效率有点低,因为当三张图片足够时你会画六张脸。

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