# Moving/Aiming The Camera

This topic is 5183 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hi. I'm trying to make an FPS engine using DirectX 8 in VB6, and I'm having problems trying to move the camera appropriately. I guess this is due to my lack of understanding of matrices. I think I have managed to get the camera to move back and forth, and strafe correctly. Here's what I have: If DIState.Key(DIK_W) <> 0 Then z = z - 0.5 If DIState.Key(DIK_S) <> 0 Then z = z + 0.5 If DIState.Key(DIK_D) <> 0 Then x = x - 0.5 If DIState.Key(DIK_A) <> 0 Then x = x + 0.5 D3DXMatrixTranslation matView, x, y, z D3DDevice.SetTransform D3DTS_VIEW, matView Is this right? My main problem is trying to get the camera to look around. I have tried many different things, with none of them appearing to work. I'm finding it impossible. How am I supposed to do it? Any code would be more than helpful. :) (I have kinda started a topic on this before, but it was more to do with matrices than my actual problem. I thought by starting a more specific one, I could get more responses). Thanks, Luke

##### Share on other sites
Quote:
 If DIState.Key(DIK_W) <> 0 Then z = z - 0.5If DIState.Key(DIK_S) <> 0 Then z = z + 0.5If DIState.Key(DIK_D) <> 0 Then x = x - 0.5If DIState.Key(DIK_A) <> 0 Then x = x + 0.5

I see you've already counteracted what seemed like "mirrored" movement.

I'm assuming you already know about world matrices, and that you create a world matrix and set it to the device before you render an object. Well, the view matrix can be calculated just like a world matrix - with one exception: you invert the matrix after you calculate it.

So, some sample code might look like (I'm doing the best I can, I've never used VB):

Dim matPos As D3DXMATRIXDim matRot As D3DXMATRIXDim matView As D3DXMATRIXD3DXMatrixTranslation matView,x,y,z'xang, yang, and zang are in radiansD3DXMatrixRotationYawPitchRoll matRot,yang,xang,zangD3DXMatrixMultiply matView,matRot,matPosD3DXMatrixInverse matView,0,matViewD3DDevice.SetTransform D3DTS_VIEW,matView

You'll also want to change the signs in your movement code - you won't have to mirror the movement anymore.

##### Share on other sites
When using that code, instead of the camera staying in one spot, looking around, the camera kind of rotates around the whole world. What am I doing wrong?
(I'm tearing my hair out over this. I've been stuck on it for far too long. Who would have thought that aiming a camera could be so damn difficult. D3DRM was soo much simpler.)

[Edited by - luke88 on August 11, 2005 1:31:23 PM]

##### Share on other sites
Aha. By switching matView and matRot in your code, it now works! But with this, a new problem arises. Instead of the camera moving in the direction its facing, it would just run along its axis. For example, if I turn left by 90 degrees, and press W (to walk forward), the camera would strafe right. If I turn left by another 90 degrees, and press W, the camera would move backwards.

##### Share on other sites
Ook, there's a typo in my last post that caused that problem. I'll change it all here.

Ooh boy, moving objects in the direction they're facing :) That's fun.

Dim matPos as D3DXMATRIXDim matRot as D3DXMATRIXDim matView as D3DXMATRIXIf DIState.Key(DIK_W) <> 0 Then 	zmove = 0.5Else If DIState.Key(DIK_S) <> 0 Then	zmove = -0.5Else	zmove = 0End IfIf DIState.Key(DIK_D) <> 0 Then	xmove = 0.5Else If DIState.Key(DIK_A) <> 0 Then	xmove = -0.5Else	xmove = 0End If'whatever your rotation code is goes hereD3DXMatrixRotationYawPitchRoll matRot,yang,xang,zangDim vec As D3DXVECTOR4vec.x = xmovevec.y = 0vec.z = zmovevec.w = 1D3DXVec4Transform vec,vec,matRotx = x + vec.xz = z + vec.z'this is where I messed up before - I put the position in matView instead of matPosD3DXMatrixTranslation matPos,x,y,zD3DXMatrixMultiply matView,matRot,matPosD3DXMatrixInverse matView,0,matViewD3DDevice.SetTransform D3DTS_VIEW,matView

Hope that works out better.

##### Share on other sites
YAY! It works perfectly. Thank you soo much! I can now finally sleep at night.
I really got learn how to use matrices. Meh.
Again, thank you :)

##### Share on other sites
Sure! Linear algebra (vectors and matrices and stuff) is one of the hardest parts of learning how to do 3D graphics IMO, but after a while, it just becomes sort of a "oh, duh" kind of thing.

##### Share on other sites
Just to complement:

http://www.toymaker.info/Games/html/camera.html

Also, there is a very flexible camera function at:
(take a look at D3DSmartCamera function in TRICICLO sample)

Although they have a C++ code, it's easy to convert it to VB.

##### Share on other sites
Just to complement:

http://www.toymaker.info/Games/html/camera.html

Also, there is a very flexible camera function at:
(take a look at D3DSmartCamera function in TRICICLO sample)

Although they have a C++ code, it's easy to convert them to VB.

• ### Game Developer Survey

We are looking for qualified game developers to participate in a 10-minute online survey. Qualified participants will be offered a \$15 incentive for your time and insights. Click here to start!

• 11
• 15
• 21
• 26
• 11