Cuốn sách này (kết xuất thời gian thực) đã giúp tôi rất nhiều! Xem ở trang 66 và 70. Nó có đồ họa và khám phá rất tốt. Đệ tứ đang ở trang 72 cũng vậy! :)
Xoay về một trục tùy ý
Điều này làm cho máy ảnh quay với thực hiện bằng cách nhập chuột:
void Camera::getVectors(D3DXVECTOR3& up, D3DXVECTOR3& lookAt)
{
float yaw, pitch, roll;
D3DXMATRIX rotationMatrix;
// Setup the vector that points upwards.
up.x = 0.0f;
up.y = 1.0f;
up.z = 0.0f;
// Setup where the camera is looking by default.
lookAt.x = 0.0f;
lookAt.y = 0.0f;
lookAt.z = 1.0f;
// Set the yaw (Y axis), pitch (X axis), and roll (Z axis) rotations in radians.
pitch = m_rotation.x * 0.0174532925f;
yaw = m_rotation.y * 0.0174532925f;
roll = m_rotation.z * 0.0174532925f;
// Create the rotation matrix from the yaw, pitch, and roll values.
D3DXMatrixRotationYawPitchRoll(&rotationMatrix, yaw, pitch, roll);
// Transform the lookAt and up vector by the rotation matrix so the view is correctly rotated at the origin.
D3DXVec3TransformCoord(&lookAt, &lookAt, &rotationMatrix);
D3DXVec3TransformCoord(&up, &up, &rotationMatrix);
}
// The Render function uses the position and rotation of the camera to build and update the view matrix
void Camera::render()
{
D3DXVECTOR3 up, position, lookAt;
// Setup the position of the camera in the world.
position = (D3DXVECTOR3)m_position;
getVectors(up, lookAt);
// Translate the rotated camera position to the location of the viewer.
lookAt = position + lookAt;
// Finally create the view matrix from the three updated vectors.
D3DXMatrixLookAtLH(&m_viewMatrix, &position, &lookAt, &up);
return;
}
Với đầu vào chuột, bạn sửa đổi ngáp (đầu), cao độ và cuộn.