我最近开始了一个项目,构建一个物理引擎。我希望你能给我一些关于文档和/或最好的技术的建议。
首先,我已经看到,对于手头的任务,强烈推荐使用Game-Physics-Engine-Development,我想知道您是否可以给我第二个opinion.Should,我明白了?此外,在浏览亚马逊时,我偶然发现了Game Engine Architecture,因为我想为游戏构建物理引擎,所以我想这也是一本不错的读物。
其次,我知道模拟物理是高度计算密集型的,所以我想使用CUDA或OpenCL.Right,现在我倾向于OpenCL,因为它可以在NVIDIA和ATI chipsets.What上工作,你们有什么建议吗?
PS:我将在Linux上的C++中实现它。
谢谢。
发布于 2011-04-18 01:32:52
以下是关于CUDA或OpenCL选择的答案。我没有推荐一本书。
如果你想同时在NVIDIA和ATI芯片组上运行你的程序,那么OpenCL将使这项工作变得更容易。但是,您需要编写每个内核的不同版本,以便在每个芯片组上获得良好的性能。例如,在ATI卡上,您可能希望使用float4/int4数据类型手动向量化代码(或者接受近4倍的性能损失),而NVIDIA使用标量数据类型效果更好。
如果您只针对NVIDIA,那么CUDA在某种程度上更便于编程。
发布于 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的一篇文章中用图片描述了这一点。
我想我想说的是以下几点:
给出建议很容易。如果你想做什么,就去做吧,我们会坐下来批评:)
https://stackoverflow.com/questions/5694269
复制相似问题