如何隐藏/不绘制模型的一部分

时间:2011-11-03 05:34:56

标签: c# 3d xna-4.0

我有一个正在旋转的动画模型。

我想隐藏/不绘制Y< 0

的模型的任何部分

我能做到的方法是什么?

思路:

1)在y = 0

的正下方绘制一个巨大的矩形框

2)调整相机矩阵,使y <0在剪裁平面之外(但我不知道如何)

有人能指出我正确的方向吗? =)

2 个答案:

答案 0 :(得分:0)

听起来你需要介绍MSDN Bounding Frustum

以下是来自Nic's GameDev Site的精彩教程。

答案 1 :(得分:0)

纯粹的数学方法:

  • 不要绘制y均小于0的多边形。
  • 绘制y大于或等于0的多边形。
  • 使用y = 0平面剪切其余多边形并绘制它们。

如果构成模型的多边形是三角形,剪切它们是非常简单的。您需要剪切与y = 0平面相交的两侧,并将这两个边与切割平面的交点替换为y小于0的原始顶点。

使用线方程:
(x-x1)=(x2-x1)*(y-y1)/(y2-y1)
(z-z1)=(z2-z1)*(y-y1)/(y2-y1)

其中1和2是由y = 0平面剪切的边的顶点。将它们的坐标(x1,y1,z1,x2,y2,z2)和y = 0代入方程,得到交点的x和z。使用此点的坐标而不是顶点1或2(以y <0为准)。

如果多边形是纹理贴图,则需要重新计算从裁剪中获得的顶点的纹理坐标。你以同样的方式做到这一点。