|
|
书的第四章是实现一个漫游功能,当按下left键后向左转,right向右转,up前进,down后退,page up向上仰。g_Angle,rad_xz的初始值均为0。程序如下
BOOL baiscobj: isplayScene()
{ float speed=0.2f;
if (KEY_DOWN(VK_SHIFT)) speed =speed*4;
if (KEY_DOWN(VK_LEFT)) g_Angle-=speed*2;
if (KEY_DOWN(VK_RIGHT)) g_Angle+=speed*2;
rad_xz = float (3.13149* g_Angle/180.0f);
if (KEY_DOWN(33)) g_elev +=0.2f;
if (KEY_DOWN(34)) g_elev -=0.2f;
if (g_elev<-100) g_elev =-100;
if (g_elev> 100) g_elev = 100;
if (KEY_DOWN(VK_UP))
{ g_eye[2]+=sin(rad_xz)*speed;
g_eye[0]+=cos(rad_xz)*speed;
}
if (KEY_DOWN(VK_DOWN))
{ g_eye[2]-=sin(rad_xz)*speed;
g_eye[0]-=cos(rad_xz)*speed;
}
if (g_eye[0]<-(MAP*2-20)) g_eye[0]= -(MAP*2-20);
if (g_eye[0]> (MAP*2-20)) g_eye[0]= (MAP*2-20);
if (g_eye[2]<-(MAP*2-20)) g_eye[2]= -(MAP*2-20);
if (g_eye[2]> (MAP*2-20)) g_eye[2]= (MAP*2-20);
g_eye[1] =1.8;
g_look[0] = float(g_eye[0] + 100*cos(rad_xz));
g_look[2] = float(g_eye[2] + 100*sin(rad_xz));
g_look[1] = g_eye[1];
gluLookAt(g_eye[0],g_eye[1],g_eye[2],g_look[0],g_look[1]+g_elev,g_look[2],0.0,1.0,0.0);
return TRUE;
}
问题是,为什么在if (KEY_DOWN(VK_DOWN))中g_eye[2]+=sin(rad_xz)*speed;我画了个示意图,怎么总是cos(rad_xz).请各位指教。示意图在附件中,从A到A‘,|AA'|=speed.假设它向左转了一个角度a。
|
-
|