- 1 名前:まだ初心者なの [02/06/27 02:02 ID:HvMYma0g]
- 比較的規模の小さい
ゲームやアルゴリズムをUPしたり 語り合ったりするスレッドです。 勉強用ですので、言語の選択についてや ゲームが面白いかどうかの議論は禁止の方向で。 UPする方は使用言語を明記してください。 どうか盛り上がってください。おながいします。おながいします。
- 67 名前:名前は開発中のものです。 mailto:age [02/07/05 14:32 ID:???]
- メタセコイアっぽいマウスによるカメラの制御方法です。
回転にはクォータニオンを使ってます。 void CMouseListener::RotateCameraPosition() { int dx = mouseoldx - mousex; int dy = mouseoldy - mousey; float dtheta1 = dx*D3DXToRadian(1)/2; float dtheta2 = dy*D3DXToRadian(1)/2; D3DXVECTOR3 axis1 = D3DXVECTOR3(0.0f,1.0f,0.0f); //x-z平面上で見たときの角度を取得 float thetaaxis2 = (float)atan2(-vCameraPos.x,-vCameraPos.z); //π/4回転させる D3DXVECTOR3 axis2 = D3DXVECTOR3(cosf(thetaaxis2),0,-sinf(thetaaxis2)); //続く
- 68 名前:名前は開発中のものです。 mailto:sage [02/07/05 14:37 ID:???]
- D3DXQUATERNION q1,q2,
qi1,qi2;//逆クオータニオン //dthetaだけaxisに対して回転 D3DXQuaternionRotationAxis(&q1,&axis1,dtheta1); D3DXQuaternionRotationAxis(&q2,&axis2,dtheta2); //逆クォータニオンを設定 D3DXQuaternionInverse(&qi1,&q1); D3DXQuaternionInverse(&qi2,&q2); //元のカメラの位置ベクトル成分を持つクォータニオン D3DXQUATERNION qPos = D3DXQUATERNION(vCameraPos.x,vCameraPos.y,vCameraPos.z,0.0f); D3DXVECTOR3 vNewPos1,vNewPos2; //それぞれの軸についてカメラの位置を回転させたものを求めて D3DXQUATERNION qNewPos1 = q1*qPos*qi1; D3DXQUATERNION qNewPos2 = q2*qPos*qi2; //ベクトルとして合成 vNewPos1 = D3DXVECTOR3(qNewPos1.x,qNewPos1.y,qNewPos1.z); vNewPos2 = D3DXVECTOR3(qNewPos2.x,qNewPos2.y,qNewPos2.z); //正規化 D3DXVec3Normalize(&vCameraPos,&(vNewPos2 + vNewPos1)); //元の大きさを持たせる vCameraPos*= Dist; //変換行列を作成、IDirect3DDeviceに与える ApplyNewCameraPosition(); }
- 69 名前:68 mailto:sage [02/07/05 14:43 ID:???]
- ゴメソ訂正
×//ベクトルとして合成 ○//ベクトルとする です。んでは学校行ってきます
|

|