首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >物理引擎所需的建议

物理引擎所需的建议
EN

Stack Overflow用户
提问于 2011-04-17 23:07:54
回答 2查看 1.1K关注 0票数 1

我最近开始了一个项目,构建一个物理引擎。我希望你能给我一些关于文档和/或最好的技术的建议。

首先,我已经看到,对于手头的任务,强烈推荐使用Game-Physics-Engine-Development,我想知道您是否可以给我第二个opinion.Should,我明白了?此外,在浏览亚马逊时,我偶然发现了Game Engine Architecture,因为我想为游戏构建物理引擎,所以我想这也是一本不错的读物。

其次,我知道模拟物理是高度计算密集型的,所以我想使用CUDA或OpenCL.Right,现在我倾向于OpenCL,因为它可以在NVIDIA和ATI chipsets.What上工作,你们有什么建议吗?

PS:我将在Linux上的C++中实现它。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-18 01:32:52

以下是关于CUDA或OpenCL选择的答案。我没有推荐一本书。

如果你想同时在NVIDIA和ATI芯片组上运行你的程序,那么OpenCL将使这项工作变得更容易。但是,您需要编写每个内核的不同版本,以便在每个芯片组上获得良好的性能。例如,在ATI卡上,您可能希望使用float4/int4数据类型手动向量化代码(或者接受近4倍的性能损失),而NVIDIA使用标量数据类型效果更好。

如果您只针对NVIDIA,那么CUDA在某种程度上更便于编程。

票数 1
EN

Stack Overflow用户

发布于 2011-08-13 15:59:08

我建议首先计划一个简单的游戏作为你的引擎的测试用例。拥有一个基本的游戏将推动功能和API开发。在没有明确目标的情况下编写引擎会使项目更具风险。虽然我同意出于性能原因,nVidia和ATi应该被视为单独的目标,但我建议您从这两个目标开始。

我个人为Uncharted:Drake's Fortune -一款PS3游戏-编写了物理引擎,我在C++中做了一次传递,当它起作用时,传递到VMX上进行了优化,然后把它放在SPU上。请注意,由于时间限制,我只做了一小部分我最初想做的事情。在那之后,我进行了一次迭代,将数据阶段拆分出来,并制定了数据转换的管道。这一点很重要,因为无论是CPU、GPU还是SPU,运行重要代码的现代处理器都会花费大部分时间等待缓存。您必须特别注意数据结构,并对它们进行流水线处理,以便在任何阶段都有一个较小的工作数据集。例如,首先我做宽相位,所以我不需要形状,但我需要世界空间的边界框。因此,我将边界框分成单独的数组,并在另一遍中一起计算它们,这将以最佳方式将它们写出来。作为bbox计算的输入,我需要形状转换和它们的一些边界,但不一定是整个形状。在宽阶段之后,我计算/更新sim岛,同时执行窄阶段,我实际上需要形状。等等--我在我写给Game Physics Pearls的一篇文章中用图片描述了这一点。

我想我想说的是以下几点:

  1. 确保你有一个明确的目标来驱动你的开发-一个非常基本的游戏,带有完全相同的设计,在游戏物理引擎的情况下是最好的。
  2. 在你有一个可用的产品之前,不要试图进行优化。首先以最简单、最快的方式编写,然后修复数学中的所有bug。
  3. 在你写完C++的第一遍之后,针对CPU进行优化:简化它,使它不会冲击缓存,并划分代码,这样就不会出现调用的意大利面条,每个阶段的所有代码都是本地化的。这将有助于a)端口到CUDA b)端口到OpenCL c)端口到控制台d)使其运行得相当快e)使调试成为可能。
  4. 在开发时,抵制去做你刚刚想到的事情的诱惑,除非该功能对于你的明确目标不是必要的(参见#1) --这就是为什么你需要一个目标,引导你朝着它前进,并使其有可能完成实际的项目。在没有明确的goals.
  5. Remember的情况下,分心通常会扼杀项目,因为在某种程度上,软件开发是迭代的。这是可以做一个粗略的,然后完善它。皮革,漂洗,重复--这是程序员的座右铭:)

给出建议很容易。如果你想做什么,就去做吧,我们会坐下来批评:)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5694269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档