本文整理汇总了C++中Point2D::toRealVector方法的典型用法代码示例。如果您正苦于以下问题:C++ Point2D::toRealVector方法的具体用法?C++ Point2D::toRealVector怎么用?C++ Point2D::toRealVector使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Point2D
的用法示例。
在下文中一共展示了Point2D::toRealVector方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Update_RotateCamOnGazePoint
void CameraWorkManager::Update_RotateCamOnGazePoint( double timeslice )
{
static const double DrugMoveScale=0.005; // ドラッグ量に対する視点の移動量のパラメータ
static Vector2D ScreenDrugStartPoint; // マウスでドラッグを開始したスクリーン上の座標を格納
static Vector2D SavedCamDist; // マウスでドラッグを開始したときの、m_dTilt、m_dHead を保持
static bool nowDruging=false; // 今ドラッグ中か?
// キー入力から、m_dTilt と m_dHead を更新
//getKeyInput();
// スクロール操作から、カメラと注視点の距離を更新
getMouseWheelInput(timeslice);
// マウスによるドラッグ操作により、m_dTilt と m_dHead を更新
if( nowDruging )
{ // 今ドラッグ中
// ドラッグ終了したかを判定
if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) == 0 )
{ // ドラッグ終了
nowDruging = false;
}
else
{
// 今のマウス位置を取得
Point2D pos;
GetMousePoint( &(pos.x) , &(pos.y) );
Vector2D CurMousePos( (double)pos.x, (double)pos.y);
// m_dTilt と m_dHead を更新
Vector2D NewCamDist = -DrugMoveScale*(CurMousePos-ScreenDrugStartPoint)+SavedCamDist;
m_dTilt = NewCamDist.y;
m_dHead = NewCamDist.x;
}
}
else
{ // ドラッグ中でない
// ドラッグ開始したかを判定
int button;
Point2D pos;
if( GetMouseInputLog( &button, &pos.x, &pos.y, TRUE )==0
&& ( button & MOUSE_INPUT_LEFT ) != 0 )
{ // ドラッグが開始された
// ドラッグ開始時の マウス座標を ScreenDrugStartPoint に保持
ScreenDrugStartPoint = pos.toRealVector();
// ドラッグ開始時の m_dTilt、m_dHead の値を SavedCamDist に保持
SavedCamDist.y = m_dTilt;
SavedCamDist.x = m_dHead;
// ドラッグフラグを立てる
nowDruging = true;
}
}
// m_dHead と m_dTilt から、(GazingPointを原点とした)カメラの位置を計算する
Vector3D Hedding3D( 1.0, 0, 0 );
Hedding3D = VTransform( Hedding3D.toVECTOR(), MGetRotZ( (float)m_dTilt ) ); // もしかしたら、マイナスにしないと駄目かも
Hedding3D = VTransform( Hedding3D.toVECTOR(), MGetRotY( -1*(float)m_dHead ) );
Vector3D toCamPos3D = m_dCamDistFrmFP * Hedding3D ;
// ### ビュー行列を生成を確認
// カメラの座標変換行列のz軸向き(=カメラの向き)
Vector3D vViewBaseZ = -1 * Hedding3D;
// カメラの座標変換行列のy軸向きを仮置き
Vector3D vViewBaseY( 0.0, 1.0, 0.0 );
// カメラの座標変換行列のx軸向き(= y × z )
Vector3D vViewBaseX = VCross( vViewBaseY.toVECTOR(), vViewBaseZ.toVECTOR() );
vViewBaseX = vViewBaseX.normalize();
// カメラの座標変換行列のy軸向きを再調整
vViewBaseY = VCross( vViewBaseZ.toVECTOR(), vViewBaseX.toVECTOR() );
// 基底を組み合わせてカメラ座標変換行列(Entityローカル座標)を生成
MATRIX MCamTransMatLocal =
MGetAxis1(
//MakeMatrixFromBaseVec(
vViewBaseX.toVECTOR(),
vViewBaseY.toVECTOR(),
vViewBaseZ.toVECTOR(),
toCamPos3D.toVECTOR() );
MCamTransMatLocal.m[3][1] += m_TrgtHight;
// Entity位置だけシフトしたものがワールド座標でのカメラ座標変換行列
MATRIX MCamTransMatWorld = MCamTransMatLocal;
MCamTransMatWorld.m[3][0] += m_TargetPos.x;
//MCamTransMatWorld.m[3][1] += m_TrgtHight; <- MCamTransMatLocal の段階でシフト
MCamTransMatWorld.m[3][2] += m_TargetPos.z;
// 逆行列がビュー行列
m_MViewLocal = MInverse( MCamTransMatLocal );
m_MViewWorld = MInverse( MCamTransMatWorld );
// 背景パノラマ球の描画に使用しているため m_vFinalCamPos を参照している
m_vFinalCamPos = VTransform( Vector3D( 0,0,0 ).toVECTOR(), MCamTransMatWorld );
//.........这里部分代码省略.........