0

内の 3D 立方体にカメラを配置するdisplay:

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

カメラは一点を見つめる―― (centerX, centerY, centerZ)

視線方向(前方、後方、右、左)に対して相対的に移動したい。

カメラを(上記の各面ごとに)に従って動かすには、eyeとでどのような操作を行う必要がありますか?centercenter

編集:

実装は必要ありません。概念だけです。

4

1 に答える 1

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;

}

そして Display() で

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() で作成されます。

それが役に立てば幸い。

于 2013-05-26T11:19:01.910 に答える