トップページ > 過去ログ > 記事閲覧
サンプルの光学迷彩シェーダーについて
名前:S3 日時: 2012/05/16 14:31

はじめまして。 サンプルにある、光学迷彩風モデル描画のシェーダーを使わせていただいているのですが、 DXライブラリにてフォグを適用すると、光学迷彩風モデル描画のシェーダーが適用されず、真っ黒のモデルが描画されます。 このシェーダーを適用しつつ、フォグも適用できないでしょうか? 教えて頂きたく、よろしくお願いします。

Page: 1 |

Re: サンプルの光学迷彩シェーダーについて ( No.1 )
名前:S3 日時:2012/05/16 16:07

続けて申し訳ありません。 光学迷彩風モデル描画のサンプルについて質問です。 サンプルでは人体モデルに対してシェーダーを適用していましたが、 他のモデルに適用する際、必要な設定などはありますか? こちらで試したところ、サンプルの人体モデルに対して、 光学迷彩風のシェーダーが適用されましたが、 四角形のポリゴンにモデルを変更したところ、 うまくモデルの移動や回転が行えませんでした。
Re: サンプルの光学迷彩シェーダーについて ( No.2 )
名前:管理人 日時:2012/05/20 14:48

シェーダーを使う場合はフォグパラメータの設定もシェーダーで行う必要があります サンプルプログラムコーナーの 「8.オリジナルシェーダーを使用した3Dモデルの描画基本」にシェーダーでフォグを適用する サンプルプログラムを追加しましたのでよろしければご覧ください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3DModelShaderBase.html#R1N3 光学迷彩風モデル描画のサンプルにある頂点シェーダーコードはスキニングメッシュ ( 複数のフレームの影響を受ける頂点があるモデル )用の頂点シェーダーコードですので、 剛体メッシュ( 複数のフレームの影響を受ける頂点が無いモデル )の場合は頂点シェーダーの コードが以下のようになります ------------------------------------------------------------------------- // 頂点シェーダーの入力 struct VS_INPUT { float4 Position : POSITION ; // 座標( ローカル空間 ) float3 Normal : NORMAL0 ; // 法線( ローカル空間 ) float4 Diffuse : COLOR0 ; // ディフューズカラー float4 Specular : COLOR1 ; // スペキュラカラー float4 TexCoords0 : TEXCOORD0 ; // テクスチャ座標 } ; // 頂点シェーダーの出力 struct VS_OUTPUT { float4 Position : POSITION ; // 座標( 射影空間 ) float4 PPosition : TEXCOORD0 ; // 座標( 射影空間 ) float3 VNormal : TEXCOORD1 ; // 法線( ビュー空間 ) } ; // C++ 側で設定する定数の定義 float4 cfProjectionMatrix[ 4 ] : register( c2 ) ; // ビュー  → 射影行列 float4 cfViewMatrix[ 3 ] : register( c6 ) ; // ワールド → ビュー行列 float4 cfLocalWorldMatrix[ 3 ] : register( c94 ) ; // ローカル → ワールド行列 // main関数 VS_OUTPUT main( VS_INPUT VSInput ) { VS_OUTPUT VSOutput ; float4 lWorldPosition ; float4 lViewPosition ; float3 lWorldNrm ; float3 lViewNrm ; // 頂点座標変換 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++( 開始 ) // ローカル座標をワールド座標に変換 lWorldPosition.x = dot( VSInput.Position, cfLocalWorldMatrix[ 0 ] ) ; lWorldPosition.y = dot( VSInput.Position, cfLocalWorldMatrix[ 1 ] ) ; lWorldPosition.z = dot( VSInput.Position, cfLocalWorldMatrix[ 2 ] ) ; lWorldPosition.w = 1.0f ; // ワールド座標をビュー座標に変換 lViewPosition.x = dot( lWorldPosition, cfViewMatrix[ 0 ] ) ; lViewPosition.y = dot( lWorldPosition, cfViewMatrix[ 1 ] ) ; lViewPosition.z = dot( lWorldPosition, cfViewMatrix[ 2 ] ) ; lViewPosition.w = 1.0f ; // ビュー座標を射影座標に変換 VSOutput.Position.x = dot( lViewPosition, cfProjectionMatrix[ 0 ] ) ; VSOutput.Position.y = dot( lViewPosition, cfProjectionMatrix[ 1 ] ) ; VSOutput.Position.z = dot( lViewPosition, cfProjectionMatrix[ 2 ] ) ; VSOutput.Position.w = dot( lViewPosition, cfProjectionMatrix[ 3 ] ) ; // 頂点座標変換 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++( 終了 ) // 法線をビュー空間の角度に変換 =========================================( 開始 ) // ローカルベクトルをワールドベクトルに変換 lWorldNrm.x = dot( VSInput.Normal, cfLocalWorldMatrix[ 0 ].xyz ) ; lWorldNrm.y = dot( VSInput.Normal, cfLocalWorldMatrix[ 1 ].xyz ) ; lWorldNrm.z = dot( VSInput.Normal, cfLocalWorldMatrix[ 2 ].xyz ) ; // ワールドベクトルをビューベクトルに変換 lViewNrm.x = dot( lWorldNrm, cfViewMatrix[ 0 ].xyz ) ; lViewNrm.y = dot( lWorldNrm, cfViewMatrix[ 1 ].xyz ) ; lViewNrm.z = dot( lWorldNrm, cfViewMatrix[ 2 ].xyz ) ; // 法線をビュー空間の角度に変換 =========================================( 終了 ) // 出力パラメータセット ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++( 開始 ) // 射影座標をテクスチャ座標0としても出力する VSOutput.PPosition = VSOutput.Position ; // ビュー法線をテクスチャ座標1として出力する VSOutput.VNormal = lViewNrm ; // 出力パラメータセット ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++( 終了 ) // 出力パラメータを返す return VSOutput ; } ------------------------------------------------------------------------- 「ローカル → ワールド行列」の合成行列を作ると言う工程が無くなって、 定数をそのまま使う形になります
Re: サンプルの光学迷彩シェーダーについて ( No.3 )
名前:S3 日時:2012/05/21 15:39

対処法とサンプルまで頂き、どうもありがとうございました。 最初のFogに関しては問題なく適用できました。 次点ですが、シェーダー側をスキニングメッシュ→剛体メッシュ用に書き換えたところ、 シェーダーを通した描画は正常に描画されるようになりましたが、 今度は通常の描画に対して、回転角度や位置が同様にずれてしまうようになりました。 全てシェーダーを通して描画すればいいのかなぁと思いつつ、 何らかの対処はないでしょうか。
Re: サンプルの光学迷彩シェーダーについて ( No.4 )
名前:S3 日時:2012/05/21 16:04

大変失礼しました。 全てのシェーダーに上記を適用していなかったのが原因でした。 正常に描画できるようになりました。 この度はご対処、本当にどうもありがとうございました。

Page: 1 |