我正在尝试创建一个台球模拟,并且一直在使用 glReadPixels 和 gluUnProject 将我的鼠标指针投影到场景中。
如果鼠标指向场景中的一个对象(例如表格),这可以正常工作,但是当它指向背景时,由于 glReadPixels 调用返回 1.0,它会弄乱 gluUnProject。
我试图弄清楚如何在桌子的同一水平面上绘制一个透明平面,这样无论我将鼠标指向场景中的哪个位置,它都会获得深度,就好像它指向与桌子相同的平面一样.
如果我绘制一个没有 glAlphaFunc(GL_GREATER, 0.01f); 的透明四边形;它会将四边形绘制为白色,并且深度测试将按我的计划进行,但是当我添加对 alphaFunc 的调用以使四边形透明时,深度会恢复到以前的状态。据我所见, glReadPixels 从帧缓冲区读取像素,所以这是有道理的,我只是想知道如何解决这个问题。
我还尝试反转四边形上的绕组,以便从上方看不到它,但这与 glReadPixels 从帧缓冲区获取测量值的问题相同。
简而言之,我如何让 glReadPixels 从对象中获取它的深度分量而不将该对象绘制到屏幕上?
这是对 glReadPixels 和 gluUnProject 的调用:
winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels(x, (int) winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);