2013-05-26 47 views
0

擁有位於3D立方體的相機內display相對攝像機移動到尋找方向:在gluLookAt

public void display(GLAutoDrawable drawable) { 
    ... 
    glu.gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ); 
    ... 
} 

相機看點 - (centerX, centerY, centerZ)

我想移動它相對於它的方向(向前,向後,向右,向左)。

根據center(對於上面的每個面),我應該在eyecenter上做什麼操作?

編輯:

我不需要實施,只是概念。

回答

0

如果我明白你的問題,首先定義Vector3D點

struct tVector3 // Extended 3D Vector Struct 
{ 
tVector3() {} // Struct Constructor 
tVector3 (float new_x, float new_y, float new_z) // Init Constructor 
{ x = new_x; y = new_y; z = new_z; } 

tVector3 operator+(tVector3 vVector) {return tVector3(vVector.x+x, vVector.y+y, vVector.z+z);} 
tVector3 operator-(tVector3 vVector) {return tVector3(x-vVector.x, y-vVector.y, z-vVector.z);} 
tVector3 operator*(float number) {return tVector3(x*number, y*number, z*number);} 
tVector3 operator/(float number) {return tVector3(x/number, y/number, z/number);} 

float x, y, z; // 3D vector coordinates 
}; 

然後確定什麼相機做

void CCamera::Move_Camera(float speed)  //UP AND DOWN 
{ 
tVector3 vVector = mView - mPos; 

mPos.x = mPos.x + vVector.x * speed; 
mPos.z = mPos.z + vVector.z * speed; 
mView.x = mView.x + vVector.x * speed; 
mView.z = mView.z + vVector.z * speed; 
mPos.y = mPos.y + vVector.y * speed; 
mView.y = mView.y + vVector.y * speed; 

} 


void CCamera::Rotate_View(float speed) 
{ 
tVector3 vVector = mView - mPos; // Get the view vector 

mView.z = (float)(mPos.z + sin(speed)*vVector.x + cos(speed)*vVector.z); 
mView.x = (float)(mPos.x + cos(speed)*vVector.x - sin(speed)*vVector.z); 
} 


void CCamera::Strafe_Camera(float speed,bool YAxis) // MOVE LEFT AND RIGHT 
{ 
tVector3 vVector = mView - mPos; // Get the view vector 

tVector3 vOrthoVector; // Orthogonal vector for the view vector 

vOrthoVector.x = -vVector.z; 
vOrthoVector.z = vVector.x; 

mPos.x = mPos.x + vOrthoVector.x * speed; 
mPos.z = mPos.z + vOrthoVector.z * speed; 
mView.x = mView.x + vOrthoVector.x * speed; 
mView.z = mView.z + vOrthoVector.z * speed; 

} 

而且在顯示()

gluLookAt(objCamera->mPos.x, objCamera->mPos.y, objCamera->mPos.z, 
      objCamera->mView.x, objCamera->mView.y, objCamera->mView.z, 
      objCamera->mUp.x, objCamera->mUp.y, objCamera->mUp.z); 

其中MPOS是相機位置(在xyz座標中描述),mView是您正在查看的點.ObjCamera是創建的initlializeGL();

希望它有幫助。

+0

謝謝,你能描述一下'center'和'eye'的操作嗎? – URL87

+0

看一下Move_Camera(浮點速度)方法(你必須知道vVector是相機位置和它看的地方之間的距離)。如果你想從基礎知識中學習,我會建議你這個http:// www。 morrowland.com/apron/tut_gl.php和這個http://nehe.gamedev.net/tutorial/loading_and_moving_through_a_3d_world/22003/(它的C++但很容易翻譯) – Nicola