我正在尝试在 openGl C++ 中使用“gluLookAt()”来完成一项简单的任务:“基于相机的运动”。我想要的是允许凸轮通过以下方案的键移动:
方向键:
← = 左转
→ = 右转
↑ = 向上看
↓ = 向下看
W、S、A、D
W = 前进
S = 向后移动
A = 向左移动(侧身)
D = 向右移动(侧身)
问,乙
Q = 左旋
E = 右旋
到目前为止,我设法完成了我需要的所有类型的运动,除了使用“A”和“D”键的横向移动。不管我尝试了多少,当我按下其中一个键时,凸轮永远不会按照我想要的方式移动。有人告诉我,我需要执行某种类型的“交叉产品”,但是,尽管进行了一些试验,我真的迷路了。
//variables
float x1 = 0.0f, x2 = 0.0f, x3 = 0.0f, y1 = 1.0f, y2 = 1.0f, y3 = 1.0f, z1 = 5.0f, z2 = -1.0f, z3 = 0.0f;
//the camera
gluLookAt( x1, y1, z1, x1+x2, y2, z1+z2, x3, y3, z3);
//methods
void special(int key, int xx, int yy)
{
switch (key) {
case GLUT_KEY_LEFT :
camAngle -= 0.09f;
x2 = sin(camAngle);
z2 = -cos(camAngle);
break;
case GLUT_KEY_RIGHT :
camAngle += 0.09f;
x2 = sin(camAngle);
z2 = -cos(camAngle);
break;
///////////////////////////////////////////////////////
void normal(unsigned char key, int x, int y)
{
float part = 0.9f;
switch (key) {
case 'w' :
x1 += x2 * part ;
z1 += z2 * part ;
break;
case 's' :
x1 -= x2 * part ;
z1 -= z2 * part ;
break;
case 'a' :
??????????????????
break;
case 'd' :
??????????????????