カテゴリー別アーカイブ: プログラム

プログラミングに関する話題

頂点シェーダでスキニングと頂点ブレンド 可変長の定数バッファ

頂点シェーダでスキニングと頂点ブレンドを行います。基本的な原理などは多くの場所で公開されているので省略、DirectX11での実装について説明します。
ボーンウエイト付のモデルデータは自作できないので、入手しやすいPMD/VMDファイルを使用します。

PMD/VMDの表示再生
PMD/VMDの表示再生

続きを読む 頂点シェーダでスキニングと頂点ブレンド 可変長の定数バッファ

ID3D11ShaderReflectionでシェーダコード解析

CreateInputLayoutで入力レイアウト(ID3D11InputLayout)を作成する際、頂点シェーダが要求する入力パラメータが不足しているとエラーコード(E_INVALIDARG)を返します。ただ作成が失敗するだけならいいのですが、エラーログが出力されてしまうため、シェーダを解析して入力パラメータの不足を調べるようにします。

続きを読む ID3D11ShaderReflectionでシェーダコード解析

シェーダエフェクト 自作FXファイルフォーマット

前回、使用するシェーダ関数名やステートをソースコードに直接記述していたので、これらの情報を専用のファイルで定義するようにします。DirectX11はfxファイル(techniqueやpassの定義)に対応していないようなので、DirectX9のfxファイルを参考に独自のfxファイルを作成します。

左:きれいな半透明 中:アニメ調 右:汚い半透明
左:きれいな半透明 中:アニメ調 右:汚い半透明

続きを読む シェーダエフェクト 自作FXファイルフォーマット

シェーダエフェクト&マルチサンプルAA

ポリゴンメッシュの描画処理が揃ってきたので、最後にレンダリングステート系とマルチパス(同じメッシュを異なるシェーダやステートで複数回描画)を追加し、シェーダ関連の処理を整理、構造化します。その処理を使って輪郭線のある3Dモデルを表示してみます(法線方向拡大&裏面表示の輪郭線アルゴリズム)。表示させてみるとジャギーが酷かったので、マルチサンプルアンチエリアシング(MSAA)の対応も同時に行います。

アニメ調シェーダ
アニメ調シェーダ

続きを読む シェーダエフェクト&マルチサンプルAA

法線ベクトルの生成とスムージング

次は光源計算にいきたいところですが、メタセコイアのデータには法線ベクトルが含まれないためポリゴン形状から法線ベクトルを計算で求め、スムージングを行います。
メタセコイア以外の法線ベクトルが出力されるモデリングツールを使えばいいのですが、今後必要になるかもしれなので計算処理を作っておきます。

法線ベクトルの生成とスムージング
法線ベクトルの生成とスムージング

続きを読む 法線ベクトルの生成とスムージング

3Dモデルデータフロー考察&とりあえずmqoファイル描画2

mqoのマテリアル(テクスチャと色)を反映して描画してみる。少しDirectX11プログラミングが複雑になってきたので、3Dモデルデータの扱い方について、大まかなデータフロー(仮)を考えてみる。
3Dモデルの描画処理は、そのデータフロー(仮)に沿って作成する。

とりあえずmqoファイル表示2
とりあえずmqoファイル表示2

続きを読む 3Dモデルデータフロー考察&とりあえずmqoファイル描画2

WCHARって何ですか? 文字列の変換

これまでchar型でしか文字列を扱ったことがなかったので、DirectXTexの画像ファイル読み込みでLPCWSTR(const WCHAR*)という型を見ても特に気にせず、L”文字列”と書けばいいやぐらいしか考えてませんでした。しかし、リテラルではなくconst char*のファイルパスを渡そうとするとコンパイルエラー、どうやら簡単に型のキャストで済むようなものではないらしい。

WCHAR( wchar_t )とは
Wikipedia ワイド文字
その他、ググって調べてみた。

文字列の内部表現が違うので、テキストファイル(char)から取得した文字列をそのままでは使えず、変換する必要があるようです。「wchar_t = 1文字」とは限らないので取扱いに注意(なんか中途半端な文字型のような気がする)。
C++11ではchar16_tやchar32_tという文字型があるので、今後慎重に文字列型の扱い方を考えていきたい。

文字列の変換方法を調べていくつか作成してみました。
続きを読む WCHARって何ですか? 文字列の変換

boost spirit qiでmqo(メタセコイア)ファイル解析&とりあえず描画

ポリゴンが描画できるようになったので、今度はモデルデータファイルを読み込んで表示してみる。モデルデータは、データ作成と解析が簡単にできるmqoファイル(メタセコイアの出力ファイル、テキスト形式)を使用する。

とりあえずmqoファイル表示
とりあえずmqoファイル表示

続きを読む boost spirit qiでmqo(メタセコイア)ファイル解析&とりあえず描画