的情况是,有相交的很多面,也没有必要的鼠标点击来确定光标位置的实际坐标,如果它指向什么或表面,此我想用glReadPixels
,画遍着色器,并最终glReadPixels
给我当前像素的深度总是等于0
,因为什么,这可能是,也可以有任何的替代品的功能为opengl
新版本,在论坛上寻找信息,但发现我可以提前帮助,谢谢。GlReadPixels总是从深度缓冲取0
0
A
回答
0
据我了解的问题,你想找到一些物体的interscetion的坐标。正确?
你不能做任何这些与glReadPixels,因为这个机能的研究返回像素的颜色。像素是平的(因为您的电脑屏幕是),所以没有写入深度。 它只是从屏幕上的结果图像获取信息。
这里是不错的报价: “OpenGL是不是一个场景管理库这仅仅是一个绘图API绘制的东西到屏幕上,然后忘掉他们。”
所以我的猜测是,你将不得不在你的代码中做一些技巧,并根据你的代码的工作原理用你自己的函数来计算一切。
0
我使用OpenGL三维插件,里面陈列着各种物体中的Qt编写。如果分别指向可口可乐对象,则需要在光标下找到该点的坐标(当然这将在现场)。所有渲染都通过着色器。 我想在一个给定的像素深度缓冲区的深度值,其中很多展示了如何做到这一点,和我做同样的,但glReadPixels总是告诉我,任何像素的深度为0
enter code here
initializeOpenGLFunctions();
glEnable(GL_TEXTURE_2D);
//корректное отображение перспективы
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER,0);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
// включение обновление буфера глубины
glEnable(GL_DEPTH_TEST);
// очистка буфера
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLint viewport[4];
GLdouble modelview[16];
GLdouble projectionmtr[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
viewport[0] = 0;
viewport[1] = 0;
viewport[2] = geometry().width();
viewport[3] = geometry().height();
QMatrix4x4 mtr = mCameraMatr * mObjectMatr * mScale * mCentrTr * translate;
int k = 0;
for(int i = 0; i<4; ++i)
{
for(int j = 0; j<4; ++j)
{
modelview[k] = mtr(j,i);
++k;
}
}
k = 0;
for(int i = 0; i<4; ++i)
{
for(int j = 0; j<4; ++j)
{
projectionmtr[k] = projection(j,i);
++k;
}
winX = x;
winY = viewport[3] - y;
glReadPixels(x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);// Here is always written in the variable winZ 0
gluUnProject(winX, winY, winZ, modelview, projectionmtr, viewport, &posX, &posY, &posZ);
return QVector3D(posX, posY, posZ);
0
你是错的,功能gglReadPixels有机会获得深度的一个组成部分,如果你把在文档仔细一看,但我不工作,话题仍然是相关
相关问题
- 1. 从QGLPixelBuffer获取深度缓冲区
- 2. OpenTK顶点似乎总是写入深度为0的缓冲区
- 3. 将深度渲染缓冲区复制到深度缓冲区
- 4. glreadpixels模板缓冲区总是抛出GL_INVALID_OPERATION
- 5. 是深度缓冲区强制性
- 6. OpenGL ES深度缓冲区
- 7. 对数深度缓冲区
- 8. OpenGL深度缓冲区
- 9. 传递深度缓冲区
- 10. OpenGL - BackCulling - 深度缓冲值
- 11. Windows Phone 7 BackgroundAudioPlayer缓冲进度总是返回0或1
- 12. 为什么当我使用glReadPixels()读取z缓冲区时,z-buffer值总是为0?
- 13. OpenGL中,如何使用深度缓存中从帧缓冲器照常深度缓冲器
- 14. 避免使用alpha值为0的深度缓冲区写入
- 15. 在Open GL ES 2.0中从深度缓冲区获取黑色
- 16. 无法从Compute着色器读取深度缓冲区
- 17. LibGDX如何从FrameBuffer获取深度缓冲区?
- 18. iOS /金属:如何从深度缓冲区读取点?
- 19. glReadPixels()读取速度缓慢GL_DEPTH_COMPONENT
- 20. 从深度纹理采样总是结果0
- 21. OpenGL:渲染缓冲区,深度缓冲区
- 22. 帧缓冲对象(FBO)和渲染和深度缓冲关系
- 23. 将深度缓冲区转换为GLSL的深度纹理
- 24. opengl深度测试如何使用24位深度缓冲区?
- 25. 如何快速读取OpenGL颜色缓冲区和深度缓冲区?
- 26. OpenGL:仅获取模板缓冲区并且没有深度缓冲区?
- 27. OpenGL深度缓冲区问题
- 28. OpenGL中的深度缓冲区
- 29. 2D中的深度缓冲区
- 30. Android上的OpenGL深度缓冲区
我在Qt的写作使用openGl一个3D小部件,它显示各种对象。如果分别指向可口可乐对象,则需要在光标下找到该点的坐标(当然这将在现场)。所有渲染都通过着色器。 我想获得深度缓冲区在给定像素中的深度值,其中很多显示如何做到这一点,我也这样做,但glReadPixels总是告诉我,任何像素的深度为0. – ygarnui
QVector3D iGLView :: GetRealPos(INT的x,int y)对 { 闪烁视[4]; GLDouble modelview [16]; GLdouble projectionmtr [16]; GLFloat winX,winY,winZ; GLdouble posX,posY,posZ; glReadPixels(x,int(winY),1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&winZ); //这里总是写在变量winZ 0 gluUnProject(WINX,酒味,winZ,模型视图,projectionmtr,视,及POSX,和波西,&posZ); 回报QVector3D(POSX,波西,posZ); } – ygarnui
你可以搜索碰撞检测,但这并没有在opengl中完成 – Ferdi