問題タブ [skybox]
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.
c++ - OpenGL: スカイボックスが拡大しすぎた
ゲームにスカイボックスを実装しようとしています。私が使用している画像は次のとおりです。
残念ながら、これは非常に拡大されており、テクスチャのピクセルの一部しか表示されていません。次のようになります。
スカイボックスを作成するための私のコードは次のとおりです。
スカイボックスのレンダリング コードは次のとおりです。
フラグメント シェーダーは単純です。
頂点シェーダーと同様:
編集:射影行列を作成するための私のコードは次のとおりです。
ここに私のFovがあります:
c - C で openGL を使用してスカイボックスを作成しようとしていますが、黒い画面しか表示されません
C で OpenGL を使用してスカイボックスを作成しようとしています。多くのチュートリアルを表示し、多くの人のコードを調べましたが、何も見逃していないとは思いませんが、黒い画面が表示されます。私はすべて間違っていましたか?
opengl - OpenGL/GLSL を使用するとキューブ マッピングが正しく機能しない
キューブ マッピング テクニックを使用すると、奇妙な動作が発生します。すべてのピクセル シェーダーが黒色を返します。その結果、黒い画面が表示されました。
状況は次のとおりです。
シンプルなキューブ メッシュ (スカイボックス) とトラック ボール カメラだけで構成されたシーンがあります。
次に、リソース (6 つの個別のテクスチャの側面) を調べてみましょう。
画像の詳細は次のとおりです。
ご覧のとおり、これらのテクスチャは GL_RGB 形式でロードする必要があります。
ここで、初期化の部分として、クライアントの C++ テクスチャ ロード コードを見てみましょう (「DevIL」ライブラリを使用してイメージをロードします)。
メイン ループ部分に関して、シェーダー プログラムに送信する情報 (テクスチャとマトリックス データ) は次のとおりです。
キューブ マップ テクスチャがテクスチャ ユニット 1 にバインドされていることがわかります。
これが頂点シェーダーです。
そして最後にフラグメント シェーダー:
したがって、コンパイルおよび実行されたすべてのプログラムは、次の結果を示します。
しかし、私は正確に NVIDIA NSight Debugger を使用しており、最初にキューブ マップが GPU に正しく読み込まれていることを示したいと思います。
上のコードに書かれているように、テクスチャはユニット テクスチャ 1 にバインドされた RGB テクスチャであり、GL_TEXTURE_CUBE_MAP テクスチャ タイプです。したがって、ここまではすべて正しいようです。
そして、フラグメントシェーダーで次の行を置き換えると:
行によって:
ワイヤーフレームなしで次の結果が得られます (モデル空間の頂点座標を色として直接レンダリングします)。
ワイヤーフレームでも同じ結果になります:
さらに、次の行を正確にしたい:
常に「0」値を返すので、エラーはありません!
したがって、これらの最後の 2 つの写真は、マトリックス情報が正しく、頂点座標も正しいことを示していると思います (さらに、トラック ボール カメラを使用しており、シーン内を動き回るとキューブ アーキテクチャを認識できます)。したがって、シェーダー プログラムで復元したすべての情報は、キューブ サンプラーを除いて正しいものです。問題はこのサンプラーにあると思います。ただし、上で見たように、キューブ マップは正しく読み込まれているようです。
私はこの状況の前で本当に迷っています。すべてのピクセル シェーダーが #000000 色を返す理由がわかりません (RGBA 形式も使用してみましたが、結果は同じです)。
c++ - 動的キューブマップのレンダリング (OpenGL)
シーンを 6 回レンダリングして、キューブマップの側面に配置しようとしています。これを 1 回のパスで実行できるジオメトリ シェーダーの学習に移る前に、まずこれを適切に実行したいと思います。コードは次のとおりです。
IBL と反射/屈折に使用される静的キューブマップを実装した以前のプロジェクトのコードを変更しました。必要であると思われる場合は、シェーダー コードを提供します。この段階では、意味不明な部分のみがレンダリングされます。
最終結果
実際のシーン
更新 大きな四角形は、積み重ねられた変換を適用しなかった setViewMat 関数のバグの結果です。シーンのみをレンダリングするようになり、テクスチャは黒になります。AMD gDEBugger を使用して、結果のキューブマップを確認しましたが、これは黒だけです。したがって、最初のfboバインディングか、最初のパスで各面をどのようにレンダリングするかが問題だと思います。
c++ - 遅延レンダリング Skybox OpenGL
遅延レンダリングを実装したばかりで、スカイボックスの動作に問題があります。レンダリング ループの最後でスカイボックスをレンダリングしようとすると、黒い画面しか表示されません。レンダリング ループは次のとおりです。
以下は、スカイボックスのレンダリング関数です
スカイボックスの頂点シェーダーは次のとおりです。
スカイボックスのフラグメント シェーダーは、出力カラーを に設定するだけtexture(cubeMap, TexCoord)
です。頂点シェーダーからわかるように、位置のz
コンポーネントを に設定しw
て、深度が常に 1 になるGL_LEQUAL
ようにします。また、深度関数を に設定して、深度テストに失敗するようにします。これは、他のオブジェクトがまだ描画されていない場所にスカイボックスを描画するだけではありませんか? 黒い画面になるのはなぜですか?
スカイボックスを単独で描画すると問題なく表示されるため、スカイボックスを正しく設定したことはわかっています。
opengl - 単一の画像のスカイボックスをどのように作成しますか?
6 つのファイルを使用することを除けば、スカイボックスは既に動作するようになっています。6 つではなく 1 つのファイルを使用する方法を知りたいです。私はインターネット全体を見てきましたが、うまくいくものを見つけることができません。以下は、画像を cubemap に入れる loadCubeMap 関数です。