問題タブ [lighting]
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: Using shaders to create vertex lighting by using pre-calculated colormap?
First of all, I have very little knowledge of what shaders can do, and i am very interested in making vertex lighting. I am attempting to use a 3d colormap which would be used to calculate the vertex color at that position of the world, and also interpolate the color by using the nearby colors from the colormap.
I cant use typical OpenGL lighting because its probably too slow and theres a lot of lights i need to render. I am going to "render" the lights at the colormap first, and then i could either manually map every vertex drawn with the corresponding color from the colormap.
...Or i could somehow automate this process, so i wouldnt have to change the color values of vertexes myself, but a shader could perhaps do this for me?
Questions is... is this possible, and if it is: what i need to know to make it possible?
Edit: Note that i also need to update the lightmap efficiently, without caring about the size of the lightmap, so the update should be done only at that specific part of the lightmap i want to update.
opengl - OpenGLでシェーダーなしでシーンに依存しない高速で簡単なシャドウを作成する方法
部屋の中央に、立方体と1つの光源でいっぱいのメッシュ(球など)を配置します。「標準」(固定)関数のみを使用して、OpenGLですばやく簡単にシャドウキャストを作成するにはどうすればよいですか?注:結果には、立方体と球の影も含まれている必要があります。
opengl - OpenGL:ライトを鏡面反射光と拡散反射光の両方として指定するとどうなりますか?
レッドブックの球体照明の例で、私はこれを読みました:
それからそれは言う:
この例では、glLightfv()の最初の3回の呼び出しは、GL_AMBIENT、GL_DIFFUSE、およびGL_SPECULARパラメーターのデフォルト値を指定するために使用されているため不要です。
これまでのところ理解しているように、すべての光源には、周囲、拡散、鏡面反射パラメータのデフォルト値があり、これら3つの配列は、これらのデフォルト値を指定します。 すべての光源はデフォルトで拡散反射、鏡面反射、周囲光ですか?
opengl - モデルごとのローカル回転が openGL Lighting を壊す
OpenGL ライティングに問題があります。私の問題は次のとおりです。オブジェクトの回転が 0 の場合、照明は問題ありません。それ以外の場合、照明は機能しますが、シーンに関して固定されたままではなく、オブジェクトとともに回転します。
シンプルですね。OpenGL FAQには、これに関するいくつかの簡単なアドバイスがあります: glLightfv(GL_LIGHT0, GL_POSITION...) に渡される座標は、現在の MODELVIEW 行列で乗算されます。だから私は間違った場所でこれを呼んでいるに違いない...私がそうではないことを除いて。MODELVIEW マトリックスを変数にコピーしてデバッグしましたが、オブジェクトがどのように回転されても同じままです。だからそれは何か別のものでなければなりませんが、私は何について途方に暮れています.
glDrawArrays を使用してモデルを描画し、回転クォータニオンと平行移動から構築されたマトリックス上で glMatrixMult を使用して、モデルをワールド内に配置します。これはすべて glPushMatrix/glPopMatrix 内で行われるため、ライトに副作用はありません。
私のレンダリング プロセスの簡易バージョンは次のようになります。
法線が乱れているのではないかと思っていましたが、レンダリングすると問題なく表示されます。openGLライティングに影響を与える可能性のあるものは他にありますか? FAQ には次のように記載されています。
光源が照明器具の一部である場合は、モデリング変換も指定する必要がある場合があります。これにより、照明の位置が周囲の器具ジオメトリと同じ場所になります。
これは、ライトをシーンに変換する必要があることを意味すると解釈しました。
opengl - Glsl phong シェーダとカメラ
この質問がすでに多く寄せられていることは知っていますが、まだ正しく答えることができません。
そのため、頂点シェーダーでは、ライトの位置と目の位置を取得する必要があります。これが私のコードです:
その結果、カメラの動きに合わせて光が移動します。ここで正確に何をする必要がありますか?おそらく非openglマトリックスを使用しません。
適切なカメラ制御を備えた glsl 照明の例はありますか?
* アップデート *
Kos のおかげで、「ライトがカメラとともに移動する」問題を解決できましたが、別の問題があります。
私は持っている
これで、2 番目のティーポットが (0, 0, 0) のティーポットと同じように点灯します。これを修正するにはどうすればよいですか?
次の場合の頂点シェーダー コード:
android - この Android 鏡面照明の例が意図したとおりに機能しないのはなぜですか?
次のコードで生成されたバイナリにスペキュラ ハイライトが表示されないのはなぜですか?
コードからそのまま見えるものを次に示します (鏡面照明コンポーネントのみ): http://i.imgur.com/4kvIx.png
アンビエント照明コンポーネントのみ: http://i.imgur.com/80Tjx.png
拡散照明コンポーネントのみ: http://i.imgur.com/r5PkO.png
おそらく興味深いのは、glOrtho への呼び出しの zNear/zFar パラメーターが何もクリップしていないように見えることです。鏡面ハイライトを表示するようにシーンを適切に設定しましたか (ライトを頂点の近くに配置しようとしました)。
lighting - Xbox 360 の XNA 4.0 での照明のデザイン パターン?
Xbox 360 の XNA で照明を処理するための適切なパターンを誰かが持っているかどうか疑問に思っています。現在、スポットライト コンポーネントを実装しようとしています。複雑さを軽減する手段としての遅延シェーディングについて読んだことがあります。また、これは Xbox 360 にとっては良い考えではなく、XNA 3.0 よりも XNA 4.0 の方が難しいと聞いています。私の目標は、ゲームで使用できるスポットライト効果をカプセル化する再利用可能なコンポーネントを作成することです。
ありがとう、
-ジョン
opengl - Cg を使用した OpenGL スポットライト
Cg でスポットライト効果を実現しようとしています。私はすでに、通常のアンビエント ライティングとディフューズ ライティングを行うことができました。
スポットライトの基本的な機能 (位置、方向、カットオフ角度) は理解していますが、これらを Cg で処理することはまだできません。
これは、スポットライト パラメータを計算する方法です。
directionは、スポットライトが向けられているピクセルです (例: (0, 0, 0) )
lightPositionはライトの位置です
Pは、私が照らそうとしているポイントです。IN.position は頂点シェーダーから取得され、既に modelViewProj で乗算されています。
angleは、光の方向と光からの方向の間の角度の余弦であり、私が照らそうとしている点までです。
問題は、ライトの方向を変更してもスポットライトにまったく影響がないことです。スポットライトは常に 0,0,0 を中心に配置されます。lightPosition を変更すると、スポットライトが変更されますが、それでも 0,0,0 から始まり、ライトの位置の反対側に拡大します
もう 1 つのことは、方向ベクトルを計算するときに、lightP の代わりに lightPosition を使用することです。lightP を使用すると、スポットライトがまったく機能しなくなります。
また、スポットライトはシーンの半分だけを照らします。
これに関する私の主なリファレンスは、 The Cg Tutorial のChapter 5(Lighting)でした。
opengl - Minecraftはどのように照明を実行しますか?
私が精通している唯一のモデルは拡散照明ですが、これはそれよりもはるかに複雑に見えます。
3d - ディファード シェーディング、法線マッピング、およびライトから離れた方向のセルフ シャドウ サーフェス
法線マッピングとサーフェスがライトから離れているという問題に遭遇しました。これらのサーフェスは、光に面していないため、まったく照らされるべきではありません。ただし、フラグメントの法線がたまたま十分に曲がっている場合、これらのサーフェスからかなりの数のフラグメントが照らされる可能性があります。これによって引き起こされたアーティファクトは、たとえば、一方の側面が光から直接離れたところを向いているボックスではっきりと見えます: その側面のほとんどすべての破片は (想定どおり) 黒ですが、まだいくつかの白い破片が表示されています (申し訳ありませんが、スクリーンショットはありません)。現在利用可能ですが、通常のマッピングを行ったことがある場合は、私が話していることを理解する必要があります)。
フォワード レンダラーでこれを修正する簡単な方法を見つけました。光の強度を (4*lightDirection.Z) で乗算するだけです。理由は、ライト ベクトルとサーフェスの法線ベクトルの(クランプされた) 内積をライトの強度に掛ける必要があるためです(面が向こうを向いている場合、内積は負になり、ライトの強度は 0 にクランプされます)。タンジェント スペースでは、この法線は常に (0,0,1) であるため、内積は単に lightDirection.z です。乗数 4 は、光の強度が低下しないようにするためだけに存在します (面が向きを変えていない場合)。
今、遅延レンダラーに同じ機能を実装しようとしましたが、ワールド空間で計算を行っているため、この単純なアプローチが機能しないことにすぐに気付きました。この計算を行うには、そのフラグメントの実際の法線と、このフラグメントが配置されているサーフェスの法線の両方が必要です。もちろん、この情報をテクスチャに保存することもできますが、このトリックを行うためだけにさらに 3 つのフロート (パックする場合は 2 つ) を費やすと、かなりコストがかかります。
回避策はありますか?
ありがとうございました。