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