|
在OPENGL三维图象设计中,我用LOOKAT来改变视角,
问题1:怎么样自由切换左视图,右视图等试图?
问题2:想在视区左下角建立坐标轴,视区中图象旋转时,怎样做到坐标轴也能绕坐标原点旋转(现在是坐标轴饶着视区中点旋转)?
各位大侠帮忙,或跟我MSN联系:batlv@hotmail.com;QQ:33099024,联系请注明OPENGL;
void __fastcall VPlot::MyOnMessage(tagMSG &Msg, bool &Handled)
{
RenderGLScene();
switch (Msg.message)
{
case WM_KEYDOWN:
{
WPARAM wParam=Msg.wParam;
switch(wParam)
{
case VK_UP:
gluLookAt(m_camera.vEye.x++, m_camera.vEye.y, m_camera.vEye.z,
m_camera.vCenter.x, m_camera.vCenter.y, m_camera.vCenter.z,
0,1,0);
//case VK_DOWN:glRotatef(5, 1.0, 0.0, 0.0);break;
//case VK_LEFT:glRotatef(-5, 0.0, 1.0, 0.0);break;
// case VK_RIGHT:glRotatef(5, 0.0, 1.0, 0.0);break;
}
break;
}
case WM_LBUTTONDOWN:
m_bLeftDown=true;
m_pointDown = Msg.pt;
m_thetaOld = m_theta;
m_cameraOld = m_camera;
SetCapture(hWnd);
break;
case WM_LBUTTONUP:
m_bLeftDown=false;
ReleaseCapture();
break;
case WM_MOUSEMOVE:
{
double theta;
TPoint point=Msg.pt;
VECTOR PxOld, axis, x1, y1, p;
VECTOR temp1,temp2;
if(m_bLeftDown)
if(m_bRotate)
{
m_camera = m_cameraOld;
temp1=m_cameraOld.vCenter-m_cameraOld.vEye;
PxOld = temp1%m_cameraOld.vUp;
PxOld = PxOld/Module(PxOld);
y1 = (point.y-m_pointDown.y)*m_cameraOld.vUp;
x1 = -(point.x-m_pointDown.x)*PxOld;
p = x1+y1;
theta = sqrt(p.y*p.y + p.x*p.x)/100;
if(theta<0.001)return ;
temp1=x1+y1;
temp2=m_cameraOld.vCenter-m_cameraOld.vEye;
axis = temp1%temp2;
axis = axis/Module(axis);
Rotate(axis, m_camera.vCenter, theta, &m_camera.vEye);
Rotate(axis, theta, &m_camera.vUp);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(m_dFrustumLeft, m_dFrustumRight,m_dFrustumBottom,m_dFrustumTop,
m_dFrustumNear, m_dFrustumFar);
gluLookAt(m_camera.vEye.x, m_camera.vEye.y, m_camera.vEye.z,
m_camera.vCenter.x, m_camera.vCenter.y, m_camera.vCenter.z,
m_camera.vUp.x, m_camera.vUp.y, m_camera.vUp.z);
}
break;
}
case WM_RBUTTONDOWN:
break;
case WM_RBUTTONUP:
break;
case WM_MOUSEWHEEL:
break;
}
} |
|