2013-02-18 127 views
0

根据这个网站:http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-5DirectX9的移动摄像头左右

3DXMATRIX* D3DXMATRIXLookAtLH(D3DXMATRIX* pOut, 
           CONST D3DXVECTOR3* pEye, 
           CONST D3DXVECTOR3* pAt, 
           CONST D3DXVECTOR3* pUp); 

D3DXMATRIX* pOut, 

// We know this one. It is the pointer to the matrix we are going to fill. 

CONST D3DXVECTOR3* pEye, 

// This parameter is a pointer to a vector which contains the exact position 
// of the camera. Considering our example above, we want to fill this struct 
// with (100, 100, 100). 

CONST D3DXVECTOR3* pAt, 

// This vector contains the exact location the camera should look at. 
// Our example is looking at (0, 0, 0), so we will fill this struct 
// with those values. 

CONST D3DXVECTOR3* pUp, 

// This vector contains the direction of "up" for the camera. In other 
// words, what direction will the top of the screen be. Usually, game 
// programmers use the y-axis as the "up" direction. To set the camera 
// this way, you simply need to fill this struct with (0, 1, 0), or 
// 1.0f on the y-axis and 0.0f on the other two. 

我将承担所有我必须做的是改变pEye的x坐标,和帕特加/减向左移动和对。但是,当我这样做时,事情就会发生。有什么我做错了吗?以下是我的代码!

void world_view::start_cam() { 

    vPosition = D3DXVECTOR3 (console_editor.window_w/2 , console_editor.window_h/2 , console_editor.window_h/2); 
    vLookAt = D3DXVECTOR3 (console_editor.window_w/2 , console_editor.window_h/2 , 0.0f); 
    vUp = D3DXVECTOR3 (0.0f , -1.0f , 0.0f); 

    fov = D3DXToRadian(90); // the horizontal field of view 
    aspectRatio = (FLOAT)console_editor.window_w/(FLOAT)console_editor.window_h; // aspect ratio 
    zNear = 1.0f; 
    zFar = console_editor.window_h/2+10; 

} 

void world_view:: MoveLeft(float units) { 

} 

void world_view:: MoveRight(float units) { 

    D3DXVECTOR3 vTemp = struct_world_view.vPosition; 

vTemp.x = vTemp.x + units; 
//vTemp.y = vTemp.y + units; 
//vTemp.z = vTemp.z + units; 

struct_world_view.vPosition = vTemp; 

D3DXVECTOR3 vlTemp = struct_world_view.vLookAt; 

vlTemp.x + units; 
//vlTemp.y + units; 
//vlTemp.z + units; 

struct_world_view.vLookAt = vlTemp; 

} 

void world_view::UpdateCamera(){ 

    D3DXMatrixLookAtLH(&struct_world_view.cam, 
         &struct_world_view.vPosition, 
         &struct_world_view.vLookAt, 
         &struct_world_view.vUp); 


    D3DXMatrixPerspectiveFovLH(&struct_world_view.cam_lens, 
           struct_world_view.fov, 
           struct_world_view.aspectRatio, 
           struct_world_view.zNear, 
           struct_world_view.zFar); 

} 

![前] [1]![后] [2]

这是之前和移动之后的权利的示例。任何澄清将大大帮助!

+0

那么,你只能改变位置,而不是你正在看的位置,所以这就是角度部分。也许它正在削弱遥远的一面。 – chris 2013-02-18 05:47:36

回答

3

同时移动相机的位置和它看起来:

void world_view:: MoveRight(float units) { 

struct_world_view.vLookAt.x += units; 
struct_world_view.vPosition.x += units; 

} 

编辑:还 - 如果你只希望能够向右移动,可能要检查阴性单位。

+0

Ug!谢谢! :) – User 2013-02-18 05:54:46