トップページ > 過去ログ > 記事閲覧
サンプルのセルフシャドウについて
名前:takatwu 日時: 2012/09/13 23:27

サンプルプログラム 3Dアクション基本+深度値を利用した影表現基本 のプログラムを改造して 1068行目の DepthBufferGraphHandle = MakeScreen( 4096, 4096, FALSE ) ; を DepthBufferGraphHandle = MakeScreen( 1024, 1024, FALSE ) ; に変更し、 1377行目に SetGraphMode( 1920, 1080, 32 ) ; を追加すると 画面にDepthBufferGraphHandleの内容が描画されてしまいます。 現在これに似た不具合に悩んでいるのですが原因が全くわからないため この不具合の原因、または解決法を教えていただきたいです。

Page: 1 |

Re: サンプルのセルフシャドウについて ( No.1 )
名前:管理人 日時:2012/09/15 21:17

ご報告ありがとうございます、私の環境でも再現しました 描画可能画像が画面の解像度と同じかそれより小さい場合は Zバッファを共有するという仕様が原因でした ( なので、1308行目で描画先を裏画面に戻した後に ClearDrawScreen(); を 実行すると正常な描画結果が得られます ) DepthBufferGraphHandle の解像度が 2048x2048 などの場合は必ず 画面の解像度よりも大きくなるので、Zバッファ共有による今回の現象が 発生しなかったというわけです 今回のような原因が分からないけど意図した結果が得られない、というような事態になりやすいので、 デフォルトでは描画可能画像を作成する際に必ず専用のZバッファも作成するようにして、 別途描画可能画像専用のZバッファを作成するかどうかを設定する以下の関数を追加しました // 描画可能画像を作成する際に専用のZバッファも作成するかどうかを設定する( デフォルトでは TRUE( 作成する ) ) int SetDrawValidGraphCreateZBufferFlag( int Flag ) ; 今回の変更を加えたバージョンをこちらにアップしましたので、 よろしければお使いください m(_ _;m 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: サンプルのセルフシャドウについて ( No.2 )
名前:takatwu 日時:2012/09/22 00:09

ありがとうございます。 無事に不具合が解消されました。 ついでと言ってはなんですが このプログラムのモデルと ↓のモデルを差し替えると(かなり小さいのでMV1SetScaleで50倍くらいにしていただけると助かります) https://w w w.dropbox.com/s/xh8s19f9utlatp4/chara.mv1 キャラクターに対する光のあたり方がおかしい気がします。 回転させるとわかりやすいと思いますが明かりが右からか左からしか当たってない感じです。 (そのまま組み込むとキャラクターのモーションが気持ち悪いのは仕様です、すみません。) これはオリジナルのシェーダーのプログラムに問題があるのでしょうか?
Re: サンプルのセルフシャドウについて ( No.3 )
名前:管理人 日時:2012/09/22 22:28

アップして頂いたデータを拝見する限りではモデルの法線が正常ではないのが原因だと思います (x,y,z)=(0,0,0) や (x,y,z)=(1,1,1) などになってしまっているので・・・ ( 法線は必ず長さ1.0のベクトルである必要があります ) ただ、これが mv1ファイルにする前の元のファイルからなのか、DXライブラリの読み込み処理に 通した結果こうなってしまったのかは元のファイルを拝見してみないとわかりません > これはオリジナルのシェーダーのプログラムに問題があるのでしょうか? 問題があるのはデータなので、シェーダーは関係ないです
Re: サンプルのセルフシャドウについて ( No.4 )
名前:takatwu(解決) 日時:2012/09/22 23:37

ありがとうございます。 確認してみたところ Metasequoiaからプラグインを使用してpmxに出力したものに不具合があることがわかりました。 pmxを使用せずにpmdに変更することで解決しました。 お騒がせして申し訳ありませんでした。

Page: 1 |