トップページ > 記事閲覧
3Dのスポットライトの描画について
名前:NATTO 日時: 2014/11/19 02:19

3D関数のCreatePointLightHandleを用いて、 スポットライトを設定したのですが、 大きいポリゴン(壁、床など)が、 奥に行くにつれて暗くなりません。 シェーダも使ってみたのですが、 変化しているのか、本当に使えているのかわからず… どうしたらよいのか教えてください。おねがいします。 ソースと実行の様子の画像をあげておきました。 ttp://dotup.org/uploda/dotup.org9254.zip.html (お手数ですが、dotupの前(2か所)に「w×3.」を入れてください(書き込み規制回避のためです…)) また、この掲示板でも質問させていただいてます。 ttp://dixq.net/forum/viewtopic.php?f=3&t=15978
メンテ

Page: 1 |

Re: 3Dのスポットライトの描画について ( No.1 )
名前:管理人 日時:2014/11/21 00:18

すみません、ダウンロードするのが遅かったようで、アップしていただいたファイルが削除されてしまっていました・・・ ただ、恐らくご報告の問題はオリジナルのシェーダーを使用していただいても解決しないと思います・・・ C言語何でも質問掲示板の方のお書き込みで > シェーダを使わずにしようとすると、 > 距離よる暗さの変化はできましたが、 > 大きいポリゴンだと表示がおかしくなってしまいます… とのことですが、こちらの現象の原因は、まさに「ポリゴンが大きいから」となります 「ポリゴンにどのくらい光が当たっているか」はポリゴンを形成する3頂点と光源とで行われているので、 光源がポリゴンの面に近くても、ポリゴンの点から遠いとポリゴン全体が暗く表示されてしまうのです この問題は大きいポリゴンを小さいポリゴンに分割すれば解消されるのですが、それは難しいでしょうか?
メンテ
Re: 3Dのスポットライトの描画について ( No.2 )
名前:NATTO 日時:2014/11/22 16:45

できるかぎり大きいままの方がいいのですが、 分割自体はたぶんできると思います。 でも、大きいままではできないですかね?
メンテ
Re: 3Dのスポットライトの描画について ( No.3 )
名前:管理人 日時:2014/11/23 02:16

大きいままでもできますが、処理負荷がかなり大きくなり、GPU に求められる性能も高くなります DxLib_Init() を実行する前の箇所に SetUsePixelLighting( TRUE ) ; という記述を増やして実行すると 大きいままでも正常にライティングされると思いますので、よろしければお試しください 処理負荷が大きくなる理由ですが、初期設定では三角形を形成する3点にのみ 「どれくらいの明るさになるか」の計算を行っているのですが、SetUsePixelLighting( TRUE ) ; を 実行すると画面に描画される1ピクセル1ピクセルに対して「このピクセルはどのくらいの明るさになるか」が計算されるからです 仮にポリゴンが縦横256ピクセルの範囲に描画されたら、「明るさ計算」の量は 256 × 256 = 65536 となり、初期設定では3回で済んだ「明るさ計算」が65536回に増大します なので、ポリゴンの分割数を増やした方が現実的というわけです ただ、もしある程度高性能のGPUのみを動作対象とするのでしたら SetUsePixelLighting( TRUE ) ;を使用しても大丈夫です
メンテ
Re: 3Dのスポットライトの描画について ( No.4 )
名前:NATTO 日時:2014/11/24 23:43

SetUsePixelLighting関数が見つからず、 更新履歴にあったSetUseGPUShaderModel3も見つかりませんでした… とりあえずポリゴンを分割した方法にしたいと思いますが、 やり方だけでも知っておきたいのですが、 なぜかどちらの関数も使えませんでした…
メンテ
Re: 3Dのスポットライトの描画について ( No.5 )
名前:管理人 日時:2014/11/25 01:33

関数リファレンスには SetUsePixelLighting は載せていませんが、そうではなく DxLib.h にも SetUsePixelLighting が無いということでしょうか? もしそうでしたら、お使いのDXライブラリのバージョンが古いのが原因だと思いますので こちらの最新版をお使いになってみてください http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: 3Dのスポットライトの描画について ( No.6 )
名前:NATTO 日時:2014/11/25 19:36

バージョンアップしたらできました! ポリゴン分割でしていけたらいいのですが、 できそうになければこの方法があることも頭に入れて、 プログラミングしていきたいです。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存