2017-01-11 8 views
0

状況は、交差していて、マウスのクリックがカーソル位置の実際の座標を決定する必要はないということです私はglReadPixelsを使い、シェーダー全体にペイントしたいと思っていました。最終的にglReadPixelsは、現在のピクセルの深さを常に0にしています。その理由は、openglの新しいバージョンの代替機能のいずれかを持つ可能性があります。フォーラムに関する情報を探していましたが、事前に感謝しています。GlReadPixelsは常にデプスバッファから取る0

答えて

0

私が質問を理解する限り、あなたはいくつかのオブジェクトのinterscetionの座標を見つけたいと思います。正しい?

この関数はピクセルの色を返すため、glReadPixelsでこれらの値を指定することはできません。ピクセルはフラットです(コンピュータ画面のように)ので、奥行きは書かれていません。 画面上の結果画像から情報を取得するだけです。 "OpenGLはシーン管理ライブラリではなく、物を画面に描画して忘れてしまう単なる描画APIです。"

だから私の推測では、あなたのコードでいくつかのトリックをして、あなたのコードがどのように動作するかに応じてあなた自身の関数ですべてを計算しなければならないと思います。

+0

関連する、機能gglReadPixelsを使用すると、ドキュメントを詳しく見てみた場合、深さのコンポーネントを受信する機会がありますが、私は動作しません。 openGlを使用して、さまざまなオブジェクトを表示する3Dウィジェットを作成します。コカオブジェクトを指している場合は、カーソルの下のポイントの座標(オンサイトの座標はオンサイト)を見つける必要があります。すべてのレンダリングはシェーダを通過します。 与えられたピクセルの深度バッファの深さ値を取得したいと思います。その多くは、これを行う方法を示していますが、同じことをしますが、glReadPixelsは常にピクセルの深度が0であることを知らせます。 – ygarnui

+0

QVector3D iGLView :: GetRealPos(int x、int y) { GLintビューポート[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); //ここでは、常に変数ウィンズ0 gluUnProject(WINX、ヴィニー、ウィンズ、モデルビューは、projectionmtrは、ビューポート、&POSX、&POSY、&posZ); リターンQVector3D(POSX、POSY、posZ)で書かれている。 } – ygarnui

+0

あなたは可能性衝突の検出を検索します。 – Ferdi

0

私はopenGlを使ってQtで書いています。さまざまなオブジェクトを表示する3Dウィジェットです。コカオブジェクトを指している場合は、カーソルの下のポイントの座標(オンサイトの座標はオンサイト)を見つける必要があります。すべてのレンダリングはシェーダを通過します。 あるピクセルで深度バッファの深度値を取得したいのですが、これを行う方法がたくさん示されていますが、同じことをしますが、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

あなたは間違っている、話題はまだ私はQtの中で書いています

関連する問題