我正在研究C++中的高性能代码,并且一直在使用CUDA和OpenCL以及最近的C++ AMP,我非常喜欢它.然而,我有点担心它没有被开发和扩展并且将会消亡.
让我想到这个想法的是,即使是MS C++ AMP博客已经沉默了大约一年.看看C++ AMP算法库http://ampalgorithms.codeplex.com/wikipage/history,似乎一年多没发生任何事情.
我看到的唯一开发是现在LLVM类型支持C++ AMP,因此它不仅仅是Windows,但这就是全部,而不是已被广泛讲述的东西.
你知道什么样的工作,如果有的话?
我目前正在研究虚幻引擎在计算密集型项目中的可用性,谷歌并没有非常有用.
我需要在游戏循环的背景下为项目做一些繁重的计算,目前使用OpenMP实现.流体模拟.
Windows上的虚幻引擎使用visual studio进行编译和构建,并且应该支持visual studio编译器具有的功能,但是如果您可以使用适当的OpenMP设置进行UE编译,则我不清楚.或者,我可以轻松地使用Intels线程构建块TBB,这显然已经在UE中使用了......虽然可能只有内存分配器部分?
总的来说,我想我的问题是对UE的跨平台重度并行计算的支持.如果您需要在所有可用内核上运行大量相同的计算,那么如何在UE中执行此操作?我不想手动创建一些线程,在块代码上运行它们,等待加入完成然后再继续.为了我的目的,我更喜欢parallel_for循环.
此外,我想知道在UE"脚本"中使用其他框架(如CUDA或OpenCL)是多么容易.
我来自Unity,我用c ++编写c ++包装器,用c ++编写,以获得高性能,但我对c#中的这个包装本身有点厌倦,所以我更喜欢基于c ++的引擎...但是如果那样的话本身在我的c ++代码中可以做的事情是有限的,然后它没有多大帮助...我认为它可以全部工作,当我学习如何,但我有点困惑,因为无法找到任何有关任何信息的信息以上问题.任何带有"平行"字样的东西通常都会产生蓝图.
我已经(有点盲目地)在物理刚体模拟中使用四元数进行旋转有一段时间了,但最近开始对四元数旋转通常是如何定义的以及我是如何定义的(基于游戏开发者的物理书)感到困惑。
在书中,您有一个角速度 angVel 和一个时间步长 dt 以及一个初始方向。
它的步骤如下
方向 += 0.5*方向*angVel * dt
其中四元数向量乘法是通过首先将向量 xyz 转换为四元数 xyz,0 来完成的
这是可行的,但在其他任何地方,程序都是创建一个四元数,它定义了时间积分 angVel,在 dt 上,然后在方向上乘以它。它本质上将 angVel*dt 转换为旋转(非常有意义),然后通过乘法将其应用于原始方向,如下所示,语法更好https://math.stackexchange.com/questions/39553/how-do- i-apply-an-angular-velocity-vector3-to-a-unit-quaternion-orientation
我的问题是上面的 0.5 * 四元数 * 矢量 * 标量在概念上是什么,以及将这个结果四元数添加到我的方向是什么,考虑到你通常乘法而不是加法来旋转。