スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

完璧なシステムには程遠い

今、相変わらずスキンメッシュアニメーションをする為の、
ゲームエンジンらしきものを作っているのですが、

不具合発生しまくりで、バグとりに追われている始末です。
(お、おのれ・・・!)

「よし!見事なSingletonパターン & Flyweightパターンだ!」 とか
勝手に感動していたら、欠陥が色々と出てきたんですよ。
----------------------------------------------------------------------
●D3DXCreateTextureFromFileA関数でテクスチャを読み込み失敗した場合、
デストラクタで、不定のポインタをReleseしようとしてバグる。

●Meshデータを、データベースに登録する方式にしていたが、
  別名のXファイルに同名のMesh名があったらバグる。

※"map"というものを使用しているのですが、これはダブった要素は登録できない。

●Xファイルの"templete"を削除していなかったらバグる。
※階層構造を作る場合、カッコの数で階層を判断している。 ⇒ { }
その為 本来無いはずのカッコを読み込めば当然、階層構造はメチャクチャになる。
----------------------------------------------------------------------
まぁ他にも色々起こったのですが、割愛。

vectorは範囲外アクセスすると、
とんでもないメモリリークを起こしますね。
特に沢山push_backした後は物凄い。
「ヴァン!!」という効果音と共に、エラーウインドウが表示されます。)

あまりにも酷い出力ウインドウだったので、
「こんなもの見たくないわ!」と思って、即座にビルドし直し
出力ウインドウを更新させました。
(メモリリークした事実は消えないんですけどね)

まぁ、でも一応 クラス分けをしなおして、表示できる段階まで到達。

とりあえず実行結果。

【実行結果】
3Dモデル

自力で3Dモデルを表示する部分はラクに構築できるようになりました。
(一度完成させればコチラの物である。)

あとは出来るだけ、様々な使い方をしてバグが出ないかチェックしようと思います。
ちょっと違うことしただけで壊れる設計では困りますからね。
"フールプルーフ"と言うやつです)


あと最後に小ネタ。
---------------------------------------------------------------------------
if(v.size() == 4)
Device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,&v[0],sizeof(TEST));
else
Device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,1,&v[0],sizeof(TEST));
---------------------------------------------------------------------------
上記のように、四角ポリゴンか三角ポリゴンかで描画方法を分けていたのですが、

※四角ポリゴンの場合は、 三角ポリゴンの数が2つ
 三角ポリゴンの場合は 三角ポリゴンが1つですよ、 と指定しなければならない。

(四角以上の、多角形も可能ですが 今のところ使う予定ナシ。
W ←こんな感じに頂点が5、その頂点を使って出来る三角ポリゴンの数が3の場合は"3"になります。)

1ビットシフトすれば 上手い具合に
描画できる事を発見。


なので、if文を削除してみました。
---------------------------------------------------------------------------
Device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,(v.size())>>1,&v[0],sizeof(TEST));
---------------------------------------------------------------------------

四角ポリゴン: 00000100 ⇒ 00000010 (10進数で
三角ポリゴン: 00000011 ⇒ 00000001 (10進数で
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。