opengl中 坐标系怎么随着鼠标旋转?

2025-03-22 01:45:05
推荐回答(2个)
回答1:

首先必须从WM_MOUSEMOVE消息里读取鼠标的坐标信息,他们是
x=LOWORD(lParam);
y=HIWORD(lParam);
然后将该坐标在屏幕的位置转换为角度:假如你的屏幕分辨率为1280*800
那么:
h=x/1280.0*2*3.14;
v=y/800.0*3.14-3.14;
最后把角度作为观察者的参数:
gluLookAt(.....);自己用数学几何知识算就可以了.我给你一个我的代码看看:我这个是模拟CS游戏的,不仅用鼠标控制视野,还可用AWSD做前后左右的移动.

case WM_MOUSEMOVE:
angle = (GLdouble)LOWORD(lParam)/1280.0*2.0*3.14;
elev = (GLdouble)HIWORD(lParam)/800.0*3.14-3.14/2.0;
if(LOWORD(lParam)>=1279)
SetCursorPos(2,HIWORD(lParam));
else if(LOWORD(lParam)<=1)
SetCursorPos(1278,HIWORD(lParam));
return 0;
........................
case WM_KEYDOWN:
switch(wParam)
{
case 83:
sz+=sin(angle)*speed;
sx+=cos(angle)*speed;
break;
case 87:
sz-=sin(angle)*speed;
sx-=cos(angle)*speed;
break;
case 68:
sz-=cos(angle)*speed;
sx+=sin(angle)*speed;
break;
case 65:
sz+=cos(angle)*speed;
sx-=sin(angle)*speed;
break;
}
..........................
lx=sx-cos(angle)*speed;
lz=sz-sin(angle)*speed;
ly=sy-sin(elev)*speed;
gluLookAt(sx,sy,sz,lx,ly,lz,0.0,1.0,0.0);

回答2:

楼上的威猛,向你学习