我正在尝试实现对象拾取。我有代码将对象渲染为纯色、不亮的颜色,然后读取屏幕缓冲区中的像素。我解释读数glReadPixels()
以确定光标当前位于哪个对象上。最后,我重新渲染所有光照、纹理和颜色。
gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL_MODELVIEW);
gl.glLoadIdentity();
gl.glPushMatrix();
//Picking render goes here...
gl.glPopMatrix();
//The following code reads the current pixel color at the center of the screen
FloatBuffer buffer = FloatBuffer.allocate(4);
gl.glReadBuffer(GL_FRONT);
gl.glReadPixels(drawable.getWidth() / 2, drawable.getHeight() / 2, 1, 1, GL_RGBA, GL_FLOAT, buffer);
float[] pixels = new float[3];
pixels = buffer.array();
float red = pixels[0];
float green = pixels[1];
float blue = pixels[2];
System.out.println(red + ", " + green + ", " + blue);
gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL_MODELVIEW);
gl.glLoadIdentity();
gl.glPushMatrix();
//Final render goes here...
gl.glPopMatrix();
问题是调用glReadPixels()
返回给我最终渲染的像素颜色,而不是拾取渲染。我将不胜感激如何阅读拾取渲染像素的解释。
我知道我可以使用 OpenGL 名称堆栈,但坦率地说,我觉得它既不方便又荒谬。