<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>Codelogy</title>
      <link>http://www.codelogy.org/</link>
      <description></description>
      <language>ja</language>
      <copyright>Copyright 2010</copyright>
      <lastBuildDate>Sun, 07 Feb 2010 16:12:26 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>32ビット環境で64ビット整数を扱う (乗法編)</title>
         <description><![CDATA[<div class="caption">
  これまでの記事では、32ビット環境における64ビットの<entry@16>加法</entry>および<entry@50>減法</entry>について解説しました。
  いよいよ、ヤマ場である乗法、すなわち「掛け算」のやり方について解説しましょう。
</div>
<div style="margin: 1em 0;">
  <a href="http://www.codelogy.org/quillpen/?entry=53">&gt;&gt; 続きを読む...</a>
</div>]]></description>
         <link>http://www.codelogy.org/archives/2010/02/3264_3.html</link>
         <guid>http://www.codelogy.org/archives/2010/02/3264_3.html</guid>
        
        
         <pubDate>Sun, 07 Feb 2010 16:12:26 +0900</pubDate>
      </item>
            <item>
         <title>Array クラスを作る (size フィールド編)</title>
         <description><![CDATA[<p>
  Java では、配列の要素数をフィールド <code>length</code> を通じて参照することができます。
</p>
<table class="code">
<tr>
  <td><pre><em class="cmt">//合計の取得</em>
<em class="kwd">int</em> sum(<em class="kwd">int</em>[] anData){

    <em class="kwd">int</em> nSum =<em class="lit">0</em>;

    <em class="kwd">int</em> i;
    <em class="kwd">for</em> (i=<em class="lit">0</em>; i&lt;anData.length; ++i){
        nSum +=anData[i];
    } <em class="cmt">//i</em>

    <em class="kwd">return</em> nSum;
}</pre></td>
  </tr>
</table>
<p>
  この <code>length</code> は (おそらく) <b>final</b> <b>int</b>、即ち、変更不能な <b>public</b> フィールドとして定義されており、これに対する代入操作を行おうとすると、コンパイルエラーとなります。
  ところで、この仕組みは Java が「配列のサイズは変更できない」という仕様を有するが故に可能なものであるということに読者諸兄はお気づきでしょうか。
  もし配列のサイズが初期化後に変更可能であるとすれば、<code>length</code> を <b>final</b> 修飾することはできません。
  そうなると、<code>length</code> に対する代入操作を禁止する手立てはなくなってしまうのです。
</p>
<p>
  一方、C++ ならば、値の変更が可能かつ、外部からの変更が不能なメンバ変数 (を模したインターフェイス) を定義することが可能です。
  このエントリでは、このテクニックを使い、これまでのエントリで作成してきた Array クラステンプレート (<entry@30>参照</entry>) に要素数読み取り専用のメンバ変数 <b>size</b> を定義します。
</p>  
<div style="margin: 1em 0;">
  <a href="http://www.codelogy.org/quillpen/?entry=52">&gt; 続きを読む...</a>
</div>
]]></description>
         <link>http://www.codelogy.org/archives/2009/12/_java.html</link>
         <guid>http://www.codelogy.org/archives/2009/12/_java.html</guid>
        
        
         <pubDate>Fri, 04 Dec 2009 23:00:00 +0900</pubDate>
      </item>
            <item>
         <title>ビット演算の基礎</title>
         <description><![CDATA[<div class="caption">
  ビット演算を使用すると、1つの整数型データをビット単位で区切って、複数の用途に割り当てることができます。 例えば、符号なし整数 (<b>unsigned</b> <b>int</b>) のデータ長さが32ビットの環境であれば、一つの変数で32個の真理値 (<b>bool</b>: <b>true</b>/<b>false</b> に相当) を格納することができます。 また、これらの真理値を複数個まとめて参照・操作することも可能です。 <br />
  <br />
  しかし最近のプログラミング環境では、潤沢なメモリやライブラリの普及などにより、ビット演算を利用するような場面は、以前と比べて少なくなっています。
  そのため、ある程度長くプログラミングを学んでいるにも関わらず、ビット演算が使えない、あるいはその概念自体を知らないという人も見かけるようになりました。 <br />
  <br />
  というわけで、今回はビット演算の基本中の基本である、ビット値の参照・操作の方法とその手順について解説します。
   ちなみに、当エントリの説明では図のスペース節約のため、8ビット符号なし整数 (<b>BYTE</b>: <b>unsigned</b> <b>char</b>) を操作の対象としていますので、実際に使用する場合は適当なデータ長に置き換えて考えてください。 
</div>
<div style="margin: 1em 0;">
  <a href="http://www.codelogy.org/quillpen/?entry=55">&gt;&gt; 続きを読む...</a>
</div>]]></description>
         <link>http://www.codelogy.org/archives/2009/11/post_18.html</link>
         <guid>http://www.codelogy.org/archives/2009/11/post_18.html</guid>
        
        
         <pubDate>Sun, 15 Nov 2009 21:00:00 +0900</pubDate>
      </item>
            <item>
         <title>参照の配列は何故作れないか</title>
         <description><![CDATA[<p>
  さて問題です。次のコードの実行結果はどうなるでしょうか？
</p>
<table class="code">
<tr>
  <td><pre><em class="kwd">#include</em> <em class="lit">&lt;iostream&gt;</em>

<em class="kwd">using namespace</em> std;

<em class="kwd">int</em> main(){
  <em class="kwd">int</em> a = <em class="lit">1</em>, b = <em class="lit">2</em>, c = <em class="lit">3</em>;
  <em class="kwd">int</em> &amp;n[<em class="lit">3</em>] = {a, b, c};

  <em class="kwd">for</em>(<em class="kwd">int</em> i = <em class="lit">0</em>; i < <em class="lit">3</em>; ++i)
    cout &lt;&lt; n[i] &lt;&lt; <em class="lit">' '</em> ;
  cout &lt;&lt; endl;

  <em class="kwd">return</em> <em class="lit">0</em>;
}</pre></td>
  </tr>
</table>
<p>
  見出しを見た皆様のお察しの通り、正解は、「そもそもコンパイルされない」です。
</p>
<table class="code">
<tr>
  <td class="result">
code.cpp: In function `int main()':<br />
code.cpp:7: error: declaration of `n' as array of references<br />
code.cpp:10: error: `n' undeclared (first use this function)<br />
code.cpp:10: error: (Each undeclared identifier is reported only once for each function it appears in.)</td>
  </tr>
</table>
<p>
  このように、C++では参照の配列を作成することは出来ません。<br />
  しかし、一体何故でしょうか？
  参照の配列によって簡潔に記述できるような処理に出くわすこともままありますし、参照の配列を作ることが原理的に不可能であるとは到底思えません。
  それなのに、何故禁止されているのでしょう？
</p>
<div style="margin: 1em 0;">
  <a href="http://www.codelogy.org/quillpen/?entry=54">&gt;&gt; 続きを読む...</a>
</div>]]></description>
         <link>http://www.codelogy.org/archives/2009/07/post_17.html</link>
         <guid>http://www.codelogy.org/archives/2009/07/post_17.html</guid>
        
        
         <pubDate>Fri, 10 Jul 2009 15:00:00 +0900</pubDate>
      </item>
            <item>
         <title>32ビット環境で64ビット整数を扱う (減法編)</title>
         <description><![CDATA[<p>
  <a href="http://www.codelogy.org/quillpen/?entry=16">32ビット環境で64ビット整数を扱う (加法編)</a> の続き。<br />
  今回は、加法のコードに少し手を加えて、減法を行う関数を作成します。
</p>
<div style="margin: 1em 0;">
  <a href="http://www.codelogy.org/quillpen/?entry=50">&gt; 続きを読む...</a>
</div>]]></description>
         <link>http://www.codelogy.org/archives/2009/04/3264_2.html</link>
         <guid>http://www.codelogy.org/archives/2009/04/3264_2.html</guid>
        
        
         <pubDate>Tue, 21 Apr 2009 11:20:00 +0900</pubDate>
      </item>
            <item>
         <title>カウンタ付き参照</title>
         <description><![CDATA[<p>
  C++ では、<b>new</b> を用いてオブジェクト (メモリ領域) を確保したならば、これを <b>delete</b> でを明示的に解放してやらなければなりません。
  この「借りたもの (メモリ) は自分で返す」という硬派なスタイルは非常に C++ らしく、またパフォーマンスの面でも優れるため、個人的にはとても気に入っています。
</p>
<p>
  その一方で、このスタイルには<a href="http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%AF">メモリリーク</a>や二重解放によるアクセス違反, ダングリング・ポインタの発生とった問題があり、致命的なバグの原因となりがちであることも事実です。
  また、プログラムの性質上、オブジェクトが利用されなくなるタイミングが予測しづらく、明示的な解放を記述することが原理的に困難であるような状況というものも存在します。
</p>
<p>
  C/C++ 以外の殆どの言語は<a href="http://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3">ガーベジ・コレクション</a>を言語仕様として採用することでこうした問題を回避しています。
  特に、ガーベジ・コレクション手法の一つである<a href="http://ja.wikipedia.org/wiki/%E5%8F%82%E7%85%A7%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88">参照カウント</a>は、その動作原理が非常に単純であり、またそれ故に (一般的な状況下における) パフォーマンスにおいて他の手法よりも優れています。
  そこで、この参照カウントの仕組みを C++ でも利用できないかと考え、<b>Reference</b> というクラステンプレートを作ってみました:
</p>
<ul>
<li><a href="http://www.nowhere.co.jp/~narita/library/narita/doc/ConstReference/">汎用ライブラリ: ConstReference</a></li>
<li><a href="http://www.nowhere.co.jp/~narita/library/narita/doc/Reference/">汎用ライブラリ: Reference</a></li>
</ul>
<p>
  ソースコードは上記リンク先のページからダウンロードすることができます。
</p>
<p>
  今回はこの <b>Reference</b> クラステンプレートの使い方について簡単に説明します。
</p>
<p>
  <a href="http://www.codelogy.org/quillpen/?entry=47">&gt;&gt; 続きを読む...</a>
</p>]]></description>
         <link>http://www.codelogy.org/archives/2009/03/post_16.html</link>
         <guid>http://www.codelogy.org/archives/2009/03/post_16.html</guid>
        
        
         <pubDate>Wed, 11 Mar 2009 17:58:23 +0900</pubDate>
      </item>
            <item>
         <title>C++ スタイルのキャスト</title>
         <description><![CDATA[<p>
  C言語では、キャスト (型変換) を以下のような形式で行います。
</p>
<table class="code">
<tr>
  <td><pre>( <i>type</i> ) <i>expression</i></pre></td>
  </tr>
</table>
<p>
  この記法では、どのような種類のキャストが行われるのかを明示したり、不正・危険なキャストに対してチェックを行うことができないという問題があります。<br/>
  そこで、C++ では <b>static_cast</b>, <b>dynamic_cast</b>, <b>const_cast</b>, <b>reinterpret_cast</b> の 4つのキャスト演算子が導入されました。
  今回は、これらのキャストの使い方について解説していこうと思います。
</p>
<p>
  <a href="http://www.codelogy.org/quillpen/?entry=46">&gt;&gt; 続きを読む....</a>
</p>]]></description>
         <link>http://www.codelogy.org/archives/2009/02/c_2.html</link>
         <guid>http://www.codelogy.org/archives/2009/02/c_2.html</guid>
        
        
         <pubDate>Tue, 17 Feb 2009 18:20:46 +0900</pubDate>
      </item>
            <item>
         <title>Ruby でローカルスコープを作る</title>
         <description><![CDATA[<p>
  必要に迫られて、ローカルスコープを作り出す関数を作ってみました。
</p>
]]></description>
         <link>http://www.codelogy.org/archives/2009/02/ruby_1.html</link>
         <guid>http://www.codelogy.org/archives/2009/02/ruby_1.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
        
        
         <pubDate>Sun, 08 Feb 2009 23:10:21 +0900</pubDate>
      </item>
            <item>
         <title>リニューアル計画中</title>
         <description><![CDATA[<p>
  現在、サイトリニューアルを計画中です。<br />
  このURL (http://www.codelogy.org/) はこのまま使用する予定ですが、一足先に見たい、という方は<a href="http://www.codelogy.org/quillpen/">こちら</a>へどうぞ。
</p>]]></description>
         <link>http://www.codelogy.org/archives/2008/12/post_15.html</link>
         <guid>http://www.codelogy.org/archives/2008/12/post_15.html</guid>
        
        
         <pubDate>Fri, 19 Dec 2008 13:52:40 +0900</pubDate>
      </item>
            <item>
         <title>エスケープは出力時に</title>
         <description><![CDATA[<div class="section">
  CGIプログラムは、HTMLを出力とすることが多い (というか殆ど) ため、入力データに対して HTML エスケープを施すものが多く見られます。
  <table class="code">
  <tr>
    <td class="caption">入力部</td>
    </tr>
  <tr>
    <td><pre>
cgi    =CGI::new()
title  =CGI::escapeHTML(cgi.params[<em class="str">'title'</em>])
artist =CGI::escapeHTML(cgi.params[<em class="str">'artist'</em>])
asin   =CGI::escapeHTML(cgi.params[<em class="str">'asin'</em>])
</pre></td>
    </tr>
  <tr>
    <td class="caption">出力部 (<a href="http://ja.wikipedia.org/wiki/ERuby">eRuby</a>)</td>
    </tr>
  <tr>
    <td><pre>
&lt;<em class="kwd">table</em>&gt;
  &lt;<em class="kwd">tr</em>&gt;
    &lt;<em class="kwd">th</em>&gt;タイトル&lt;/<em class="kwd">th</em>&gt;
    &lt;<em class="kwd">td</em>&gt;<em class="erb">&lt;%=title%&gt;</em>&lt;/<em class="kwd">td</em>&gt;
  &lt;/<em class="kwd">tr</em>&gt;
  &lt;<em class="kwd">tr</em>&gt;
    &lt;<em class="kwd">th</em>&gt;アーティスト&lt;/<em class="kwd">th</em>&gt;
    &lt;<em class="kwd">td</em>&gt;<em class="erb">&lt;%=artist%&gt;</em>&lt;/<em class="kwd">td</em>&gt;
  &lt;/<em class="kwd">tr</em>&gt;
  &lt;<em class="kwd">tr</em>&gt;
    &lt;<em class="kwd">th</em>&gt;購入&lt;/<em class="kwd">th</em>&gt;
    &lt;<em class="kwd">td</em>&gt;&lt;<em class="kwd">a</em> <em class="usr">href</em>=<em class="str">"http://www.amazon.co.jp/dp/<em class="erb">&lt;%=asin%&gt;</em>"</em>&gt;Amazon.co.jp&lt;<em class="kwd">a</em>&gt;&lt;/<em class="kwd">td</em>&gt;
  &lt;/<em class="kwd">tr</em>&gt;
&lt;/<em class="kwd">table</em>&gt;</pre></td>
    </tr>
  <tr>
    <td class="caption">実行結果 (HTML出力)</td>
    </tr>
  <tr>
    <td class="result">
<pre>&lt;<em class="kwd">table</em>&gt;
  &lt;<em class="kwd">tr</em>&gt;
    &lt;<em class="kwd">th</em>&gt;タイトル&lt;/<em class="kwd">th</em>&gt;
    &lt;<em class="kwd">td</em>&gt;American McGee's &amp;quot;ALICE&amp;quot; (Original Music Score)&lt;/<em class="kwd">td</em>&gt;
  &lt;/<em class="kwd">tr</em>&gt;
  &lt;<em class="kwd">tr</em>&gt;
    &lt;<em class="kwd">th</em>&gt;アーティスト&lt;/<em class="kwd">th</em>&gt;
    &lt;<em class="kwd">td</em>&gt;Chris Vrenna&lt;/<em class="kwd">td</em>&gt;
  &lt;/<em class="kwd">tr</em>&gt;
  &lt;<em class="kwd">tr</em>&gt;
    &lt;<em class="kwd">th</em>&gt;購入&lt;/<em class="kwd">th</em>&gt;
    &lt;<em class="kwd">td</em>&gt;&lt;<em class="kwd">a</em> <em class="usr">href</em>=<em class="str">"http://www.amazon.co.jp/dp/B00005OB0J"</em>&gt;Amazon.co.jp&lt;<em class="kwd">a</em>&gt;&lt;/<em class="kwd">td</em>&gt;
  &lt;/<em class="kwd">tr</em>&gt;
&lt;/<em class="kwd">table</em>&gt;</pre></td>
     </tr>
  </table>
  <p>
    HTMLのタグや属性の記述に使用される <code>&lt;</code>, <code>&gt;</code>, <code>&amp;</code>, <code>&quot;</code> といった特殊文字をエスケープすることで、<a href="http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%82%B9%E3%82%B5%E3%82%A4%E3%83%88%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0">クロスサイトスクリプティング</a>などの不正な出力を防止しているわけです。
    このような、入力時にエスケープ処理を施す手法は多くの書籍・サイトなどで紹介され、実際に公開されている Web アプリケーションにおいても広く用いられています。
    しかしながら、この手法には大きな問題点があります。
  </p>
</div>
]]></description>
         <link>http://www.codelogy.org/archives/2008/11/post_14.html</link>
         <guid>http://www.codelogy.org/archives/2008/11/post_14.html</guid>
        
        
         <pubDate>Sun, 09 Nov 2008 00:00:00 +0900</pubDate>
      </item>
            <item>
         <title>FBXファイルを読み込む(スキン情報の取得) </title>
         <description><![CDATA[<div class="section" style="margin-bottom: 1em;">
松浦さんから依頼を受けて、Autodesk Maya 等の .fbx 形式からMicrosoft DirectX の .x 形式に変換するスクリプトを書きました。<br />
FBX形式の仕様は膨大で、予想していたよりもずっと大掛かりな作業となってしまいました。<br />
これからFBX SDKを扱う人の助けになることを祈って、解説記事を書くことにします。<br />
</div>]]></description>
         <link>http://www.codelogy.org/archives/2008/09/fbx_1.html</link>
         <guid>http://www.codelogy.org/archives/2008/09/fbx_1.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">3D</category>
        
        
         <pubDate>Sat, 27 Sep 2008 00:00:00 +0900</pubDate>
      </item>
            <item>
         <title>モーションキャプチャデータの使い方（計画編）</title>
         <description><![CDATA[<p>
前回予定していましたFBX形式からメッシュやマテリアル情報を抜き出す方法ですが、FBXSDKのドキュメントがあまりにも、以下略であるため、断念しました。<br>
簡単に理由をあげますと、クラスの説明がたったの英語5単語であったり、関数名がGetなのに説明がSetだったりとすさまじいものがあります。<br>
ですので今回はFBXはおいておき、モーションキャプチャデータであるBVHファイルの利用方法を考えてみたいと思います。<br>
これに対応できるMax,Mayaプラグインを近日に書きたいと思っています。<br>
既に合成を終えたわけではありませんので、間違っている部分があるかもしれません。<br>
その部分は合成が終了しだいプラグインのソースコードと一緒に公開したいと思います。<br>
</p>]]></description>
         <link>http://www.codelogy.org/archives/2008/09/post_13.html</link>
         <guid>http://www.codelogy.org/archives/2008/09/post_13.html</guid>
        
        
         <pubDate>Fri, 26 Sep 2008 11:20:12 +0900</pubDate>
      </item>
            <item>
         <title>32ビット環境で64ビット整数を扱う (加法編)</title>
         <description><![CDATA[<div class="section">
  通常用いられる整数型 (32ビット符号付き) は -2,147,483,648 ～ 2,147,483,647 の範囲の値を表現することができます。<br />
  殆どのアプリケーションにおいては、この制限が問題になることはまずありません。<br />
  しかし、この範囲を超える値を扱う必要のあるアプリケーションも存在します。<br />
  <br />
  そこで考え付くのが、32ビット環境で64ビット整数を扱うための仕組みを作ることですが、実際にやってみると意外なほどに手間が掛ってしまいます。<br />
  この記事では、四則演算・10進出力などのプログラムを組むときの手順や考え方について解説していきます。
</div>

<h3 class="section">64ビット整数の表現</h3>
<div class="section">
  まず、64ビット整数を表現するための構造体を定義します。<br />
  <b>DWORD</b> (<b>unsigned</b> <b>long</b>) 

組み込みの整数型は最大で32ビットまでなので、これを 2つ組み合わせて64ビット整数を表現します。
  <table class="code">
  <tr>
    <td>
      <pre><em class="kwd">#ifndef</em> __QWORD_H__
<em class="kwd">#define</em> __QWORD_H__

<em class="cmt">//32ビット整数</em>
<em class="kwd">typedef</em> <em class="kwd">unsigned</em> <em class="kwd">long</em> <em class="usr">DWORD</em>;

<em class="cmt">//64ビット整数</em>
<em class="kwd">typedef</em> <em class="kwd">struct</em> {
    <em class="usr">DWORD</em> dwLow;  <em class="cmt">//下位32ビット</em>
    <em class="usr">DWORD</em> dwHigh; <em class="cmt">//上位32ビット</em>
} QWORD;

<em class="kwd">#undef</em> <em class="cmt">//__QWORD_H__</em>
<em class="cmt">//[EOF]</em></pre></td>
    </tr>
  </table>
  メンバ <b>dwHigh</b> の最上位ビットは符号ビットとして利用しますが、この段階では特に気にする必要はないでしょう。
</div>
]]></description>
         <link>http://www.codelogy.org/archives/2008/09/3264.html</link>
         <guid>http://www.codelogy.org/archives/2008/09/3264.html</guid>
        
        
         <pubDate>Thu, 04 Sep 2008 19:00:00 +0900</pubDate>
      </item>
            <item>
         <title>連結リストを作る (1)</title>
         <description><![CDATA[<div class="section" style="margin-bottom: 1em;">
  C/C++ の配列は、そのサイズをコンパイル時に決定する必要があります。<br />
  そのため、サイズが動的に変化するデータの格納が少々面倒だったりします。<br />
  <br />
  そこでよく用いられるのが、<a href="http://ja.wikipedia.org/wiki/%E9%80%A3%E7%B5%90%E3%83%AA%E3%82%B9%E3%83%88">連結リスト</a>と呼ばれるデータ構造です。
  殆どの環境ではライブラリとして提供されていますが、勉強もかねて自分で実装してみましょう。
</div>


<h3 class="section">設計</h3>
<div class="section" style="margin-bottom: 1em;">
  コードを書き始めるまえに、簡単な設計を行いましょう。<br />
  この段階では詳細には立ち入らず、データの構造をおおまかに決定すれば十分です。(図 1)<br />
  <div class="figure">
    <img src="http://www.codelogy.org/archives/images/2008/09/01/0.png" alt="" style="margin-bottom: 4px;"/><br />
    【図1: 連結リストの構造】
  </div>
  リストを構成するノード (node) はそれぞれ、自分の前後に位置するノードのアドレスをメンバ変数 <code>m_lpPrev</code>, <code>m_lpNext</code> に保持します。
  （始端ノードの <code>m_lpPrev</code> および、終端ノードの <code>m_lpNext</code> は<b>NULL</b>とする)。<br />
  <br />
  リストの本体 (list) は、始端および終端ノードのアドレスを <code>m_lpHead</code>, <code>m_lpTail</code> として保持します (リストが空の場合は、<code>m_lpHead</code>, <code>m_lpTail</code> は共に<b>NULL</b>とする)。<br />
  <br />
  だいたいの構造が決まったら、いよいよ実装を始めます。
</div>
]]></description>
         <link>http://www.codelogy.org/archives/2008/09/post_12.html</link>
         <guid>http://www.codelogy.org/archives/2008/09/post_12.html</guid>
        
        
         <pubDate>Mon, 01 Sep 2008 15:00:00 +0900</pubDate>
      </item>
            <item>
         <title>3Dモデルファイルの独自形式制作（１回目）</title>
         <description><![CDATA[<p>
3D系プログラムをしていると、どうしてもついて回るのが読み込みモデリングファイルの形式です。<br>
私は普段DirectXを使っていますので、標準形式のXFileを使えばよいではないかということになりそうですが、XFileの方言はひどいものがある上に上位にあたるXNAではXFileをサポートしないといったことになっており散々です。<br>
よくデザイナーさんが使うmaya, 3ds max, LightWave3Dなどのソフトがありますが、それぞれのエクスポーターで出力するXFileも方言があり、Root Frameにアニメーション情報を含んだり、含まなかったり、メッシュの名前をつけたりつけなかったりと様々です。<br>
（他にもアニメーションの名前をつけたりつけなかったりするものまで・・・）<br>
当然標準のビューアのみで対応できるはずもなく、マテリアル色がおかしくなったり、アニメーションが壊れたり、描画すらされなかったりといった結果になります。<br>
<br>
それぞれのソフトに対応したエクスポーターを書いてもよいのですが、現在進行中プロジェクトではmaya, max, light waveすべてからのデータが送られてくるため、３つもエクスポータを書くのはさすがに無理です。<br>
ですので、これらの問題を埋めるためにAutodesk社が標準とするFBXというファイル形式から必要な情報を抜き出し独自形式にコンバートしたいと思います。<br>
<br>
今回はお仕事用としてのメモも兼ねますので、すぐに次の情報をアップしたいと思います。今回はFBXのパース、バージョンが上がったSDKの使い方がメインです。<br>
</p>]]></description>
         <link>http://www.codelogy.org/archives/2008/08/3d.html</link>
         <guid>http://www.codelogy.org/archives/2008/08/3d.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">C++</category>
        
        
         <pubDate>Fri, 01 Aug 2008 12:03:33 +0900</pubDate>
      </item>
      
   </channel>
</rss>
