接上一篇,讨论通过顶点绘制的一些其他的话题。
开启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
分享到:
相关推荐
10. **Shader Support**:虽然XNA不直接提供高级着色器编辑工具,但它支持 HLSL(High-Level Shader Language),允许开发者编写自定义的顶点和像素着色器,实现更精细的图形渲染效果。 通过这个“XNA4.0学习指南--...
XNA Tutorial Collision Series 1 - 2D Rectangle Collision
6. **声音和音乐**:XNA提供了处理音频的能力,可以播放音乐和音效,包括加载、控制音量、循环播放等。 7. **碰撞检测**:游戏中的交互往往需要进行碰撞检测,以判断物体是否相撞。XNA提供了基本的几何形状碰撞检测...
6. **图形渲染**:讲解如何使用SpriteBatch和Texture2D进行2D图形绘制,包括精灵的加载、绘制和动画制作。 7. **声音和音乐处理**:介绍如何使用XNA的SoundEffect和Music类来播放音频文件,包括音效和背景音乐的...
#### 三、学习XNA所需技能 - **C#编程基础**:虽然本书不是编程入门书籍,但对于C#有一定的了解是非常必要的。C#是XNA开发的主要语言,熟悉C#语法和编程技巧对于理解XNA框架至关重要。 - **数学基础知识**:游戏...
**XNA学习指南详解** XNA,全称为Xbox Next Generation APIs,是由微软推出的一款用于游戏开发的框架,特别适合初学者和有经验的游戏开发者。它提供了完整的工具集,包括编程环境、图形库和音频处理功能,使得创建...
本文将深入探讨如何使用XNA框架通过纯代码来绘制3D对象,从而帮助你理解3D图形编程的基本原理。 首先,XNA框架基于DirectX,它提供了丰富的图形处理功能。要开始绘制3D对象,你需要了解几个关键概念: 1. **坐标...
XNA利用C#编程语言,结合DirectX图形库,使得游戏开发更加容易上手,尤其对于初学者来说是个很好的学习平台。 【国际象棋】是一种双人对弈的策略棋类游戏,起源于6世纪的印度,后来在欧洲发展并逐渐演变成现代的...
开发团队已经将项目的维护移至Bitbucket平台(https://bitbucket.org/C3/2d-xna-primitives),这意味着社区可以更方便地参与贡献,修复问题,或者添加新功能,进一步增强了这个库的生命力和适应性。 在实际应用中...
通过以上知识点的学习,不仅可以掌握XNA的基本使用方法,还能深入了解游戏开发的核心技术,如2D/3D渲染、粒子系统、模型动画等。对于初学者而言,这些知识是非常宝贵的,可以帮助他们快速上手并逐步深入游戏开发领域...
对于3D几何图形,XNA提供了`Model`和`Mesh`类,但如果我们想控制每个面的颜色,那么直接使用顶点数据和索引数据进行绘制更为灵活。我们可以创建一个`VertexBuffer`来存储顶点信息,包括位置、法线和颜色,然后创建一...
XNA Shader编程是现代游戏开发的重要组成部分,通过对HLSL的学习和实践,开发者可以掌握复杂的光照算法、纹理映射等技术,从而实现高质量的视觉效果。本文档提供了从基础知识到具体应用场景的全面指南,帮助读者快速...
在“XNA游戏编程学习总结2D与3D实现-2D源码”中,我们可以深入探讨XNA在2D游戏开发中的应用。 1. **XNA框架基础** - XNA框架包含了Game类:它是所有游戏项目的基础,包含了游戏循环、渲染、更新等核心功能。 - ...
1. **易用性**:XNA采用C#语言和.NET框架进行开发,这让很多开发者能够快速上手,无需深入学习复杂的C/C++特性。 2. **跨平台性**:XNA具有良好的跨平台支持能力,开发者可以在不同平台上轻松移植游戏,无需大量修改...
6. **绘图生命周期**:在WinForms的`Paint`事件中,你需要调用`GraphicsDevice.Clear`来清除画布,然后调用XNA的绘制方法(如SpriteBatch或Effect)进行渲染。最后,确保调用`base.OnPaint(e)`来完成控件的基本绘图...
### XNA 4.0 学习指南 #### 一、XNA 4.0 新特性 XNA 4.0 是微软推出的一款强大的游戏开发框架,它支持跨平台的游戏开发,包括PC、Xbox 360 和 Windows Phone 7。在XNA 4.0中,微软对许多方面进行了改进,包括项目...
XNA文字绘制-附件资源