Well, you can have mouse movement look control at the same time as actual movement without using more than one camera.
The idea of adding another camera would be primarily to have a different render target, so you can send an image from the camera to a texture or create a "surveilance camera" kind of thing.
Here is a code snippet of some simple camera look code, along with something that will allow you to move at the same time with W S A D keys.
void PControl(float p_fMoveSpeed, float p_fMoveFastSpeed, float p_fTurnSpeed, float p_fPitchSpeed, float p_fTimeElapsedFloat)
{
float fMoveSpeed = p_fMoveSpeed * p_fTimeElapsedFloat;
float fMoveFastSpeed= p_fMoveFastSpeed * p_fTimeElapsedFloat;
float fTurnSpeed = p_fTurnSpeed * p_fTimeElapsedFloat;
float fPitchSpeed = p_fPitchSpeed * p_fTimeElapsedFloat;
int MX=dbMouseMoveY();
int MY=dbMouseMoveX();
dbRotateCamera(0, (dbCameraAngleX()+(MX*fPitchSpeed*0.1)), (dbCameraAngleY()+(MY*fTurnSpeed*0.1)), dbCameraAngleZ());
// forwards
if(dbKeyState(Key_W))
{ // fast speed
if(dbKeyState(Key_LShift))
{
dbMoveCamera(fMoveFastSpeed);
}
else // normal speed
{
dbMoveCamera(fMoveSpeed);
};
};
// backwards
if(dbKeyState(Key_S))
{
if(dbKeyState(Key_LShift))
{
dbMoveCamera(0-fMoveFastSpeed);
}
else
{
dbMoveCamera(0-fMoveSpeed);
};
};
// strafe left
if(dbKeyState(Key_A))
{
if(dbKeyState(Key_LShift))
{
dbMoveCameraLeft(0, fMoveFastSpeed);
}
else
{
dbMoveCameraLeft(0, fMoveSpeed);
};
};
//strafe right
if(dbKeyState(Key_D))
{
if(dbKeyState(Key_LShift))
{
dbMoveCameraRight(0, fMoveFastSpeed);
}
else
{
dbMoveCameraRight(0, fMoveSpeed);
};
};
if(dbKeyState(Key_Num8))
{ //fwd
dbMoveCamera(fMoveSpeed);
};
if(dbKeyState(Key_NumForwardSlash))
{//fwd fast
dbMoveCamera(fMoveFastSpeed);
};
if(dbKeyState(Key_Num2))
{//backward
dbMoveCamera(-fMoveSpeed);
};
if(dbKeyState(Key_Num0))
{//backward fast
dbMoveCamera(-fMoveFastSpeed);
};
if(dbKeyState(Key_Num4))
{//turn left
dbRotateCamera(dbCameraAngleX(), dbWrapValue(dbCameraAngleY()-fTurnSpeed), dbCameraAngleZ());
};
if(dbKeyState(Key_Num6))
{//turn right
dbRotateCamera(dbCameraAngleX(), dbWrapValue(dbCameraAngleY()+fTurnSpeed), dbCameraAngleZ());
};
if(dbKeyState(Key_NumLock))
{//Roll Left
dbRollCameraLeft(fTurnSpeed);
};
if(dbKeyState(Key_NumLock))
{//Roll Right
dbRollCameraRight(fTurnSpeed);
};
if(dbKeyState(Key_Num9))
{//Up
dbPitchCameraUp(90);
dbMoveCamera(fMoveSpeed);
dbPitchCameraDown(90);
};
if(dbKeyState(Key_NumStar))
{//Up Fast
dbPitchCameraUp(90);
dbMoveCamera(fMoveFastSpeed);
dbPitchCameraDown(90);
};
if(dbKeyState(Key_Num3))
{//Down
dbPitchCameraDown(90);
dbMoveCamera(fMoveSpeed);
dbPitchCameraUp(90);
};
if(dbKeyState(Key_NumPeriod))
{//Down Fast
dbPitchCameraDown(90);
dbMoveCamera(fMoveFastSpeed);
dbPitchCameraUp(90);
};
if(dbKeyState(Key_Num7))
{//Pitch down
dbRotateCamera(dbWrapValue(dbCameraAngleX()+fPitchSpeed),dbCameraAngleY(), dbCameraAngleZ());
};
if(dbKeyState(Key_Num1))
{//Pitch Up
dbRotateCamera(dbWrapValue(dbCameraAngleX()-fPitchSpeed),dbCameraAngleY(), dbCameraAngleZ());
};
if(dbKeyState(Key_NumLock))
{//Roll Left
dbRollCameraLeft(fPitchSpeed);
};
if(dbKeyState(Key_NumMinus))
{//Roll Right
dbRollCameraRight(fPitchSpeed);
};
if(dbKeyState(Key_Num5))
{// Resets the camera to 0, 0, 0 and looking straight ahead, good if you stuff up the look angles with rotation
dbRotateCamera(0,0,0);
};
};
You call it like this :
PControl(1.0, 2.0, 2.0, 2.5, 2.0);
from inside you main loop, it needs to be called every game loop to work.
Lastly, if you do want to make another camera the code to do that is :
dbMakeCamera(int iCamID);
If it ain't broke.... DONT FIX IT !!!