Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将bezier曲面生成为子面片 编写了一个用4x4控制点生成Bezier曲面的小C++程序。p>_C++_Multithreading_Math_Geometry_Bezier - Fatal编程技术网

将bezier曲面生成为子面片 编写了一个用4x4控制点生成Bezier曲面的小C++程序。p>

将bezier曲面生成为子面片 编写了一个用4x4控制点生成Bezier曲面的小C++程序。p>,c++,multithreading,math,geometry,bezier,C++,Multithreading,Math,Geometry,Bezier,接下来我要做的是并行化这个过程,并将整个曲面分解为子面片,其中每个线程将仅基于指定给它的边界(bbox)生成坐标 示例代码: for(i=0;i<steps;i++) { float u = i/(steps-1); for(j=0;j<steps;j++) { float v = j/(steps-1); Point P = calculate_bezier(u,v); } } 用于(i=0;i通过对输出顶点进行边界划分可能不是一个好主意。虽然可以将贝

接下来我要做的是并行化这个过程,并将整个曲面分解为子面片,其中每个线程将仅基于指定给它的边界(bbox)生成坐标

示例代码:

for(i=0;i<steps;i++)
{
  float u = i/(steps-1);
  for(j=0;j<steps;j++)
  {
   float v = j/(steps-1);
   Point P = calculate_bezier(u,v);
  }
}

用于(i=0;i通过对输出顶点进行边界划分可能不是一个好主意。虽然可以将贝塞尔面片与边界框相交,但这并不容易或有效。最好是将UV坐标进行边界划分。

您的问题是什么?您是否在寻找de Casteljau算法的2D版本rithm?不,我有坐标生成。现在我可以生成2D/3D坐标,并从中生成曲面。我想做的是并行化这个过程并加速整个计算。我计划做的是将整个过程分解为不同的线程每个线程都有一个bbox维度,只生成坐标在那个区域,通过这种方式我可以快速生成非常大的补丁。在图中,每种颜色代表一个分配给线程的bbox。你还没有告诉我们你的问题是什么。继续做你计划做的,这听起来是个合理的想法。该死,对不起,我想问怎么做。我的意思是,如何限制贝塞尔坐标基因只对边界框区域进行定量处理?是的,这是我无法解决的问题。如何将UV坐标与线程的bbox绑定?为什么麻烦?只需将UV区域分割为相等的区域(在UV空间中)正方形,不必担心它们的XYZ边界框大小是否相等或是否重叠。Hi Ben,我在运行时使用kd树生成这些BBox,这些BBox可能不相等,可能没有我在图中描述的4个BBox,可能有4个以上。我想我应该给每个线程一部分UV,但这就是我要做的“我被击中了。我想将这些BBox映射到UV。但是为什么要在XYZ空间而不是UV空间中分割?为什么你关心每个线程计算的边界框?见鬼,让线程x,总共n个,计算UV矩形内的网格
[x/n,0]-[(x+1)/n,1]
。嗨,Ben,这很有效,谢谢!但我确实使用了BBox,就像我之前提到的,我想让不同线程的BBox不均匀,对我来说,均匀划分UV不是一个选项。但是,我确实将BBox缩放到UV范围,并使用这些边界来控制哪个线程加载什么。