gpt4 book ai didi

c# - XNA,遮挡剔除和碰撞检测

转载 作者:行者123 更新时间:2023-11-30 17:21:08 24 4
gpt4 key购买 nike

我已经组装了一个四叉树/BSP 混合原型(prototype)来测试我正在组装的 XNA 游戏引擎中的碰撞检测和遮挡剔除。

据我了解,硬件加速为我们提供的优化之一是能够在卡上存储顶点和索引列表,因此绘制关联几何图形的调用不必为每一帧发送模型数据.

在具有很多 几何体的关卡中,您如何在 XNA 中管理它?例如,如果我在 OpenGL 中工作,我会维护一张卡中内容的列表,然后只发送需要更新的内容。然而,XNA 框架的高抽象级别似乎将其封装到我无法管理的程度。

告诉我为什么我错了,或者为什么我不应该担心。

最佳答案

在 XNA 中,图形驱动程序根据您指定的缓冲区的属性来决定您的顶点和索引缓冲区最适合位于哪个内存中。您可以做出的影响缓冲区存储位置的选择包括:

  • 是否使用动态缓冲区或普通缓冲区

“在您的游戏频繁修改顶点缓冲区的情况下,建议从 DynamicVertexBuffer 而不是 VertexBuffer 类实例化或派生缓冲区。”

  • 创建时的使用参数缓冲区

只写“表示应用程序只写入顶点缓冲区。如果指定,驱动程序会选择最佳内存位置以进行高效写入和渲染。尝试从只写顶点缓冲区读取失败。”

总结

根据您提供的有关缓冲区将如何使用的信息,图形驱动程序通常能够比您更好地决定缓冲区的位置。这是因为它知道每种类型的内存有多少可用以及该特定系统的内存性能特征。

注意:对于 xbox 上具有动态顶点和索引数据的 XNA 3.1 及更低版本,将数据存储在托管数组中并使用 DrawUserPrimitives 比使用 DynamicVertexBuffer 或 DynamicIndexBuffer 更快。

如果您最终使用了动态缓冲区,则在使用 SetData 时必须小心不要停止管道。参见 http://blogs.msdn.com/b/shawnhar/archive/2008/04/15/stalls-part-two-beware-of-setdata.aspx了解详情。

关于c# - XNA,遮挡剔除和碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com