0

これよりも優れた解決策があるかどうか疑問に思っています: レンダリング コードとカラー ピッキング コードがあり、これら 2 つのコード (VBO など) 間で共有できるすべてのものを既に共有しており、私のコードは次のようになります。

void paintGL()
{

label1:

  if(picking_running)
  {
     ... code to draw the colors for the picking
  }
  else
  {
     ... normal code to draw the scene the user should see
  }


  if(picking_running)
  {
      ... do the colorpick and identify the clicked element...

     picking_running = FALSE;

     goto label1; // this prevent the paintGL function to end and get swapBuffers called, I don't want the "flickering" to be visible to the user between the color picking mode and the normal mode

  }

} // end of the paintGL, here swapBuffers is called automatically

コードは機能し、ちらつきはユーザーに表示されませんが、率直に言って、コード内の goto のアイデアは貧弱な解決策のように思えます。

他に良いアイデアはありますか?

4

2 に答える 2

1

setAutoBufferSwap(false)を使用して、自分で QGLWidget::swapBuffers を呼び出します。レンダリングされていないバッファ/テクスチャにカラーピッキングをレンダリングすることもできます。

于 2012-07-21T12:33:42.657 に答える
1

とにかく目に見えるレンダリングを実行するので、次のように実装してみませんか:

void paintGL()
{
  if(picking_running)
  {
     /* ... code to draw the colors for the picking */

     /* ... do the colorpick and identify the clicked element... */
  }

  /* ... normal code to draw the scene the user should see */
}
于 2012-07-21T13:41:42.170 に答える