問題タブ [depth-buffer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - フラグメントシェーダーから32ビットのデプスバッファーにアクセスしますか?
私はシャドウイングのために次のテクニックを実行しようとしています。NVIDIAサイトでそれを読みましたが、それは良いテクニックのように思えました。CPUでシャドウボリュームを計算するよりも、「本当」のように見え、これをソフトシャドウに使用できるので、私はそれを好みます。:
1回目のパス:
- LIGHT0の観点からデプスバッファを埋めます。このデプスバッファを2回目のパス用にコピーします。(*)
2回目のパス:
- EYEから、およびフラグメントごとにビューをレンダリングします。
- (*)に格納されているデプスバッファのXY位置を取得します。対応する32ビット値を取得します。
- ライトまでの距離を計算します。
- この距離を、保存されている深度バッファ値と一致させます。
- 大きい場合、フラグメントはglDisable(LIGHT0)モードで描画されます。それ以外の場合、フラグメントはライトを有効にして描画されます。この目的のために、2つのフラグメントシェーダーを使用し、距離の比較に応じて2つのフラグメントをブレンド/切り替えます。
ここで、いくつかの理由で、フラグメントシェーダーの最後の手順を実行したいと思います。ひとつは、シャドウイングの「効果」を考慮したいということです。私のゲームでは、障害物までの距離が小さければ、シャドウは非常に「厳密」になると言っても過言ではありません。 。遠くにあると、グローバルイルミネーションがより強くなり、影がわずかになります。これは、カードゲームであるため、より複雑な「凹型」の形状には当てはまりません。
しかし、私はopenGLを初めて使用し、次のいずれかの方法を理解していません。
- 2Dテクスチャにコピーせずに、フラグメントシェーダーの1番目のパスの深度バッファーにアクセスする方法。それは不可能だと思いますか?
- 32ビットのデプスバッファを各R、G、B、Aコンポーネントに8ビットがあるテクスチャにコピーしてから、フラグメントシェーダーでその値を再アセンブルすることが、私ができる最も効率的な方法ですか?
- クロスプラットフォームの拡張機能がある場合は、これに使用できます。
誰かが私を助けてくれるか、私にいくつかのアイデアを与えることができれば、私は今ちょっと困惑しています。良いハードウェアと自由な時間がないので、すべてをデバッグ/試してみるのに疲れるプロセスになります。
android - AndroidOpenGLESフレームバッファオブジェクト-深度バッファをテクスチャにレンダリング
OpenGLES1.1およびOpenGLES2.0をサポートするFroyoを実行しているAndroidデバイスを使用しています
デプスバッファをテクスチャにレンダリングしたい。他のプラットフォーム(iPhoneを含む)でのOpenGL、OpenGL ESの例をいくつか見てきたので、私はいくつかのFBO構成を試しました。
カラーテクスチャを使用したFBOセットアップを取得できるようですが、デプステクスチャをアタッチするたびに失敗します。
私の現在のコードはこの例に基づいていますが、描画バッファと読み取りバッファをnoneに設定する代わりに、カラーテクスチャも作成しています。
テクスチャに奥行きをレンダリングするようにAndroidでOpenGLESFBOを構成する簡単な例はありますか?または、サポートされているものとサポートされていないものを説明するドキュメントはありますか?
コメントありがとうございます-Androidで見つけて動作する場合は、ES1.1のソリューションが特に必要でした。ES 2も見てみたいです。深度情報をカラーバッファにパックするというアイデアが理解できません。アイデアをよりよく理解するために参照できるリファレンスはありますか?
コードに関して-私のソースは私が上に投稿したリンクとほとんど変わりません。フレームバッファのステータスは、完了していません。
フラグメントシェーダーの提案をありがとう-私は今アイデアを得る。別の解決策を機能させることができない場合は、それを検討します。私の理想は、深さと色を同時に取得することです。私がそれを助けることができれば、色と深さを別々にレンダリングしたくはありません。
iphone - opengl es2.0iphoneでデプスバッファを使用する
opengles1.1でデプスバッファを使用したチュートリアルに従いました。しかし、私はopengles2.0を使用しています。実装されたコードはエラーになります:完全なフレームバッファオブジェクト8cd6を作成できませんでした。以下の実装コードを参照してください。
よろしくニクラス
opengl - OpenGL:デプスバッファから完全に透明なフラグメントをマスクできますか?
完全に透明なフラグメントの深度を深度バッファに書き込まないようにOpenGLに指示する方法はありますか?
念のために言っておきますが、レンダリングしたいテクスチャは決して半透明ではありません。そのアルファ値は1.0または0.0のみであり、GL_NEARESTフィルターを使用しているため、その間の値に補間されることはありません。
フラグメントのアルファ値が0.0であることが判明した場合、OpenGLがデプスバッファに単純に書き込めないのは合理的だと思います(このようにして、このようなテクスチャのプリミティブを任意の順序でレンダリングできます)が、 OpenGLにそれをさせる方法を見つけることができません。誰かがそれが可能かどうか、そしてその場合、それがどのように行われるかを知っていますか?
opengl - OpenGL では深度テストがデフォルトで反転されていますか、それとも間違っていましたか?
私は OpenGL を丸 1 週間、またはそれと同等のもので遊んでいます。2Dの次は3Dに挑戦中です。http://johnnylee.net/projects/wii/の 3 番目のビデオで見られる 3D シーンを再現したいと思います。
テクスチャと深度ですべてを適切に機能させるのに苦労しました。
最近、視覚的に同じ影響を与える2つの問題が発生しました。
- 2D で見つけた手法を使用しても、3D ではうまくブレンドできないテクスチャを持つもの。
- オブジェクトが上から下に表示されるもの。ここで公開されている問題のように: OpenGL の深度バッファ
私は両方の問題を解決しましたが、特に 2 番目の点について、問題が解決したかどうかを知りたいです。
最初のものについては、私はそれを持っていると思います。ディスクの外側にアルファがある丸いターゲットの画像があります。OpenGL内で問題なくロードされます。(Z オーダーの問題により) その背後にある他のターゲットの一部は、ペイントに使用した自然に正方形の四角形の透明な領域によって隠されていました。
その理由は、深度バッファに関して、テクスチャのすべての部分が完全に不透明であると想定されているためです。glEnable(GL_ALPHA_TEST)
をテストで使用するとglAlphaFunc(GL_GREATER, 0.5f)
、テクスチャのアルファ レイヤーがピクセルごとの (ブール値) 不透明度インジケーターとして機能するため、ブレンドがまったく役に立たなくなります (私の画像にはブール値の透明度があるため)。
補足質問:ちなみに、ブレンドに使用するアルファレイヤーとは別のソースをアルファテストに指定する手段はありますか?
第二に、問題の解決策を見つけました。色と深度のバッファをクリアする前に、デフォルトの深度を 0 に設定しglClearDepth(0.0f)
、「より大きな」深度関数を使用しましglDepthFunc(GL_GREATER)
た。
私にとって奇妙に見えるのは、深さが 1.0 であり、深さ関数がGL_LESS
デフォルトで「少ない」ことです。オブジェクトが反転して表示されないように、基本的に反転しています...
私はそのようなハックをどこにも見たことがありませんが、一方、描画する順序に関係なく、オブジェクトが間違った順序で体系的に描画されるのを見たことはありません!
わかりました、ここにコードの一部があります(必要以上に削除されていないことを願っています)。これは現在、私が望むように機能しています。
iphone - (iOS) OpenGL ES (2.0) アプリケーション、Z でオブジェクトを移動するには?
XCodeでOpenGL ES(2.0)アプリ(iOS)のソースコードをいじっていて、カラフルな四角をZ座標で動かそうとしていたので、シェーダーコードを
gl_Position.y += sin(翻訳) / 2.0;
に
gl_Position.z += sin(翻訳) / 2.0; 成功しませんでした。
正方形はまったく動かない。XとYの考えでうまく動きます... OpenGLを初期化するときにアクティブにする必要があるオプションはありますか? ありがとう!
更新: 例をアップロードしました。これはおおよそ、XCode が生成する OpenGL ES テンプレートです。深度バッファーを作成するための呼び出しと、Shader.vsh の gl_Position.z += sin(translate) / 2.0f に gl_Position.x を追加しただけです。
Z座標上で正方形が正弦波状に動くのを見たいのですが、そうではありません。静止しているか、sin() を乗算すると、周期的に現れては消えます。
他に何をすべきかわからないので、誰かが私を助けることができれば、私は最も感謝しています.
ソースは zip にあります: http://cl.ly/24240x2D1t2A3I0c1l1P
ありがとうございました!
java - JOGL 深度バッファリングが機能しない
私は数日間JOGLを使用していますが、これが大きな障害になりつつあります。図形を正しい z オーダーで描画することができません。代わりに、OpenGL に指定された順序で図形が描画されます。
私はこれを調査するために過去数時間を費やしましたが、一般的な解決策 (および私の反応) は次のようです。
視錐台が正しいことを確認してください
- 錐台を再確認しましたが、正しいようです
- カスタムビルドの錐台の代わりに gluLookAt に切り替えました
- 問題がパースペクティブではないことを確認するためだけに、glOrthof に切り替えました。
- 私はまったくビューを設定していません。代わりに、デフォルトと思われる-1、1の範囲で作業しています
次の呼び出しが init にあることを確認します。
- gl.glEnable(GL.GL_DEPTH_TEST);
- gl.glDepthFunc(GL.GL_LEQUAL);
再描画のたびに深度バッファをクリアしていることを確認してください
- gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
この問題が発生しているプログラムの非常に基本的なサンプルを以下に示します。JOGL を使用して実行すると、Z 位置 -0.5f にある赤い三角形が常に一番上に表示され、三角形は互いに回転します。2 つの三角形の頂点呼び出しを入れ替えると、緑色の三角形が常に上になります。
これは私にとって大きな頭痛の種だったので、JOGL や OpenGL の一般的な洞察は役に立ちますが、何が間違っているのかわかりません。
また、簡潔にするために、ウィンドウを破棄するための適切なコードを削除したことに注意してください。
java - Java 3D シーンで隠されていないヘルス バーを描画する
だから私はJava 3Dでゲームに取り組んでいて、ユニットの上に浮かぶヘルスバーを実装しています。
まず、ユニットの位置の上の 3D ポイントにクワッドを描画し、ビルボード ビヘイビアーを適用して常にカメラの方を向くようにしました。
しかし、私が立ち往生している問題は、ヘルスバーが他の風景によって時々隠されることです.
そのため、次のオプションを検討しています。
ヘルス バー ピクセルの Z / 深度バッファー値をオーバーライドして、レンダラーが後でレンダリングするものよりもカメラに近いと判断するようにします。
やってみ
renderingAttributes.setDepthTestFunction(RenderingAttributes.ALWAYS)
ました。レンダラーは、以前に同じ領域に描画したものの上にヘルス バーを描画しますが、後で他の風景がヘルス バーの上に描画されると役に立ちません。Java 3D でこれを行うためのより良い方法はありますか?
ヘルスバーの 3D 位置をカメラの前の 2D 平面に投影します。実行可能に思えますが、これに必要なすべての計算を再発明する前に、誰かが既存の解決策を指摘できるかもしれません。
Java 3D から LWJGL や jMonkeyEngine などへの切り替え (この問題だけでなく、Java 3D が機能しないという一般的な不満など)。この特定の問題に対してより柔軟であるかどうかはわかりませんが。私が読んだことによると、ゲーム開発における最悪の間違いの 1 つは、開発の途中でエンジンを切り替えることです。
opengl - glReadPixels GL_DEPTH_COMPONENT と色
OpenGL 描画から深さと色の情報を取得する方法は? 深度画像とカラー画像をディスクに保存したいと考えています。私が試したことは次のとおりです。
しかし、深さの配列だけが埋められているように見えますか?
iphone - 深度レンダー バッファを使用することの何が問題になっていますか? OpenGL ES 2.0
私はこのコードを使用します:
しかし、アプリケーションを実行していると、紫色の画面が表示されます。このコードの何が問題になっていますか?