Codelogy

2007年11月30日

【c++】インタプリタを初めから丁寧に第03回

前回に引き続き字句解析プログラムの内容について考えます。
成田さんに添削していただいた部分も合わせて冗長な部分を削除した・・・つもりです。

  • 演算子
  • 制御文判別子

>> 続きを読む...

2007年12月09日

XMLライブラリの紹介 (1)

某所からの「Codelogy にエントリを投稿しろ」という圧力が大きくなってきたので、自作の XML ライブラリでも紹介してお茶を濁そうかと思います。 とは言っても、業務に使用しているものなので、ちゃんと使えるレベルには仕上がっています。

>> 続きを読む...

2008年04月05日

宣言の位置

C言語では、ローカル変数の宣言を関数の始めに宣言する必要がありました。
これを習慣としているのか、C++ でもローカル変数・オブジェクトの宣言を関数の開始位置で行う人がいます。

//分散を求める関数 (C++スタイル宣言)
int variance(const Array<double>& ad){
    assert(ad);

    double dSum =0;

    int i;
    for (i=0; i<ad.size; ++i) dSum +=ad[i];

    double dAvr   =dSum/ad.size;
    double dSumSq =0;

    for (i=0; i<ad.size; ++i){

        double dTmp =ad[i] - dAvr;

        dSumSq +=dTmp*dTmp;
    }

    return dSumSq/ad.size;
}
//分散を求める関数 (Cスタイル宣言)
int variance(const Array<double>& ad){
    assert(ad);

    double dSum   =0;
    double dSumSq =0;
    double dAvr;
    double dTmp;
    int i;

    for (i=0; i<ad.size; ++i) dSum +=ad[i];

    dAvr =dSum/ad.size;

    for (i=0; i<ad.size; ++i){

        dTmp =ad[i] - dAvr;

        dSumSq +=dTmp*dTmp;
    }

    return dSumSq/ad.size;
}

それでも動作には何の支障もありませんが、変数の「宣言」と「実際に使われ始める位置」が離れてしまうため、プログラムがやや読みづらくなります。 また、上例のCスタイルの方では、2番目のループ内でのみ使われる変数 dTmp のスコープが関数全体に及んでしまうのも、あまり良い状況ではないでしょう。
しかし、C++ が変数・オブジェクトの宣言を関数の任意の位置で行えるようになっているのは、このような可読性に関する (些末な) 問題のためだけではありません。 これには、C にはなかった「クラス」「オブジェクト」が大きく関係しています。

>> 続きを読む...

2008年05月01日

三項演算子

2008年08月01日

3Dモデルファイルの独自形式制作(1回目)

3D系プログラムをしていると、どうしてもついて回るのが読み込みモデリングファイルの形式です。
私は普段DirectXを使っていますので、標準形式のXFileを使えばよいではないかということになりそうですが、XFileの方言はひどいものがある上に上位にあたるXNAではXFileをサポートしないといったことになっており散々です。
よくデザイナーさんが使うmaya, 3ds max, LightWave3Dなどのソフトがありますが、それぞれのエクスポーターで出力するXFileも方言があり、Root Frameにアニメーション情報を含んだり、含まなかったり、メッシュの名前をつけたりつけなかったりと様々です。
(他にもアニメーションの名前をつけたりつけなかったりするものまで・・・)
当然標準のビューアのみで対応できるはずもなく、マテリアル色がおかしくなったり、アニメーションが壊れたり、描画すらされなかったりといった結果になります。

それぞれのソフトに対応したエクスポーターを書いてもよいのですが、現在進行中プロジェクトではmaya, max, light waveすべてからのデータが送られてくるため、3つもエクスポータを書くのはさすがに無理です。
ですので、これらの問題を埋めるためにAutodesk社が標準とするFBXというファイル形式から必要な情報を抜き出し独自形式にコンバートしたいと思います。

今回はお仕事用としてのメモも兼ねますので、すぐに次の情報をアップしたいと思います。今回はFBXのパース、バージョンが上がったSDKの使い方がメインです。

>> 続きを読む...

About C++

ブログ「Codelogy」のカテゴリ「C++」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリは3Dです。

次のカテゴリはHaskellです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。