的情況是,有相交的很多面,也沒有必要的鼠標點擊來確定光標位置的實際座標,如果它指向什麼或表面,此我想用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 - BackCulling - 深度緩衝值
- 9. OpenGL深度緩衝區
- 10. 對數深度緩衝區
- 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. iOS /金屬:如何從深度緩衝區讀取點?
- 17. 無法從Compute着色器讀取深度緩衝區
- 18. LibGDX如何從FrameBuffer獲取深度緩衝區?
- 19. glReadPixels()讀取速度緩慢GL_DEPTH_COMPONENT
- 20. 幀緩衝對象(FBO)和渲染和深度緩衝關係
- 21. OpenGL:渲染緩衝區,深度緩衝區
- 22. opengl深度測試如何使用24位深度緩衝區?
- 23. 將深度緩衝區轉換爲GLSL的深度紋理
- 24. 如何快速讀取OpenGL顏色緩衝區和深度緩衝區?
- 25. OpenGL:僅獲取模板緩衝區並且沒有深度緩衝區?
- 26. Open GL的深度緩衝問題
- 27. 在OpenGL中查看深度緩衝區
- 28. OpenGL顏色深度緩衝區
- 29. Opengl深度緩衝區和剔除
- 30. 可視化深度緩衝區
我在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