小编Ant*_*son的帖子

在递归函数上的OpenMP并行化

我正在尝试使用并行化来提高绘制具有层次排序对象的3D场景的刷新率.场景绘制算法首先递归地遍历对象树,并从中构建绘制场景所需的有序数据的有序数组.然后它多次遍历该数组以绘制对象/覆盖等.从我读到的OpenGL不是一个线程安全的API,我假设数组遍历/绘图代码必须在主线程上完成,但我我想我可能能够并行化填充数组的递归函数.关键问题是必须按照对象在场景中出现的顺序填充数组,因此所有将给定对象与数组索引相关联的功能必须按正确顺序完成,但是一旦分配了数组索引,我可以使用工作线程填充该数组元素的数据(这不一定是一个简单的操作).所以这是我想要的伪代码.我希望你能理解xml-ish线程的语法.

recursivepopulatearray(theobject)
{
  <main thread>
  for each child of theobject
  {
     assign array index
     <child thread(s)>
       populate array element for child object
     </child thread(s)>
     recursivepopulatearray(childobject)
  }
  </main thread>
}
Run Code Online (Sandbox Code Playgroud)

那么,是否可以使用OpenMP执行此操作,如果是这样,怎么做?是否有其他并行化库可以更好地处理这个问题?

附录:为了回应Davide要求进一步澄清的请求,让我详细解释一下.让我们说场景是这样排序的:

-Bicycle Frame
  - Handle Bars 
  - Front Wheel
  - Back Wheel
-Car Frame
  - Front Left Wheel
  - Front Right Wheel
  - Back Left Wheel
  - Back Right Wheel
Run Code Online (Sandbox Code Playgroud)

现在,这些对象中的每一个都有很多与之相关的数据,即位置,旋转,大小,不同的绘图参数等.另外,我需要在这个场景上进行多次传递才能正确绘制它.一个通道绘制对象的形状,另一个通道绘制描述对象的文本,另一个通道绘制对象之间的连接/关联(如果有).无论如何,如果我必须多次访问它,从这些不同的对象中获取所有绘图数据是相当慢的,所以我决定使用一个通道将所有数据缓存到一维数组中,然后实际所有绘图传递只看数组.问题在于,因为我需要以正确的顺序进行OpenGL推送/弹出,所以数组必须处于代表树层次结构的正确深度优先搜索顺序中.在上面的示例中,必须按如下方式对数组进行排序:

index 0: Bicycle Frame
index 1: Handle Bars 
index 2: Front Wheel
index 3: Back Wheel …
Run Code Online (Sandbox Code Playgroud)

c++ drawing openmp

6
推荐指数
1
解决办法
5247
查看次数

OpenGL颜色矩阵

如何让OpenGL颜色矩阵转换工作?

我修改了一个只绘制三角形的示例程序,并添加了一些颜色矩阵代码,看看我是否可以改变三角形的颜色,但它似乎不起作用.

    static float theta = 0.0f;
glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
glClearDepth(1.0);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();
glRotatef( theta, 0.0f, 0.0f, 1.0f );
glMatrixMode(GL_COLOR);

GLfloat rgbconversion[16] = 
{
    0.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 0.0f,
    0.0f, 0.0f, 0.0f, 0.0f
};
glLoadMatrixf(rgbconversion);
glMatrixMode(GL_MODELVIEW);

glBegin( GL_TRIANGLES );
glColor3f( 1.0f, 0.0f, 0.0f ); glVertex3f( 0.0f, 1.0f , 0.5f);
glColor3f( 0.0f, 1.0f, 0.0f ); glVertex3f( 0.87f, -0.5f, 0.5f );
glColor3f( 0.0f, 0.0f, 1.0f ); glVertex3f( -0.87f, -0.5f, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl colors

1
推荐指数
1
解决办法
5022
查看次数

标签 统计

c++ ×2

colors ×1

drawing ×1

opengl ×1

openmp ×1