問題タブ [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.
directx - Direct3D を使用してライトをワールド内で固定したままにする方法
私は OpenGL を何年も使用してきましたが、初めて D3D を使用しようとした後、シーン ライトをオブジェクトに固定するのではなく、ワールド内に固定したままにする方法を見つけるのにかなりの時間を費やしました。
OpenGL では、ライトの位置は MODELVIEW マトリックスを使用して他のすべてと同じように変換されるため、ライトを空間に固定するには、MODELVIEW をライトに必要な方法で設定し、glLightPosition を呼び出してからジオメトリ用に設定し、ジオメトリ呼び出しを行います。 . D3D では役に立ちません。
(コメント -- 私は最終的にこの回答を見つけましたが、Web や MSDN で役立つ情報を見つけることができませんでした。その時点でこの回答を見つけることができれば、数時間頭を悩ませる必要がなかったでしょう。 )
algorithm - タイルベースのゲームでどのタイルが点灯するかを計算する(「レイトレーシング」)
光源をサポートしたい、タイルベースの小さなゲームを書いています。しかし、私のアルゴリズム-fuは弱すぎるので、助けを求めてあなたのところに来ます。
状況は次のようになります。タイルベースのマップ(2D配列として保持)があり、単一の光源といくつかのアイテムが周りに立っています。どのタイルが光源によって照らされ、どのタイルが影になっているのかを計算したいと思います。
おおよそ、それがどのように見えるかを視覚的に補助します。Lは光源、Xは光を遮るアイテム、0は点灯しているタイル、-sは影になっているタイルです。
もちろん、部分的に隠されているためにタイルが半分影になっている可能性があるフラクショナルシステムはさらに優れています。アルゴリズムは完全である必要はありません-明らかに間違っていなくて、適度に速いだけではありません。
(もちろん、複数の光源がありますが、それは単なるループです。)
テイカーはいますか?
opengl - OpenGLで顔のエッジを滑らかにするテクニック
顔の法線を使用してOpenGLで人間のモデルを照らすと、各顔がモデルのどこにあるかが非常に明確になります。頂点法線を使用すると、ライティングはかなりスムーズになりますが、それでも目立ちます。追加の頂点(サブディビジョンなど)を追加せずに有機モデルを滑らかにするために利用できる手法はありますか?
c++ - OpenGL でのライティングの問題
OpenGL アプリケーションの開発に問題があります。
奇妙なことに、私と私の友人は Linux で OpenGL を使用して 3D シーンを開発しており、リポジトリにいくつかのコードがありますが、両方とも同じ最新バージョンをチェックアウトすると、同じコードが発生します。彼がコンパイルした後の彼のコンピューターでは、完全な照明モデルを見ることができますが、私の場合、私はアンビエント ライトのみを有効にしており、ディフューズやスペキュラー ライトは有効にしていません。
ドライバーの問題でしょうか?(彼はATiカードを使用し、私はnVIDIAカードを使用しているため)または静的ライブラリですか?
繰り返しますが、これは同じコードであり、異なるマシンでコンパイルされています..これは奇妙なことです。同じように見えるはずです。
助けやヒントをありがとう。
opengl - OpenGL GLSL 補間
GLSL を使用して OpenGL でポイント ライトを実装しようとしています。必要なすべてのデータをシェーダーに送信します。簡単にするために、ここでは拡散光のみを使用します。
私の例は、単一の光源で照らしたい巨大な三角形を示しています。光源は小さな青い三角形として表示されます。
拡散光の場合、光と表面の間の角度を知る必要があります。したがって、法線と光の方向を計算します。内積は、-1 から 1 の間の数値を与えますが、0 から 1 の間のすべてが照らされます。
ただし、この例ではこの角度が正しく計算されていないため、ここで立ち往生しています。シェーダーをデバッグするのは難しいので、サーフェスの色としていくつかの出力を使用しました。三角形の色として法線を使用し、ライトがどこにあっても表面は常に緑色でした。つまり、法線は y 軸を上に向けているため、正しく計算されます。つまり、ライトの方向が間違っているに違いありません。しかし、私はそれが間違っている理由を見つけることができません。ライトの位置と頂点の位置は、ワールド空間で頂点シェーダーに渡されます。頂点シェーダーは、それらを目の空間に変換し、ライトの方向を計算して、これをフラグメント シェーダーに渡します。
頂点シェーダー:
フラグメント シェーダー:
補間が本当に奇妙であることを明確に示すこの例の写真をいくつか追加しました。貼り付けたコードが正しいかどうか、またはコードの詳細を知る必要があるかどうかを知りたいです。さらに、この補間動作は正常ですか、それとも私のコードのバグですか?
http://img41.imageshack.us/img41/3566/interpolation.png http://img189.imageshack.us/img189/3566/interpolation.png
特に最初の写真は、光の中心点が光の真下ではなく、三角形の中心にわずかに移動していることを示しています。
「pos」をフラグメント シェーダーに渡し (つまり、補間されます)、フラグメント シェーダーで「lightDir」を計算すると、すべて正常に動作します。
graphics - ライト/レーザーショーシミュレーターに推奨される3Dプログラミングの側面?
こんにちは、私はライト/レーザーショーエディターとシミュレーターを開発したいと思います。もちろん、このためにいくつかのグラフィックプログラミングを学びます。C#とXNAの使用を考えています。
私が取り組んでいるプロジェクトを考えると、グラフィックプログラミングのどの側面に研究または焦点を当てるべきか疑問に思っていました。私はグラフィックプログラミングに慣れていないので、それについてはあまり知りませんが、たとえば、私が調べるかもしれない何かが(おそらく?)ボリューム照明であると想像します。
たとえば、さまざまな幅/色の「レーザー」をレンダリングするための実用的な方法は何でしょうか。どこかで円柱を描いてシェーダーを適用するところを読んだのですが、これがその方法であることを確認したいと思います。
これは大きなプロジェクトのように思われるので、光源を作成し、それらを簡単に操作できるようにプロパティを与えることから始めることを考えていました。私は、一度に特定の量のライトしかレンダリングできないことを(誤)読んだことがあります。8つだと思います。これはアンビエントライトにのみ適用されますか?この考えられる制限と、ヘッドライトやレーザーなど、私が使用するライトのほとんどが指向性であるという事実を考えると、これらをレンダリングするための別の方法は何でしょうか。それは体積照明とは何でしょうか?
飛び込む前に、いくつかのことを明確にしたいと思います。私はこれに慣れていないので、おそらく言葉をうまく利用していなかったので、何か意味がない場合は私に知らせてください。私の無知に感謝し、申し訳ありません。
opengl - オブジェクトを回転させながらOpenGLで光源を固定するにはどうすればよいですか?
glutSolidTeapot(opengl.orgに従って自動的に生成された表面法線を持つ)と拡散光を放出する光源があります。ティーポットを回転させようとすると問題が発生します。光源も回転を行っているようで、定義したのと同じ位置に留まっていません(基本的にティースポットに従います)。私のコードでわかるように、初期化時に照明位置を変更するだけなので、照明位置を設定した後に呼び出されるため、glRotatef()の対象にはなりません。
この問題を解決するために何時間も費やしたにもかかわらず、私はこの種の行動が何に起因するのか本当にわかりません。
glEnable(GL_NORMALIZE);を貼り付けます。初期化でも問題は解決しません。
ティーポットをどの角度で回転させても、右側が光沢のあるティーポット(光はその方向から来るため)が望ましい出力になると思います。
コードをテストする場合は、スペースキーを押してティーポットを回転させます。
opengl - GLSL でディレクショナル ライトをカメラ空間に変換する方法
照明用に次の GLSL コードがあります。
ライト ベクトルはワールド空間で指定されます。を使用してカメラの向きと位置を設定しgluLookAt
ます。OpenGL はライト ベクトルがカメラ空間にあると想定するため、ライトは固定方向にとどまるのではなく、カメラと共に移動します。
を呼び出す前と後に、シェーダーをアクティブにしてライト ベクトルを設定してみましたgluLookAt
が、同じ効果が得られます。光ベクトルを適切に変換するには、正確に何をしなければなりませんか?
opengl - OpenGLライトの問題
オブジェクトを読み込んで、オブジェクトを描画するときに色を緑に設定しました。オブジェクトを描画した後、赤で線を引きます。
それはすべてうまくいきました。照明プロパティを入力すると問題が発生します。光源を作成すると、光が投影されるすべてが白くなります。照明が私の色を上書きするのはなぜですか? そして、どうすればこの問題を解決できますか?
前もって感謝します..
opengl - カメラを回転させるときのOpenGL照明の問題
私は自分のゲームの世界で建物を描き、次のコードでそれらをシェーディングします。
それはうまく機能します。
しかし、私が世界を飛び始めると、あたかも世界が回転しているオブジェクトであるかのように、照明がそれに反応します。つまり、カメラアングルが変わると、ライトも変わります。
その回転を元に戻すにはどうすればよいですか?そのため、照明は実際には世界を回転させていないと見なし、建物に静的な陰影を付けて、太陽が空のどこにあるかによって変化するようにすることができます。
編集:ここにレンダリングコードがあります: