問題タブ [shadow-mapping]
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.
javascript - Three.js の影が遮るもののない面にキャストされ、起動するための解像度が低い
これが私の問題です:
.
テキストの影はそこにあるべきではなく、shadowMap の解像度を変更しても何も変わりません。これは、メッシュの生成に使用されるコードです。
私のレンダラーは次のように設定されています。
どんな援助も大歓迎です。
c++ - シャドウ マッピング。フレームバッファ エラー 36060
私はチュートリアルからこれを行っており、チュートリアルのコードを正確に持っています。しかし、何らかの理由で機能していません。それでデバッグしたところ、36060エラーがあり、私が知る限りGL_FRAMEBUFFER_INCOMPLETE_READ_BUFFERとしても知られていることがわかりましたが、その理由はよくわかりません。私は答えを探しましたが、誰もが glReadBuffer(GL_NONE); について言いました。しかし、それでも同じエラーが発生します。
編集: glReadBuffer がまったく機能しないようで、理由がわかりません。glGetError を試しましたが、エラーは発生しませんでした
c++ - ポイントライト シャドウ キューブ マッピング
それで、指向性ライト(無限に拡張)のシャドウマップを作成することができました。今、私はポイント ライト シャドウ キューブ マップを作成しようとしているので、シャドウはライト -> フラグメントの方向に広がります。次のように新しい FBO を作成しました。
この関数は、再整形時に呼び出されます (つまり、初期化時に言えます)。再整形は、プログラムの開始時に 1 回呼び出されます。
次に、light_view マトリックス、異なるキューブ面の各ビュー、および投影マトリックスを次のように作成します。
射影行列は大丈夫ですか?ディレクショナル ライトの場合のように正投影ではなく、キューブマップを使用する場合は遠近法を使用する必要がありますか? 値が正しいかどうかはわかりません。これが私が持っているものです。テクスチャの幅と高さは 1366 x 768 で、これは私のウィンドウ サイズです。シーン全体は z 軸で -70 から 70 で、合計 140 です。 、私は pi/4 の fov を選びました。
最初のパスに進みます - できればキューブマップの 6 つの面を生成します。
次に、フラグメントの位置に基づいて影を描画する必要がある2番目のパス(描画関数またはシェーダーでこれを行う必要がありますか?)
この最後の部分でわかるように、カメラの位置から描画し、最初のパスから生成されたキューブマップをシェーダーに渡します。この時点まで、私にはいくつかの誤解があり、おそらくいくつかの間違いがあります。
最初のパス (シェーダーから) から何を返しますか?ディレクショナル ライトのシャドウ マッピングを行ったときに深度 (glFragcoord.z) を返しましたが、vec3 の方向を返す必要がありますか? それを計算するにはどうすればよいですか。シェーダーに渡すために他に何か必要ですか?
第二部は大丈夫ですか?オブジェクトを描画し、キューブ マップをシェーダーに渡して、ライトとの関係でどのフラグメントがどこにあるかをシェーダーに計算させるだけですか? もしそうなら、どうすればこれを計算できますか?
最初のパスのシェーダーは次のとおりです (したがって、6 つのライト ビューからキューブマップを生成します)。
そして、2 番目のパスのシェーダー (ワールド空間のピクセル位置 - ワールド空間のライト位置から vec3 を取得してシャドウを計算しようとしました)
コードの壁で申し訳ありません。より良いヘルプが得られるように、関連するすべてのものを投稿したかったのです。私の問題は、フラグメント シェーダーの出力色を 0.5 に設定したため、すべてが半黒でレンダリングされることです。そうしないと、すべてが黒でレンダリングされます。