問題タブ [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.
iphone - OpenGL ES 2.0で深度バッファーを使用して立方体を描画するにはどうすればよいですか?
OpenGL ES 2.0とデプスバッファを使用して、立方体を描画しようとして成功しませんでした。
どこが間違っているのかを確認するために比較できる、利用可能なこの例はありますか?
iphone - なぜデプスバッファが必要なのですか?
このプロジェクトではキューブがデプスバッファなしで描画するため、デプスバッファを使用する必要がある理由がわかりません。
英語が下手でごめんなさい。私はロシア人で、1。5年前に英語を学び始めました。
opengl - ZバッファからZ値を取得する方法
OpenGLでの描画に問題があり、デプスバッファに配置されている値を正確に確認する必要があります。誰かがこれらの値を取得する方法を教えてもらえますか?ありがとうクリス
ios - 深度バッファへのテクスチャ データの書き込み
で説明されている手法を実装しようとしています: Compositing Images with Depth。
アイデアは、既存のテクスチャ (画像から読み込まれた) を深度マスクとして使用して、基本的に 3D を偽造することです。
私が直面している問題は、glDrawPixels が OpenglES で利用できないことです。iPhoneで同じことを達成する方法はありますか?
opengl - OpenGL デプス バッファの問題
最近のいくつかのプロジェクトでは、ここでいくつかのデモを見ながら見つけたいくつかのユーティリティ ファイルを使用しています。
つまり、opengl.h と呼ばれるファイル - 主に glew と別のファイル gl_font のようなシェーダーを管理するために使用されます。
gl_font は、頂点バッファー オブジェクトを使用して画面にフォントをレンダリングするために使用するクラスです。
ただし、これを使用してゲームのフレームレートをレンダリングすると、スカイボックス以外のすべてが正しく描画されます。何らかの理由で、ここに示すようにスカイボックスが白くレンダリングされます。フォントをレンダリングしないと、このようになります。
私が最も重要だと思う gl_font クラスのいくつかの部分を次に示します。
glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);
glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT | GL_TEXTURE_BIT); に変更してみました。背景テクスチャは返されますが、フォントはレンダリングされません。
これは、フォントがレンダリングされたときの深度バッファーのイメージであり、レンダリングされていないときの外観です。
誰でもこの問題に光を当てることができますか?
どんな助けでも大歓迎です!
ありがとう。
android - Androidデプスバッファの問題:問題が発生している人へのアドバイス
OpenGLデプスバッファがどのように機能するかを誤解していたと信じて、今週はコードの記述と再書き込みに約30時間を費やしました。私が試したものはすべて失敗しました。私は今、OpenGLのAndroid実装のエラーである可能性があるものを見つけることによって私の問題を解決しました。
このAPIエントリを参照してください:
http://www.opengl.org/sdk/docs/man/xhtml/glClearDepth.xml
void glClearDepth(GLclampddepth);
デプスバッファがクリアされるときに使用されるデプス値を指定します。初期値は1です。
Androidの実装には、このコマンドの2つのバージョンがあります。
整数値を取るglClearDepthx 、クランプ0-1
浮動小数点値をとるglClearDepthf、クランプ0-1
glClearDepthf(1)を使用すると、期待どおりの結果が得られます。glClearDepthx(1)を使用すると、私が行っていたように、異なる結果が得られます。(1がデフォルト値ですが、引数1を指定してコマンドを呼び出すと、まったく呼び出さない場合とは異なる結果が生成されることに注意してください。)何が起こっているのかはわかりませんが、深度バッファーがクリアされて、値とは異なる値になりました。指定しました。
opengl - OpenGL描画モデルの奇妙な深さ/ブレンド
私は私の人生のために理解できない奇妙な問題を抱えています。MayaからOBJモデルファイルをロードし、OpenGL環境でレンダリングしています。これはうまくいくようで、私の独立したモデルビューアでは、正しく表示されます。ただし、ゲーム環境にロードすると(私が制御できないやや奇妙な射影行列を使用して)、モデルが正しく表示されません。
モデルを回転させることで正しい位置にあるように見える頂点は、3Dの正しい感覚を与えます。ただし、深度関数に応じて、モデルのさまざまな部分が(誤って)表示されます。
たとえば、人のモデルで、人が左から右に歩いている場合(たとえば、モデルの右側がカメラに表示されている場合)。深度関数がに設定されてGL_LEQUAL
いる場合、胴体の前にいるときに人の右腕を見ることができません。ただし、モードがに設定されてGL_LESS
いる場合は、胴体を通して左腕を見ることができます。これは写真で見やすいものの1つなので、ここに進みます。
GL_LESS
またはGL_NOTEQUAL
:
GL_LEQUAL
またはGL_ALWAYS
:
他の深度関数では何も表示されないことに注意してください。GL_LEQUALシリーズの最初の画像では、左腕が胴体によって部分的に隠されているはずのときに、胴体によって部分的に隠されていることがわかります。
モデルのレンダリングに使用されるコードは次のとおりです。
助けてくれた人のおかげで、これは私をかなりの数日間困惑させました。
directx - 最初のメッシュの後に深度情報がありません
Direct3D10アプリにSlimDXを使用しています。アプリでは、2つ以上のメッシュをロードし、画像をテクスチャとしてロードし、シェーダーにfxコードを使用しました。コードはSlimDXのサンプル「SimpleModel10」から変更されました
ドローコール、シェーダーセットアップコードを、1メッシュ、シェーダー(エフェクト)、ドローコールを管理するクラスに移動します。次に、このクラスの2つのコピーを初期化してから、draw関数を次々に呼び出します。
メッシュのZ位置をどのように変更しても、後で描画される出力は常に一番上に残ります。後で、PIXを使用して描画呼び出しをデバッグすると、最初のメッシュには奥行きがありますが、2番目のメッシュには奥行きがないことがわかりました。私は3つのメッシュで試しましたが、2番目と3番目のメッシュにも奥行きがありません。面白いのは、同じドローコールを使用して、同じクラスからすべてがインスタンス化されることです。
何がそのような問題を引き起こした可能性がありますか?
以下は、クラスの描画関数のコードの一部です。いくつかのクラスが長いため、残りは省略しました。サンプルの既存のOnRenderBegin()とOnRenderEnd()を保持します。
編集:多くのデバッグとコードの分離の後、私は犯人がFont.Draw()
私のDrawString()
関数にあることを知りました
Font.Drawをコメントアウトして問題を解決します。たぶんそれは自動的にいくつかの状態を設定し、次のメッシュ描画が深さを破棄する原因になります。SlimDXのソースコードを今調べています。
android - glDepthMask(GL_FALSE)は、一部のGPUのフレームバッファーを破棄します
glDepthMask(GL_FALSE)
フレームのレンダリング中に、デプスバッファの書き込みを無効にすることがあります。これは一部のGPU(Motorola DroidのPowerVRなど)では完全に正常に機能しますが、たとえばAdrenoGPUを搭載したHTCEVOでは、フレームバッファーが完全にゴミになってしまいます(どこかにレンダリングしたメッシュの痕跡が表示されますが、画面全体がほとんどゴミ箱に入れられています)。
glDepthMaskを常にtrueにすると、すべてが正常に機能します。
アルファレンダリングの一部でglDepthMaskをオフにする必要があります。デプスライトをオフにすると、フレームバッファが破壊される原因は何ですか?
performance - GLSL で深度バッファ ヒストグラム テクスチャを作成する
現在のコンテキストの深度バッファを使用して、表示しているテクスチャに影響を与えています。テクスチャは 1 次元でグレースケールです。左から右へは、近いところから遠いところを表します。特定の深度にあるピクセルが多いほど、そのポイントのテクスチャは明るくなります。黒はその深度にピクセルがなく、白はすべてのピクセルがその深度にあります。
glReadPixels()
これで、深度バッファを処理し、CPU で解析してからテクスチャに書き戻すソリューションができました。当然、これはアプリケーションの本当のボトルネックです。
デプス バッファがシェーダーなどで分析され、その方法でテクスチャが更新される、すべての GPU ソリューションを探しています。深度値を読み取り、テクスチャ内の対応するピクセルまで増加するフラグメント シェーダを作成することを考えましたが、それにはフラグメント シェーダが他のテクスチャに書き込むことができる必要があります。特に同じピクセルに書き込む必要がある場合は特にそうです。
私が見逃しているトリックやテクニックはありますか、それともこれに CPU を関与させる必要がありますか?