我正在开发RayMarching程序(家庭作业),并且希望它运行的更快,因此我将GPU与ALEA扩展一起使用。我有一个问题,因为我无法在(GPU)的并行环境中使用一流的相机。 谢谢你的帮助。
我已经尝试过更改类的标签并在
的Parallel中创建它们(y & x2).ExistAbstract(x2)
[GpuManaged, Test]
public static Bitmap DelegateWithClosureGpu(Scene s, Camera my_camera, SDF sdfList, int w, int h)
{
my_camera.SetScreenData(w,h);
int nbsteps;
float dyst;
Bitmap res = new Bitmap(w,h);
ParallelForTest.camera = my_camera;
Gpu.Default.For(0, res.Height , i =>
{
for (int j = 0; j < res.Height; j++)
{
Vector3 ray = ParallelForTest.camera.GetRay(i, j);
ray.Normalized();
s.RayMarch(sdfList, ray, ParallelForTest.camera.origin,out nbsteps,out dyst);
if (Scene.FloatEq(dyst,0f))
{
res.SetPixel(i,j,Color.White);
}
else
{
res.SetPixel(i,j,Color.Black);
}
}
});
return res;
}
和类向量”只是一个重载运算符的自定义类。
答案 0 :(得分:0)
您应该将一些变量设置为相机的变量,并在并行的for循环中使用它们,还应该制作相机功能的静态版本,并在for循环中使用它们。 虽然我不确定这是否可以解决问题,但是我认为您应该尝试一下,因为您说不能同时使用类相机,而现在不会在其中使用它。