填充立方体(背面剔除算法)?

时间:2017-08-15 09:04:30

标签: c++ algorithm qt 3d cube

我想填补我的立方体。我发现了背面剔除算法。你能解释一下它是如何工作的吗?我在向量中有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;

1 个答案:

答案 0 :(得分:2)

据推测,您希望将立方体渲染为不透明的实体。

这确实是通过绘制面部来完成的,这样您就可以看到面部更接近观察者。

我认为

  • 你有一个多边形绘画算法,
  • 您可以计算分配给每张脸的颜色/阴影。

您可以使用两种方法:

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

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