いくつかの 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)";
}
}