接上一篇,讨论通过顶点绘制的一些其他的话题。
开启Backface Culling(背面剔除)
你定义三角形顶点的方式告知XNA你想让哪一面朝向相机。当绘制一个实心对象时,人们可以清楚地说出三角形的哪个面在物体的内部还是外部。要绘制必须的三角形,你可以要求XNA只绘制朝向相机的那个面,其他三角形在物体的内部被前面隐藏!但是对计算机来说事情不是那么简单。对你定义的每个三角形,你需要说明三角形是在外面还是里面,这可以通过沿逆时针方向或顺时针方向定义三角形的顶点做到这点。当定义顶点时,你需要考虑相机的位置。要绘制三角形,顶点的顺序必须以相机看来按顺时针方向递增。你可以想象一条从相机出发指向三角形中心的射线,如图下所示。如果顶点的顺序(从相机看过来!)是绕着这个中心点顺时针旋转的(左图),XNA就认为这个三角形是面向相机的,这样,三角形才会被绘制。
下图的左图显示了一根从相机出发的射线并与两个三角形相交,圆点表示射线和前面的三角形的交点。当你沿着前面的三角形的顶点增加的顺序(从0到1到2)前进时,会发现绕着圆点做顺时针旋转,这时XNA会绘制这个三角形。现在看一下射线与后面的三角形的交点,当你沿着顶点增加的顺序(从6到7到8)前进时,会绕逆时针旋转,这时XNA会将这个三角形剔除,这样处理很好,因为这个三角形位于立方体的后方,被前表面隐藏了。图5-12的右图显示了同样的立方体,但旋转了180度,这样前表面和后表面就互换了位置,相机仍位于页面的同一侧。现在如果顺着顶点6到7到8,将绕视线做顺时针旋转,这次,显卡会绘制这个三角形并剔除另一个!这正是我们想要的结果。通过这种方式,显卡知道应该剔除哪些三角形,剔除那些不朝向相机的三角形可以极大地提高程序的性能,这也是默认激活的。
虽然当绘制由实心表面组成的对象时使用剔除可以带来极大地好处,但有时你也需要将提出关闭。例如,你想创建一个只由两个三角形组成的长方形墙,从外部看效果不错,但当你进入到建筑物内部,这面墙会被剔除,导致你可以看穿这堵墙!简单的方法是使用下列代码将剔除关闭:
device.RenderState.CullMode = CullMode.None;
计算顶点缓冲中所有顶点的法线。
当绘制自定义的结构时,你会发现光照不正确。这是因为你没有指定正确的法线向量,显卡要求每个顶点都有法线信息,这样它才可以决定每个三角形获得多少光照。如果每个顶点只被一个三角形使用,你只需找到三角形的法线向量(换句话说,这个向量垂直于三角形)并将这个向量作为三个顶点的法线向量。但是在一个结构中,所有顶点被几个三角形共享。要获取平滑的效果,每个顶点需要存储周围三角形所有法线的平均值。
一般情况通过叉乘计算三角形的法线,步骤如下:
- 对于结构中的每个三角形,计算法线向量。
- 将这个向量添加到三角形的三个顶点的法线中。对所有三角形进行这个操作后,执行以下操作:
- 归一化结构中的每个顶点的法线向量。
- 大小: 9.3 KB
- 大小: 12.3 KB
分享到:
相关推荐
XNA4.0学习指南--源代码
XNA学习资料-XNA入门指南2.0,比较适合新手哈
XNA Tutorial Collision Series 1 - 2D Rectangle Collision
XNA学习资料,XNAXNA学习资料,XNAXNA学习资料,XNAXNA学习资料,XNA
一本没有翻译的英文书籍,关于XNA游戏框架开发
XNA学习指南_中文_附源代码[XNA学习必备] 菜鸟 高手 均可参考
英文版下载地址:http://disanji.net/2011/02/13/ebook-learning-xna-4-0-game-development-for-the-pc-xbox-360-and-windows-phone-7/ 本书中彩色插图下载:http://u.115.com/file/f1a55ef495 本书源代码下载:...
用于在XNA中绘制2D基本形状的库。 该库具有用于绘制像素,直线,矩形,填充矩形,圆形和圆弧的方法。 开发移至:https://bitbucket.org/C3/2d-xna-primitives
XNA4.0GameDevelopmentByExample-英文原版.zip
基于XNA开发的3D游戏源码,适合初学者!
XNA纯代码绘制3D几何图形。 XNA资源大家可以搜索我的用户名
XNA文字绘制-附件资源
学习资源\3D-xna游戏设计\XNA-3D文章.CHM
XNA4.0学习指南
XNA入门指南,,入门级 XNA入门指南 XNA入门指南
利用XNA纯代码绘制的几何图形 包括每个面都不同的颜色
XNA 4.0 学习指南。 Windows Phone 7 开发。
cocos2d-xna, Cocos2d X的XNA端口 Cocos2D-XNACocos2D-XNA是基于广泛流行和成功的Cocos2D-X引擎的2D 游戏开发引擎。 使用 Cocos2D-XNA,游戏开发者可以创建具有丰富用户体验的神奇游戏,而不会带来私有游戏库巨大的...
发出求救信号后不久,“世纪研究站”上的远程通讯突然停止。 随着军事力量的扩散越来越少,签订了自由船合同以... 勇敢的旅行者几乎不知道,在Century Station的黑暗中隐约有些可怕……[源需求] XNA Game Studio 4.0 ...