忍者ブログ
ゲームプログラミングなどなど …のつもりが完全な雑記w YU-JIの思いつきな人生。
[1] [2]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

皆様こんにちは。
お久しぶりです、生きてます。

仕事は相変わらずですが、そろそろリハビリでもしようかと。

以前製作し、当HPで配布を行っている「DRAGMENTS LOAR」をPGのみ刷新しようかと思います。
製作したのが「2007/8/4」なんで、もう2年以上前になるわけですが、案の定中身は覚えてませんw
DXLibも3Dに対応したみたいなんで、久しぶりに色々いじってみたいと思います。

刷新ついでに、そのRPGの出来ていく様を、まあ講座ってわけではないですが、HPで連載しようかとも思ってます。

来年の春くらいまでにはなんとかしたいなー
PR
とか、そんな大したものでもない。

■3Dシーンの作り方
 ・画面に表示するモデル(ポリゴンの集まり・メッシュ)はアクターとして登録する。
  これにより、同じモデルを何体も画面に出したい場合でも読み込みは1回で済む。
  マップも同様。
 
 ・シーンマネージャーとは舞台のようなもので、そこにマップやアクターを設置していく。
  また、カメラやライトの設定も行う(舞台監督みたいに)

 ・完成したシーンをレンダラーに描画する事でディスプレイに表示される。
  デバッグプリントなどもこの時に描画(ちょうど、ニコニコ動画などでコメントをつける感じ)

まあ、当たり前の事だけど復習の意味をこめて。
作者さん乙!

プラグイン化のあと、続々サンプルがアップされています。
FFはやれてるのか…?

ただ、今はselene触る気にならないな…なんかごちゃごちゃしてて。
仕様もこれからコロコロ変わりそうだし。

今、3Dゲームを作るとなると
1.DirectX(OpenGL)を素で
2.HSPに逃げる
3.海外ライブラリ
ex.Xna
こんな感じか。

正直、DirectXを素で触るのが情報(紙面・ネット合わせて)が一番多くて、現実的なのかもしれない。
うーむ…
オブジェクト指向っぽくコーディングしてるんだけど
なんかしっくりこない。
気にしないで先に進もうと思うけど、ベースで失敗すると
後で直すのが大変なのでどうしても進めない…

まあ、それはいいとして
ゲーム製作講座をリニューアルします!
現在少しずつ書き直し中。
中身はこれまで通り、VC++&DXLibで行きます。

仕事が忙しくなければ、今年中に戦闘部分以外は書き上げたい気持ち。
気持ち…
あいたー
また、日があいてしまった…

先週は今まで溜まっていた「マンガ読みたい」が爆発し、マン喫で徹夜。
徹夜しても30冊くらいしか読めんかった。
また行きたい。

それはそうと、新しくゲームの土台を作っています。
久々にC++使って、オブジェクト指向っぽく(?)作ってみてます。
まだまだ知識が足りてません…orz

基本、VC++2005EE & Selene  で。
UMLも勉強してるんだが、いかんせん頭が悪すぎて習得が遅い。

ただ、本業以外にC#でソフト作りと、某タッチペン携帯ゲーム機プロジェクトがあるんで
また忙しくなりそうな予感。
作者タン乙。

でもまだプレビューなんで正式リリースまで頑張って下さいm(__)m
今年中にリリース予定らしい。

それでも1.00なんで、これから大きく仕様変更はないだろう。
サンプルソース見たら、ネームスペース切った関係でちょっとづつ変わってた。

2Dは最近ソース見て結構理解できたんだけど、3Dはまだまだ。

とりあえず、2Dソースから見直します。

結構毎日seleneのページを見ているわけですが、作者さんの更新ペースがすごいっす。
絶対真似出来ない。

> 次回の更新は緊急修正がない限りは以下の項目が揃うまで行わない方向です 
ということなんで、結構安定してきたのでしょう。
そろそろ再開してもいいかな~と思ってます。

ただ、GPUがオンボなんでシェーダーバリバリのやつは作れないっす。
ちょうど明日秋葉に行くので、色々見てこようかと思ってます。

皆もいくといいお -> XNA Game Studio Early Adoption

うんむ。仕事でちょっとテンパってて更新出来なかった…orz

今回は3D。基本の立方体表示で。
Seleneは3D用のライブラリなんで、3Dやらんと始まらないわけで。

…といっても、やることはほとんどない。
自動でやってくれる部分が多くて、説明もコメントで事足りる感じ。

76 : IModel *pModel    = NULL; // モデル用
77 : ISceneManager *pSceneMgr = NULL; // シーン管理用インターフェイス
78 : ISceneCamera *pCamera  = NULL; // シーンカメラ操作用インターフェイス
80 : CStyle Style; // 姿勢制御クラス
まあ、そのまんま。シーン管理が一番の親分で、その中にモデルとカメラがある感じ。
Styleは回転とかで使う便利な関数群みたいなもの。

202 : pSceneMgr = pRender->CreateSceneManager( 128, SCENE_MODE_MANAGED );
203 : pSceneMgr->SetRenderTargetSize( CPoint2D<Uint32>( SCREEN_WIDTH,SCREEN_HEIGHT ) );
CreateSceneManagerでレンダラーからシーンインターフェースを取得する。
3Dに関してはすべてシーンインターフェースを通さなければならない。
SetRenderTargetSizeでレンダリングターゲットのサイズを渡している。
ウィンドウのサイズをCPoint2D型で渡す。

212 : pCamera = pSceneMgr->GetSceneCamera();
217 : pCamera->UpdateProjection( 1.0f, 100.0f, DEG_TO_ANGLE(45),SCREEN_WIDTH,SCREEN_HEIGHT );
GetSceneCameraでカメラのインターフェースを取得。
1つのシーンに、カメラは1つ。
次に、プロジェクションの設定。3Dの基本。

226 : pModel = pRender->CreateModelFromFile( "Cube.smf" );
3Dオブジェクトを読み込む。
smfは同梱のツールで作れるselene用3Dモデル。
ステートはあんま気ににしなくてもいい。お好きなものを。

268 : pSceneMgr->SetClearColor( CColor(128,128,192) );
269 : pSceneMgr->Rendering();
画面を指定色で初期化し、レンダリング。

あとは、カメラ・ライト・モデルを更新しているだけ。
このサンプルではモデリング以外は動かしてないが。

うーん、一回DirectXをやった後だと理解しやすいかも。
SDKなんかについてくるドキュメントを参考書として活用しましょう。

今回のサンプル
gamdev.org/up/img/9649.zip
sample3_img.JPG

今回は画像描画。

前回のソースに画像描画を追加。
2Dゲームならこれでおk。

うは。ねむい。

ですので、サンプルソース乗っけとく。
gamdev.org/up/img/9630.zip
sample2_img.JPG

昨日その2を書いたのに、保存するを選んだ瞬間サーバーメンテになって凹んだ…orz

とりあえず、前回やった2D_FontSpriteのソースでも眺めて見ませう。

38 : WINAPI WinMain
お決まり。問題なし。

40 : ICore *pCore    = NULL; //ウィンドウ管理インターフェイス
41 : IGraphicCard *pGraphicCard = NULL; //ビデオカード管理インターフェイス
42 : IDevice *pDevice   = NULL; //デバイス管理インターフェイス
43 : IRender *pRender   = NULL; //レンダラーインターフェイス
44 : IFontSprite2D *pFontSpr  = NULL; //フォントスプライト管理インターフェイス
45 : IFileManager *pFileMgr  = NULL; //ファイル管理クラス
上4つはSeleneの基礎の基礎でしょう。これがないと何も出来ないやつ。
理解できなくてもこのまま書けばok。
下2つはフォントとファイル管理です。

52 : System::Initialize();
200 : System::Finalize();
Seleneの初期化と開放。最初と最後に必ず書く。

60 : pCore = System::CreateCore();
ウィンドウ1つにつき1つのコアが取得できるらしい。

67 : pCore->Initialize( "Selene Sample Program", FRAME_RATE_60 )
どう見てもウィンドウタイトルとフレームレートを渡している。
ウィンドウを初期化する。
ちなみに、フレームレートの種類。
・FRAME_RATE_60,    // 1フレーム1/60
・FRAME_RATE_30,    // 1フレーム1/30
・FRAME_RATE_20,    // 1フレーム1/20
・FRAME_RATE_15,    // 1フレーム1/15
上記4つがenumで定義されている。

76 : pGraphicCard = pCore->CreateGraphicCard( GRAPHIC_CARD_DEFAULT_NO );
グラフィックカードの管理なので、性能なども取得できるらしい。
ちなみに、
// 通常GraphicCardNoにはGRAPHIC_CARD_DEFAULT_NOを指定します。
// 「NV PerfHUD」のインストールされた環境では、
// GRAPHIC_CARD_NV_PERF_HUDを指定することでそれを有効に出来ます。
とかある。うほっ、これはいい機能~!NV PerfHUDについては>www.shader.jp/xoops/html/masafumi/directx9/fxcomposer/fx007.htm

86 : pCore->Start( SCREEN_WIDTH, SCREEN_HEIGHT, true );
ウィンドウ作成。引数は、ウィンドウサイズとウィンドウモードフラグ。

92 : pFileMgr = pCore->CreateFileMgr();
94 :  pCore->SetFileManager( pFileMgr );
96 :  pFileMgr->SetCurrentPath( "font" );
フォルダを指定しとけば、ファイルパスとか気にならないって代物っぽい。

104 : pDevice = pGraphicCard->CreateDevice();
112 : pRender = pDevice->CreateRender();
デバイス作成とレンダラー取得。おまじないおまじない。

118 : pFontSpr = pRender->CreateFontSprite2DFromFile( "Font.sff", "tga", FONT_MAX );
Seleneに付属のFontUtilityで生成した定義ファイルとテクスチャを使って、高速に文字列の描画を行うことが可能って事らしい。

129 : pCore->Run()
メインループ。この中でフレーム制御とか色々勝手にやってくれて便利。

136 : pDevice->Clear( 0x00303030 );
145 : pRender->Begin();
156 : pRender->End();
デバイス(バックバッファ)を初期化して、レンダラーに描画の開始と終了を伝えている。
当然、BeginとEndの間に描画しないと意味なし。

147 : pRender->SetDrawType( DRAW_TYPE_BLEND );
描画タイプを指定。
・DRAW_TYPE_NORMAL,     ///< 通常描画
・DRAW_TYPE_BLEND,     ///< 半透明描画
・DRAW_TYPE_ADD,      ///< 加算描画
・DRAW_TYPE_ADD_NOALPHA,    ///< 加算描画(アルファ値無効)
・DRAW_TYPE_SUB,      ///< 減算描画(アルファ値無効)
・DRAW_TYPE_SUB_NOALPHA,    ///< 減算描画(アルファ値無効)
・DRAW_TYPE_MULTIPLE,     ///< 乗算描画
・DRAW_TYPE_SCREEN,     ///< スクリーン描画
お好きなものをどうぞ。

151 : pFontSpr->Rendering();
フォントスプライトをレンダリング(描画)
幾ら裏に描画しても、レンダリングしないと見えないよ。

163 : pFontSpr->Begin();
166 : pFontSpr->DrawString( "さんぷるテキスト", CPoint2D<Float>( 100, 100 ), CColor(255,255,255,255) );
 167 : pFontSpr->DrawString( "ハンカクもかけます", CPoint2D<Float>( 100, 130 ), CColor(255,255,255,255) );
 168 : pFontSpr->DrawString( "ABCabcABCabc012012", CPoint2D<Float>( 100, 160 ), CColor(255,255,255,255) );
171 : pFontSpr->End();
上のBegin-Endと同じ。
フォントスプライトへの描画。

ここからは終了処理。
// ファイルマネージャー解放
176 : SAFE_RELEASE( pFileMgr );
// フォントスプライトの解放
179 : SAFE_RELEASE( pFontSpr );
// レンダラーの解放
182 : SAFE_RELEASE( pRender );
// デバイスの解放
185 : SAFE_RELEASE( pDevice );
// グラフィックカードの解放
188 : SAFE_RELEASE( pGraphicCard );
// コアの解放
192 :  SAFE_RELEASE( pCore );
多分、取得(生成)した逆順で開放したほうがいいと思う。
いきなりコアを開放したら、その下のデバイスやグラフィックカードが迷子になりそうなので。
(そうなってもきちんと開放できるように内部ではなっていると思うけど、精神的に)

こんなとこかな。
なんか、コメント振ってくれてるんでそれ読めば理解できるな…書いた意味が…orz
基本的にF12で何とかなるかな。

今回のサンプル
gamdev.org/up/img/9629.zip
sample1_img.JPG



忍者ブログ [PR]
カレンダー
10 2024/11 12
S M T W T F S
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
カウンター
最新コメント
[04/13 J]
[08/29 abc]
[07/28 YU-JI]
[07/26 おばけ]
[11/14 YU-JI]
最新トラックバック
プロフィール
HN:
YU-JI
HP:
性別:
男性
自己紹介:
一応ITどかた(プログラマ)からSEにランクアップ?
完全にいいように使われて、ランクダウンな感じは否めない。
うつ病一歩手前www
ブログ内検索
アクセス解析
バーコード
フリーエリア