Opengl 使用glReadPixels和glunProject读取透明平面的深度值
我正在尝试创建一个台球模拟,并一直在使用glReadPixels和GLUNProject将鼠标指针投影到场景中 如果鼠标指向场景中的某个对象(例如,表格),则此操作可以正常工作,但当鼠标指向背景时,由于glReadPixels调用返回1.0,会将gluUnProject弄乱 我正试图找出如何在桌子的同一水平面上绘制一个透明平面,这样无论我将鼠标指向场景中的何处,它都会获得与桌子指向同一平面的深度 如果我画一个没有glAlphaFunc的透明四边形(GL_更大,0.01f);它会将四边形绘制为白色,深度测试将按照我的计划进行,但是当我添加对alphaFunc的调用以使四边形透明时,深度会恢复到以前的状态。据我所见,glReadPixels从帧缓冲区读取像素,所以这很有意义,我只是想知道如何解决这个问题 我也尝试过反转四边形上的缠绕,以便从上面看不到它,但这与glReadPixels从帧缓冲区获取其测量值的问题相同 简言之,如何获取glReadPixels以从对象获取其深度分量,而无需将该对象绘制到屏幕上 以下是对glReadPixels和glunProject的调用:Opengl 使用glReadPixels和glunProject读取透明平面的深度值,opengl,mouse,transparency,depth,glreadpixels,Opengl,Mouse,Transparency,Depth,Glreadpixels,我正在尝试创建一个台球模拟,并一直在使用glReadPixels和GLUNProject将鼠标指针投影到场景中 如果鼠标指向场景中的某个对象(例如,表格),则此操作可以正常工作,但当鼠标指向背景时,由于glReadPixels调用返回1.0,会将gluUnProject弄乱 我正试图找出如何在桌子的同一水平面上绘制一个透明平面,这样无论我将鼠标指向场景中的何处,它都会获得与桌子指向同一平面的深度 如果我画一个没有glAlphaFunc的透明四边形(GL_更大,0.01f);它会将四边形绘制为白色
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);
这是因为alpha测试完全丢弃未通过测试的像素
但是,gluUnProject不应在深度缓冲区值为1.0时阻塞;深度缓冲区值为1.0时,应得到的值是远剪裁平面的距离。这是因为alpha测试完全丢弃未通过测试的像素
但是,gluUnProject不应在深度缓冲区值为1.0时阻塞;深度缓冲区值为1.0时,应该得到的值是远剪裁平面的距离。可以使用
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
如果在此之后绘制某些内容,它仍将接受深度测试(如果启用),其深度值仍将写入深度缓冲区(如果启用),但其碎片在颜色缓冲区中不可见。您可以使用
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
如果在此之后绘制某些内容,它仍将接受深度测试(如果启用),其深度值仍将写入深度缓冲区(如果启用),但其片段在颜色缓冲区中不可见