忍者ブログ
へっぽこプログラマーの就職活動

2024-05

カレンダー
04 2024/05 06
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 31
最新コメント
最新トラックバック
バーコード
ブログ内検索
アクセス解析
カウンター
×

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

今回はカメラワークの話です。

 昨夜、3Dゲーム作成でカメラワークを作っていました。
作成内容は・・・

    1・プレイヤーと一定の距離を保つ
    2・カメラはプレイヤーの周りを球状に移動

の条件で今回は2を作成。

が、結果は上手く作れませんでした(T_T)

ソースは

//////////////////////////////////////
//           カメラ移動
//////////////////////////////////////
void CAMERA::Move( D3DXVECTOR3 Player_Pos ){

//プレイヤーpos - カメラpos の単位化
D3DXVECTOR3 A;
D3DXVec3Normalize( &A, &( Player_Pos - Pos ) );

//カメラの基準となる単位ベクトル
D3DXVECTOR3 B = D3DXVECTOR3( 0, 1, 0 );

//ベクトルAとベクトルBの内積にてコサイン値算出
float ang = D3DXVec3Dot( &A, &B );

// 回転軸算出
D3DXVECTOR3 rot;
D3DXVec3Cross( &rot, &A, &B ) );

//回転行列作成(回転軸rotで回転量のang(コサイン値)回転)
D3DXMatrixRotationAxis( &RolMatrix, &rot, acos( ang ) );
}

//////////////////////////////////////
//           カメラの座標変換
//////////////////////////////////////
void CAMERA::setCamera ( ){
matView  =  World ( pos, RolMat, 1 );

lpD3DDevice->SetTransform(D3DTS_VIEW, &matView)

D3DXMatrixPerspectiveFovLH (&matProj,
         D3DXToRadian(45.0f),
         800.0f/600.0f,
         1, 500);

lpD3DDevice->SetTransform(
                                    D3DTS_PROJECTION, 
                                    &matProj);
}

//////////////////////////////////////
//           座標変換
//////////////////////////////////////
D3DXMATRIX World (D3DVECTOR Pos, 
                                       D3DXMATRIX Rol, float Size){

 D3DXMATRIX  matXYZ;
 D3DXMATRIX  matScale;

 D3DXMatrixTranslation (&matXYZ, Pos.x, Pos.y, Pos.z);

 D3DXMatrixScaling (&matScale, Size, Size, Size);

 return  matScale * Rol * matXYZ;

}

 コメントを見てもらえばわかると思いますが、Move で回転行列作成して
setCamera で反映してるんですが上手くいきませんでした・・・
 それで徹夜して調べたのですが、途中から眠くて頭に入らないわ、
計算式や関数が出てこないわで、結局その日のうちに終わりませんでした・・・

 翌日、クラスメイトに上記のソースを見せながら作りたいカメラワークを
説明したところ、

M君   「DirectXのヘルパー関数にあるよ」
私    「・・・え?」
心の声 「な、なんだってー!!」

 要は、ググれカスってことですね、わかります

ソースは上記のsetCamera

void CAMERA::setCamera (D3DXVECTOR3 ppos){ 

//この関数で解決!左手座標系ビュー行列を作成
//引数は左から、座標変換後に格納される行列、
//カメラpos 、プレイヤーpos 、カメラの基準となるpos
D3DXMatrixLookAtLH(&matView, &pos, &ppos, 
                                         &D3DXVECTOR3(0, 1, 0));

 lpD3DDevice->SetTransform(D3DTS_VIEW, &matView);

 D3DXMatrixPerspectiveFovLH (&matProj,
        D3DXToRadian(45.0f),
        800.0f/600.0f,
        1, 500);

 lpD3DDevice->SetTransform(
                                   D3DTS_PROJECTION, 
                                   &matProj);

}

になり Move 内の処理が要りません。

なんだよ~、1行で終わるじゃんよ~・・・orz

 私は過去に3Dゲームを作成してきて(といっても、課題数しか完成品は無い)、
カメラワークは先生側が用意してくれたプログラムしか使用していなかったため、
勉強はしていませんでした。
 でも、これで忘れずに覚えることが出来そ~

とりあえず、ポジティブに行こうぜ!!



余談ですが、



学校遅刻しました・・・



 


PR
この記事にコメントする
お名前:
タイトル:
文字色:
メールアドレス:
URL:
コメント:
パスワード:   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
usa
長女
特化:4114攻極振り
Lv:192
TM:195
担当:うちの看板娘
トムベス剣出した良い子

fox
次女
特化:1144感知・幸運振り
Lv:162
TM:151
担当:成長合成苦手・掘り微妙な可哀想な子
たまにこの子で掘ってます

tanu
長男
特化:3124回避極振り
Lv:170
TM:143
担当:変身たぬぬ
とりあえず避ける、そして硬い・・・以上!

sisi
次男
特化:4141命中極振り
Lv:161
TM:134
担当:つい最近までトムベス狩り要員
トム盾出した良い子


tmg
三女
風水特化:1423魔極振り
Lv:218
TM:192
担当:クエ品集め
ブラッド狩り要員

drg
三男
光特化:1423魔極振り
Lv:186
TM:174
担当:パーティクエの護衛など
カラン・ブラッド狩り要員
ポニテドラゴンかわいい・・・


著作権表記
Copyright(C) 2009 GCREST, Inc. All Rights Reserved.
Copyright(C) 2009 NtreevSoft Co., Ltd. All Rights Reserved.
忍者ブログ [PR]
by 桜花素材サイト様