2022年9月8日木曜日

コードリーディング part1

 Githubでソースコードを探し、興味深いロジックをここにまとめる

1. MikuDesktopDance

MMDモデルをデスクトップに常駐させるソフト
C++/DXライブラリを使用、モーションデータvmdも再生できる
ソースコードのファイル数は10個程度
 
DXライブラリのMV1LoadModel()の1行でモデルデータ(pmd/pmx)を読み込める
ModelHandle = MV1LoadModel( "kasen/kasen.pmd" ) ;
 
// 主要クラス
Model model;
Camera camera;
BGM bgm;
CommandPanel commandpanel;    // 右クリックで出るポップアップメニューの処理
Mouse mouse;
Key key;

class Animation { 
    float Time;    // アニメーションの再生時間
 
    // アニメーション切り替え時に補間 MV1SetAttachAnimBlendRate() を行う
    int index;    // 現在のアニメーション番号
    int index_old;    // 前回のアニメーション番号
    float blending;    // ブレンド率
}
 
透過処理やデスクトップ表示のためか描画されたデータが以下のように流れる
フレームバッファーMSAAScreenHandle->フレームバッファーScreenHandle->画像SoftImageHandle->透明なウィンドウに表示
 

C#/DXライブラリによる似たような記事もある
 

2. super-mario-bros

C++/SDL2での2Dマリオ
System Entity Componentの3つの概念が出てくる
 
シーンがシステムとエンティティを持ち、エンティティがコンポーネントを持つ
各システムがコンポーネントの情報をもとに毎フレームの処理を行う
 
サウンドはエンティティとして溜め込まれ、再生されたら破棄される
 
エンティティの生成、コンポーネントの追加

初期化、更新をつかさどる各種System

クラスの継承におけるfriendと=0(純粋仮想関数)

様々な型のコンポーネントをcomponentsに入れ込む処理
templateはステップ実行で処理を追うと分かりやすい
 

0 件のコメント:

コメントを投稿