Camera Troubles
Hi, I'm new to 3D with the camera. I am using The Zen of Direct3D by Peter Walsh as a guide (pretty good book) and have a textured mesh (ie wall) and some 2D rendering thru the GDI. The camera moves nicely, pitches, rolls, and all that jazz. The only problem I am having with the camera is when I move my mouse in a circle to the left making many circles, my scene rolls left. When I move my mouse in a circle to the right making many circles, my scene rolls to the right. Any ideas? The camera roll property is always set to 0 for no rolling. Same with the frame containing the mesh. I'm using the camera as a first person view for a Quake style game.
Here's the update routine for the camera:
// Updates the Direct3D view matrix
void CCamera::Update()
{
// Update the x position
m_Position.x += m_Velocity.x * m_Right.x;
m_Position.y += m_Velocity.x * m_Right.y;
m_Position.z += m_Velocity.x * m_Right.z;
// Update the y position
m_Position.x += m_Velocity.y * m_Up.x;
m_Position.y += m_Velocity.y * m_Up.y;
m_Position.z += m_Velocity.y * m_Up.z;
// Update the z position
m_Position.x += m_Velocity.z * m_LookAt.x;
m_Position.y += m_Velocity.z * m_LookAt.y;
m_Position.z += m_Velocity.z * m_LookAt.z;
// Normalize and Regenerate the Look, Right, and Up Vectors
D3DXVec3Normalize( &m_LookAt, &m_LookAt );
D3DXVec3Cross( &m_Right, &m_Up, &m_LookAt );
D3DXVec3Normalize( &m_Right, &m_Right );
D3DXVec3Cross( &m_Up, &m_LookAt, &m_Right );
D3DXVec3Normalize( &m_Up, &m_Up );
// Set up the y-axis rotation
D3DXMatrixRotationAxis( &mYaw, &m_Up, m_Yaw );
D3DXVec3TransformCoord( &m_LookAt, &m_LookAt, &mYaw );
D3DXVec3TransformCoord( &m_Right, &m_Right, &mYaw );
// Set up the x-axis rotation
D3DXMatrixRotationAxis( &mPitch, &m_Right, m_Pitch );
D3DXVec3TransformCoord( &m_LookAt, &m_LookAt, &mPitch );
D3DXVec3TransformCoord( &m_Up, &m_Up, &mPitch );
// Set up the z-axis rotation
D3DXMatrixRotationAxis( &mRoll, &m_LookAt, m_Roll );
D3DXVec3TransformCoord( &m_Right, &m_Right, &mRoll );
D3DXVec3TransformCoord( &m_Up, &m_Up, &mRoll );
// Init the view matrix to an identity
D3DXMatrixIdentity( &mView );
// Fill in the view matrix
mView(0,0) = m_Right.x;
mView(0,1) = m_Up.x;
mView(0,2) = m_LookAt.x;
mView(1,0) = m_Right.y;
mView(1,1) = m_Up.y;
mView(1,2) = m_LookAt.y;
mView(2,0) = m_Right.z;
mView(2,1) = m_Up.z;
mView(2,2) = m_LookAt.z;
mView(3,0) = - D3DXVec3Dot( &m_Position, &m_Right );
mView(3,1) = - D3DXVec3Dot( &m_Position, &m_Up );
mView(3,2) = - D3DXVec3Dot( &m_Position, &m_LookAt );
// Set the view matrix
g_pDevice->SetTransform( D3DTS_VIEW, &mView );
}
[edited by - SteveK on October 9, 2003 8:53:21 PM]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement