摘要:
问题 你想检测一根3D射线是否与模型发生碰撞,如果你想进行一个最高细节的碰撞检测这是必须的,可以作为教程4-11的拓展进行子弹是否与物体发生碰撞的高细节碰撞。如下一个教程所示,这可以用来检测鼠标是否在模型上。 而且,这个方法也可以用来进行模型之间的最高精度的检测,这是因为对应一条射线的每一个三角形的边缘可以用来进行与另一个模型的碰撞检测。 这个教程会处理最复杂的情况,允许模... 阅读全文
posted @ 2011-01-16 20:08
AlexCheng
阅读(647)
评论(0)
推荐(2)
摘要:
问题 当在地形上移动一个汽车模型时,使用教程4-2你可以调整车的高度,使用教程5-9你可以找到位于汽车下面的地形的高度。但是,如果你没有根据车下面的坡度正确使车身发生倾斜,那么在起伏不平的地形上效果看起来不会很好。 你想正确地放置和倾斜汽车模型使之可以匹配地形的起伏。 解决方案 这个问题可以分成四个部分: 首先,你想找到模型四个轮胎的最低顶点的位置。 其次,你想获取这四个顶... 阅读全文
posted @ 2011-01-16 19:49
AlexCheng
阅读(500)
评论(0)
推荐(0)
摘要:
问题 要让模型处理器可以将对象存储在模型中并传递到XNA项目,XNA提供了模型的Tag属性。从教程4-13,4-14和4-15中可以看到Tag属性对于存储一个相同类型的数组是很有用的,例如Vector3的数组或Triangle的数组。但很多情况中,你想传递多个对象,例如同时传递Vector3集合和模型的包围盒。 解决方案 定义一个自定义类,这个类存储所有你想传递的对象。在你的模型处理器中,创... 阅读全文
posted @ 2011-01-16 19:44
AlexCheng
阅读(292)
评论(0)
推荐(0)
摘要:
问题 你想访问模型中每个顶点的位置。但你想要一个三角形对象的数组,每个三角形对象包含三个Vector3向量,而不是想前面的教程中那样将所有Vector3放在一个大数组中。 或者,更普遍的情况,你想将一个自定义内容处理器类对象传递到XNA程序中,但内容管道无法知道应该如何串行化和反串行化这个类对象,所以你必须定义自己的TypeWriter和TypeReader。 解决方案 本教程的代码主要建... 阅读全文
posted @ 2011-01-16 19:38
AlexCheng
阅读(308)
评论(0)
推荐(0)
摘要:
问题 前面的教程中让你可以访问模型的所有顶点的相对于模型初始位置的位置。但是,如果你想对模型的一部分施加动画,例如,旋转一个人的手臂,那么你还想变换手臂,手,手指的位置。使用上一个教程的结果是不可能的,因为Vector3集合不包含Vector3属于模型哪个部分的信息,只包含相对于模型初始位置的信息。 解决方案 模型的独立变换部分是存储在ModelMeshe中的。ModelMesh有一个Tag... 阅读全文
posted @ 2011-01-16 19:34
AlexCheng
阅读(480)
评论(0)
推荐(0)
摘要:
问题 在XNA项目中,你想实时访问每个顶点的位置,如果你需要非常精确的碰撞检测或想找到模型上的特定点时,这一步非常有用。 虽然你可以使用常规代码访问模型的VertexBuffer,但因为顶点数据需要从显卡传递到系统内存,所以这种方法需要笨拙的代码并会拖慢程序。 解决方案 通过提取你想要的数据并把它们存储在模型的Tag属性中扩展默认模型处理器。本教程中,你将编写一个自定义模型处理器创建一个数... 阅读全文
posted @ 2011-01-16 19:31
AlexCheng
阅读(318)
评论(0)
推荐(0)
摘要:
问题 你想使用一个自定义内容处理器改变模型的effect而不是实时处理。通过这种方式,模型可以正确地加载到XNA项目中,而无需在实时保存原始effect中的所有纹理和其他信息。 注意:如果你想学习如何扩展默认模型处理器,最好先看下一个教程。 解决方案 扩展默认模型处理器并重写ConvertMaterial方法,这个方法被模型中的每个MaterialContent调用,把这个方法重写将所有的... 阅读全文
posted @ 2011-01-16 19:26
AlexCheng
阅读(249)
评论(0)
推荐(0)
浙公网安备 33010602011771号