状況は、交差していて、マウスのクリックがカーソル位置の実際の座標を決定する必要はないということです私はglReadPixels
を使い、シェーダー全体にペイントしたいと思っていました。最終的にglReadPixels
は、現在のピクセルの深さを常に0
にしています。その理由は、opengl
の新しいバージョンの代替機能のいずれかを持つ可能性があります。フォーラムに関する情報を探していましたが、事前に感謝しています。GlReadPixelsは常にデプスバッファから取る0
0
A
答えて
0
私が質問を理解する限り、あなたはいくつかのオブジェクトのinterscetionの座標を見つけたいと思います。正しい?
この関数はピクセルの色を返すため、glReadPixelsでこれらの値を指定することはできません。ピクセルはフラットです(コンピュータ画面のように)ので、奥行きは書かれていません。 画面上の結果画像から情報を取得するだけです。 "OpenGLはシーン管理ライブラリではなく、物を画面に描画して忘れてしまう単なる描画APIです。"
だから私の推測では、あなたのコードでいくつかのトリックをして、あなたのコードがどのように動作するかに応じてあなた自身の関数ですべてを計算しなければならないと思います。
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の中で書いています
関連する問題
- 1. なぜglReadPixelsメソッドは常にRGB(0、0、0)を取得する
- 2. QOpenGLWidgetとglReadPixelsとデプスバッファ
- 3. は、前の質問からglReadPixels
- 4. デプスバッファ
- 5. glReadPixelsは常にglClearColorで同じ値を返します
- 6. glTestFenceNVは常にglReadPixelsでfalseを返します
- 7. getStreamVolumeは常に0
- 8. glReadPixels
- 9. SQLクエリから返される結果は常に0です
- 10. ラクラク機能は常に、私は明らかに0
- 11. OpenGL:Renderbuffer、デプスバッファ
- 12. 角度 - ルートパラメータを取得することは常に0です
- 13. PyQtは:ウィジェットは常に位置に移動する(0、0)
- 14. gl_FragData [0]は常にカラーバッファですか?
- 15. なぜxmlhttp.statusは常に0ですか?
- 16. Androidネイティブコード:AMotionEvent_getHistorySizeは常に0ですか?
- 17. リピーターのContainer.ItemIndexは常に0ですか?
- 18. indexPath.rowは常に0です
- 19. CUDA出力は常に0
- 20. ランダム番号は常に0
- 21. XMLHttpRequestのステータスコードは常に0
- 22. Ajaxは常に返す0
- 23. 深度テクスチャからのサンプリングは常に0を返します
- 24. JPA - シーケンスから生成されたIDは常に0
- 25. これは常に出力に0 0 0を与えますか?
- 26. OpenGLのデプスバッファ
- 27. OpenGLデプスバッファ問題
- 28. OpenGL ESデプスバッファ
- 29. AngularJS $ index常に0
- 30. アンドロイドでglreadpixelsを使用する方法 - 通常はゼロを得る
関連する、機能gglReadPixelsを使用すると、ドキュメントを詳しく見てみた場合、深さのコンポーネントを受信する機会がありますが、私は動作しません。 openGlを使用して、さまざまなオブジェクトを表示する3Dウィジェットを作成します。コカオブジェクトを指している場合は、カーソルの下のポイントの座標(オンサイトの座標はオンサイト)を見つける必要があります。すべてのレンダリングはシェーダを通過します。 与えられたピクセルの深度バッファの深さ値を取得したいと思います。その多くは、これを行う方法を示していますが、同じことをしますが、glReadPixelsは常にピクセルの深度が0であることを知らせます。 – ygarnui
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
あなたは可能性衝突の検出を検索します。 – Ferdi