0

いくつかの SGI ボックスと 3DLabs GPU を除いて、OpenGL 選択モードが廃止され、HW アクセラレーションが行われなかったことは知っていますが、それを取り除くことはできません (私のコードではありません)。

特定の描画では、約 125 フレーム/秒が得られますが、(またはそれ以上の) ヒットがあり (選択モードが機能するため)、いつものようにカメラを動かそうとすると、40-50 フレームのようになります/ 2番目.ヒットがまったくない場合、奇妙なことは何も起こらず、フレームレートは同じです。

私は何を間違っていますか?

そのC++コードの下:

void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

gluLookAt(objCamera->mPos.x,  objCamera->mPos.y,  objCamera->mPos.z,
          0, objCamera->mView.y, 0,
          objCamera->mUp.x,   objCamera->mUp.y,   objCamera->mUp.z);        

ourRender(scene);
}

startSelection は Qt mousePressEvent によって呼び出されます

void GLWidget::startSelection(int x,int y)                                                                 // This Is Where Selection Is Done
{
GLint viewport[4];

glSelectBuffer(BUFSIZE,selectBuf);
glRenderMode(GL_SELECT);
glInitNames();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();

glGetIntegerv(GL_VIEWPORT,viewport);
gluPickMatrix(x,viewport[3]-y,5,5,viewport);
gluPerspective(fov,ratio,0.1f,1000);
glMatrixMode(GL_MODELVIEW);

draw_something();
stopSelection();
}



void GLWidget::stopSelection() {

int hits;
glMatrixMode(GL_PROJECTION);      // restoring the original projection matrix
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
hits = glRenderMode(GL_RENDER);      // returning to normal rendering mode
if (hits > 0){
    qDebug() << "Found " << hits << " hit(s)";
    }
}
4

2 に答える 2