代码之家  ›  专栏  ›  技术社区  ›  3Dave

XNA,遮挡剔除和碰撞检测

  •  3
  • 3Dave  · 技术社区  · 14 年前

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

    在一个有 许多 关于几何学,在XNA中如何处理这个问题?例如,如果我在OpenGL中工作,我会维护一个卡中内容的列表,然后只发送需要更新的内容。然而,XNA框架的高抽象级别似乎将其封装到了我无法管理的程度。

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Community THelper    4 年前

    在XNA中,图形驱动程序根据指定的缓冲区属性决定顶点和索引缓冲区的最佳位置。可以对缓冲区的存储位置进行影响的选择包括:

    • 是使用动态缓冲区还是普通缓冲区

    在游戏经常修改顶点缓冲区的情况下,建议实例化缓冲区或从DynamicVertexBuffer派生缓冲区,而不是VertexBuffer类

    • 创建时的usage参数 缓冲器

    表示应用程序只写入顶点缓冲区。如果指定,驱动程序将选择最佳内存位置,以实现高效的写入和呈现。尝试从只写顶点缓冲区读取失败。“

    摘要

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

    注意:对于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

    推荐文章