第三章 第六节 背面剔除

背面剔除

背面剔除确保只有面向摄像机的三角形才会被渲染。当启用背面剔除时,所有背向我们的三角形都不可见。三角形的正面朝向有两种方法来定义。第一种方法是三角形的顶点指定成逆时针方向。第二种方法是用面的法线向量指向的方向来定义。

 

面法线向量的计算参见列表3-13。数组V表示定义三角形的三个顶点。变量N是计算结果法向向量。

 

列表 3.13:面法线的计算

// Calculate the vector from the second point back to the first point.

V1.x = V[0].x V[1].x

V1.y = V[0].y V[1].y

V1.z = V[0].z V[1].z  

// Calculate the vector from the third point back to the second point.

V2.x = V[1].x V[2].x

V2.y = V[1].y V[2].y

V2.z = V[1].z V[2].z

 

// Calculate the magnitude of each vector.

mag1 = sqrt( V1.x * V1.x + V1.y * V1.y + V1.z * V1.z )

mag2 = sqrt( V2.x * V2.x + V2.y * V2.y + V2.z * V2.z )

 

// Normalize both vectors.

V1.x /= mag1

V1.y /= mag1

V1.z /= mag1

V2.x /= mag1

V2.y /= mag1

V2.z /= mag1

 

// Compute the cross product of the two vectors which is the normal of the vectors.

N.x = V1.y * V2.z V1.z * V2.y

N.y = V1.Z * V2.y V1.x * V2.z

N.z = V1.x * V2.y V1.y * V2.x

 

只有当我们编程创建3D对象才会需要计算面的法线向量。建模软件(译注:例如3DMaxMaya等等建模软件)通常在存储的数据格式中包含了面的法线信息。法线向量不仅仅用于确定面的光照特征;当知道面的法线所指的方向时,我们就可以计算出光打大面上的入射角。

 

我们已经建立了背面剔除的规则,并且知道怎么判定了。因为背面剔除是默认的,为什么我们需要关掉它?通过对某些对象关掉背面剔除,我们可以使一个2D对象两边可见。一个使用了此技术的例子是赛跑终点线上面飘着的彩带(checkered banner)。既然此彩带的两边看起来一摸一样,我们没有理由把同样的一些三角形作为双重用途,使两边看起来一样。关闭背面剔除的代码如下:

Device.SetRenderState(RS.CullMode, Cull.None);

我们必须确保在渲染了那样的对象后把剔除状态还原到之前的值。对任何其他的渲染状态也需要这样做。忘记还原渲染状态的话,屏幕上可能会出现一些奇怪的东西(Forgetting to restore rendering states is a sure recipe for strange things happening on the screen)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值