実装メモ Edit

2012/12/04 行指向と列指向の行列のかけ算の順番 Edit

列指向(OpenGLなど)

gl_Position = projMtx * viewMtx * vtxPos;

行指向(DirectXなど)

gl_Position = vtxPos * viewMTx * projMtx;

2012/11/18 G3D::ResMdlの要素を整理する Edit

登場人物クラス名略称補足
モデルResMdlmdl1visual_sceneノードが1xmdlファイルで1ResModel。
ノードResMdlNodenod行列制御単位。
メッシュResMdlMeshmesVisibility制御単位。daeでいうmeshに相当。
シェイプResMdlShapeshp描画単位ジオメトリ。1マテリアル1シェイプ。daeでいうtrianglesに相当。
daeと異なりシェイプ単位で頂点の位置,法線などの配列を持たせる。
マテリアルResMatmatマテリアル。

となると状態保持はNodeState,MeshState(VisibilityState),MaterialStateとなりそう。

コンバータのイメージ

DAEConverter.exe input_xml_path -xmdl "Hoge.xmdl" # 0番目のvisual_sceneをHoge.xmdlに出力
DAEConverter.exe input_xml_path -xmdl "Foo;Hoge.xmdl" #Fooという名前のvisual_sceneをHoge.xmdlに出力

2011/04/03 MSVC2010 で同名cppファイルによるobjファイル衝突回避方法 Edit

オブジェクトファイルの出力先を次のように変更する

$(IntDir)\%(Identity).obj

2011/04/02 iOSのXCodeプロジェクトの注意 Edit

リンカフラグに -ObjC がないとアプリケーションデリゲートが見つからないと言われて強制終了するので注意。

2011/03/21 テクスチャのサイズ制限 Edit

2のべき乗制限は有りにする。
無しにしたいけど未だにこの制限があるハードはたくさんありますし。

2011/03/20 UVの座標系 Edit

DirectXは画像の左上が(0,0)。
OpenGLは画像の左下が(0,0)。
この違いを吸収するには仕様を片っ方に合わせておけばいいのかな?
OpenGL基準(画像の左下0,0)にしたとするとDirectXでは上下反転した画像を出力すればそのまま使えるはず。
エンジンの仕様でどっちを採用するか決めてしまえばいいだけのことね。

2011/03/15 拡張子とクラス名 Edit

.xtex .bxtex CrossFramework.G3D.ResTex

2011/03/08 G3Dの初期設定 Edit

項目初期値
viewportメインスクリーンのサイズいっぱい
clearColorRGBA(0.0,0.0,0.0,0.0)
colorUpdateenable
clearDepth1.0
depthUpdateenable
depthComparealways
mtxProjortho l-r(-1,1) b-t(-1,1) n-f(0,1)
mtxViewidentity

2011/03/06 iOSのエントリーポイント Edit

こんな感じかな。

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 
-
|
|
|
|
|
!
 
 
-
|
|
|
|
|
|
|
|
|
|
!
 
 
-
|
|
|
|
|
|
|
-
|
|
|
|
|
!
|
|
|
|
|
|
|
|
!
 
int main()
{
    // Macと同じように引数解釈
    // ...
    
    // C++のコードに移動
    return mainC( ... );
}
 
int mainC( Arg aArg )
{
   // xmainスレッド作成
   // ...
   
   // UIMain実行
   // ...
   
   // xmainスレッドの完了待ち
   // ...
   
   // 終了
}
 
int xmainThreadEntryPoint( Arg* aArgPtr )
{
   // 起動完了待ち
   waitSignal(); // UIMainからSignalが来るのを待つ
   
   // ここにくるのはDidFinishedLaunchのタイミング
   
   // xmain起動
   int result = 0;
   {
       // Application作成
       Application app( *aArgPtr );
       
       // xmain呼び出し
       result = xmain( app );
   }
   
   // ここにくるのはapplicationWillTerminate
   
   // UIMainに終了したことを伝達
   signalToUIMain();
   
   // 何も待たずスレッド終了
   return result;
}

スレッドでUIViewとかUIWindowを作っても表示されないところで数時間はまった。
スレッドがexitせずにsleepする状態だと怒るらしい。
スレッドを寝かす前に CATransaction::flush() で明示的にCoreAnimationを更新してやるといけた。
正しい方法かどうかは不明…。

2011/03/05 iOS対応どうやろう Edit

元々WinとMacのクロスプラットフォームで考えていましたが
流行のiOSも対応させてみるのはおもしろそうと思いちょっと考えてみました。

iOS対応となると一番ネックなのがイベントドリブン式になるということ。

didFinishLaunchingWithOptions
applicationWillTerminate
applicationWillResignActive
applicationDidBecomeActive

初期化・後始末・アクティブ化・非アクティブ化のイベント。
後は毎秒60回のイベントが流れてくると考えれば良さそうです。

…という要件からメインループを書いてみる。

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
-
|
|
|
|
-
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
!
!
 
int xmain()
{
    Application app;
 
    bool doExit = false;
    while ( !doExit )
    {
        Event event = app.eventReceive();
 
        switch( event )
        {
        case EventKind_Quit:
            doExit = true;
            break;
 
        case EventKind_BecomeActive:
            break;
 
        case EventKind_ResignActive:
            break;
 
        case EventKind_UpdateFrame:
            update();
            draw();
            break;
 
        default:
            break;
        }
    }
}

なんとかいけるかな?


    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS