我正在开发一个3D游戏,旨在模拟可变形的3D物体。所谓可变形,是指3D物体的几何形状会从一帧到另一帧发生变化。在游戏中,有一个渲染循环,应尽可能频繁地执行(至少30次/秒),以获得良好的帧率。但是,在这个渲染循环中,我还要做两件事情:计算新的几何形状和计算轴对齐的边界框层次结构(AABVH)。我需要AABVH来进行碰撞检测。非常重要的是,在3D物体被渲染之前完成几何形状和AABVH的计算。由于计算新的几何形状和AABVH是一个耗时的任务,因此我的帧率迅速下降。因此,我的想法是在一个单独的线程中计算AABVH。
Thread t;
public void Render(Object3D o) // renders 3D object
{
if (t != null) // wait until the new geometry got calculated
{
t.Join();
}
o.RenderGeometry();
t = new Thread(() => o.CalcAABVH());
t.Start();
}
我不是C#并行编程专家,但我肯定这不是一个好的解决方案。每帧都会创建、执行和销毁一个新的线程,造成了很大的开销。在我的情况下,一个好的解决方案会是什么样子呢?