我知道 OpenGL 选择模式已被弃用,并且从未被硬件加速,除了在一些 SGI 框和 3DLabs GPU 上。但我无法摆脱它(不是我的代码)。
通过特定的绘制,我得到大约 125 帧/秒。但是当我有(或更多)命中(所以选择模式有效)并且我尝试像往常一样移动相机时,我得到大约 40-50 帧/其次,如果根本没有 Hits,则不会发生任何奇怪的事情,而且我的帧率也一样好。
我究竟做错了什么?
在其 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)";
}
}