我正在关注picking in opengl的教程。这是我的选择功能,
int size = 25;
GLuint buffer[size];
glSelectBuffer(size, buffer);
glRenderMode(GL_SELECT);
glPushMatrix();
glLoadIdentity();
glGetIntegerv(GL_VIEWPORT, viewport);
gluPickMatrix(x, viewport[3] - y, 1000, 1000, viewport);
gluPerspective(60, ratio, 0.001, 1000);
glMatrixMode(GL_MODELVIEW);
glInitNames();
//give dummy name
glPushName(0);
draw_scene(scene_root, true);
glPopName();
//stop picking
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glFlush();
GLint hits = glRenderMode(GL_RENDER);
我为gluPickMatrix
使用1000,1000只是为了得到一个打击
draw_scene归结为
glLoadName(1);
mProgram.setUniformValue(mMvpMatrixLocation, getCameraMatrix() * transform);
glDrawArrays(GL_TRIANGLES, 40, 40 + v->sphereSize/3);
获取getCameraMatrix()
会返回代表我的相机投影的QMatrix4x4
,transform
是代表我的模型坐标的QMatrix4x4`。
我的shader.vert看起来像这样
in vec3 vert;
uniform mat4 mvpMatrix;
void main()
{
gl_Position = mvpMatrix * vec4(vert, 1.0);
}
注意mvpMatrix
是getCameraMatrix() * transform
我暂时加载'1',因为我只有一个对象。
我的问题是尽管视口为1000x1000
,但它没有产生任何命中编辑:
问题似乎是glRendmode(GL_SELECT)
确实更改了渲染模式。我为此创建了另一个question,