エディットコンティニュ設定

エディットコンティニュをしようとすると編集したファイルで何故かエラーが発生。

error C2018 文字 '0xbf' は認識できません。
error C2143 構文エラー : ';' が '<クラスヘッド>' の前にありません。
error C4430 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません

特にコンパイル通らないはずはないんだけどなーと色々プロパティいじってみたら、「プリコンパイルを許可する」をオフにすることでエディットコンティニュが正常にできるように。

でも「プリコンパイルを許可する」で色々調べてみても特に記述はなくて根本解決にはなってない気がする・・・
まあ一応はできるようになったので、作業効率はアップですかね。

/MPオプションで並列コンパイル

ビルド速度を上げる方法を探してみたところ、/MP (複数のプロセスを使用したビルド)なるものが。
マルチコアのCPUならそれらを効率良く使ってくれるみたいで、ビルド高速化が見込めます。


手順は簡単で、プロジェクトのプロパティから「構成プロパティ」→「C/C++」→「コマンドライン」の追加オプションに /MP を追加するだけ。


また、「C/C++」→「コード生成」の「最小リビルドを有効にする」をオフ(/Gm-)に。多分これはデフォルトではオン(/Gm)になっているはずです。


私も実際にビルドしてみましたがこれは確かに早い!

出力ウィンドウで
1> xxxa.cpp
1> xxxb.cpp
とかの出る速度を見ると大分早くなっているのがわかります。


手軽で簡単なので使ってない方はぜひお試しあれ。

64bit版Windows7でPS3コントローラを認識させる

PS3の純正コントローラを認識。今回はUSB接続のみを使用します。

色々調べたところ、Windows7+64bit版となると他と比べて色々面倒とのことでしたが、無事認識完了。
最終的に調べて回った他サイトの方法とはやや違ったやり方となったので、まとめてみようと思います。

試行錯誤の後にまとめた記事なので、少々おかしな点もあるかもしれません。ひとまずは参考までに。。。


=========================================================

(1)MotioninJoyをインストール

http://www.motioninjoy.com/
右上「Downloads」からサイト内の「64bits Windows vista,Windows 7: site 1」を選んでダウンロードし、インストール。
 ※この記事作成時は、「MotioninJoy_060003_amd64_signed.zip」がダウンロードされます。


なお、"_signed"となっているように、Microsoftの認証を受けた模様。
ドライバ署名関連の回避はMotioninJoyを使用する上で重点ポイントでしたが、このバージョンではその必要がないようです。


(2)PS3用ドライバの読み込み

1.PS3コントローラをUSB接続
2.DS3 Toolを実行(MotioninJoy GamePad Toolが起動します)
3.「ドライバマネージャ」を選択

この画面になります。


4.Port_xxxxの欄にチェックを入れて、「Load」を選択。
Portの欄が無い場合はコントローラをもう一度挿し、ドライバマネージャを更新すると出るかと思います。
なお、Windowsから「ドライバのインストールを行いますか?」的な警告が出ます。

ロードが完了すると、コントローラの接続が可能になります。


(3)「クイックスタート」画面で接続確認

"接続されているコントローラ"欄に項目があればOKです。
無い場合、コントローラを抜き差ししたり、DS3 Toolを再起動すると認識されるようです。

モード選択から「アナログゲームパッド1」を選択し、「適用」を押せばスティックの認識が可能となります。
アナログゲームパッド2」の場合はL2,R2ボタンをアナログ値で取得するようです。(トリガーとはそのこと)

ちなみに「振動機能をテスト」を押すとコントローラが揺れます。結構強いのでご注意を…笑


(4)動作チェック

ゲームコントローラ設定パネル」からコントロールパネルの項目へショートカットできます。

「MotioninJoy Virtual Game Controller」のプロパティから、テストメニューへ移行。
ボタンやスティックが反応していればOKです。

スティックが反応しない場合は、(3)のモード選択を再度行ってみるとよいかも。


以上で完了です。


とりあえず手持ちのPCゲームでコントローラを使ってみたところ、特に問題なく使用できました。

若干不備もありますが、参考までにどうぞ。

MAYAでxFile出力(3)

xFile絡みの作成中。
モデル表示は完了したものの、アニメーションを適用するとおかしな表示になってしまう。
どうやら回転でおかしくなっている模様。

座標系の絡みかなとアニメーションデータを適当に反転させてみたら、行列の(3,2)に-1を掛けることで上手くいった。


結果だけ見ると座標系が関係してそうだけど、どのファイルに対しても-1を掛ける現在のやり方だとtiny.xとかが表示できなくなるという問題が発生。

コンバートなり、ゲームに使う前に何か挟んだほうがいいかもしれない。

xFileとトークン

xFile読み込み部分作成中。

自前でテキスト形式のxFileの読み込みを行う場合、トークンごとに文字列を分解して取得する必要がある。

例えばxFileの中身が

Frame SCENE_ROOT {

FrameTransformMatrix {
1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;;
}

・・・

となっている場合、

"Frame" や "{" や "1.000000"などが区切り文字(ここでは半角スペースやカンマなど)で区切られたトークンとなっている。


ということでトークンを取得する関数を作成。

char* XFileUtility::GetToken( FILE* fp )
{
    static char tmp[512];
    int index = 0;
    char c = 0;

    for( ;; )
    {
        // 一文字読み込み。
        if( fread( &c, 1, 1, fp ) != 1 )
        {
            // ファイルの終端 or 読み込み失敗。
            break;
        }

        switch( c ){
        case '\n':
        case '\r':
        case ';':
        case ',':
        case ' ':    // 半角スペース
        case '"':
            if( index != 0 )
            {
                // すでに読み込んだ文字があればここでトークン終了とする。
                tmp[index] = '\0';
                return tmp;
            }

            // 読み込んだ文字がない場合は区切り文字が連続しているとし、次の文字を読み込む。
            break;

        default:
            // 区切り文字以外なら保存。
            tmp[index] = c;
            index++;
            break;
        }
    }

    // トークンが読み込まれていれば終端文字を足して返す。
    if( index != 0 )
    {
        tmp[index] = '\0';
        return tmp;
    }
	
    // 読み込めなかった場合はNULLを返す。
    return NULL;
}

文字列を取得する分にはこれで大丈夫っぽい。

数値版も合わせて作成。キャストしただけですが・・。

float XFileUtility::GetTokenFloat( FILE* fp )
{
    char* pToken = GetToken( fp );

    return static_cast<float>( atof(pToken) );
}

int XFileUtility::GetTokenInt( FILE* fp )
{
    char* pToken = GetToken( fp );

    return static_cast<int>( atoi(pToken) );
}


xFileはこのデータの次はこれがくるという法則が分かりやすいので、トークンから取得する分でもそんなに苦にならない・・・気がする。

MAYAでxFile出力(2)

昨日詰まってしまったので色々探してみたら、プラグインを公開している方がいらっしゃいました。


「alvinusの日記(仮)」さま
http://d.hatena.ne.jp/alvinus/20101224/1293190278


ものは試しと使わせて頂いたら見事吐き出し成功。
xFileの中身を見た感じではアニメーションも上手くいってそうな感じ。
公開していただいた方に感謝です。


ということで現在xFile読み込み部分作成中です。
例によって昔のコードを直しながら移植という感じ。

まずは立ち絵が出るとこまではいきたいところ。

MAYAでxFile出力

2D関連はあらかた出来たので3D表示へ取り組み開始。

とりあえずデザイン担当に以前慣れ親しんでいたxFileで仮のモデルデータを出力してもらってファイルを眺めてみたけれど、MeshMaterialListのところにテクスチャの情報が無い。
これではさすがにどうしようもない。


聞いてみるとcvxporterで出力したということなので、色々出力パラメータをいじってもらったけど上手くいかず。

困ったので色々調べてみたら条件次第でテクスチャ指定が抜けてしまうことがあるらしい?とのこと。
そしてそもそもcvxporterだとボーンアニメーションに対応していないようなので、cvxporterを使うこと自体が出来ないみたい。


これはFBXを自前で読み込みってのも視野に入ってきたか・・・?
どうしたものか。