游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3829|回复: 1

OPENGL,坐标轴旋转跟视图转换的问题?

[复制链接]

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2004-6-7 10:34:00 | 显示全部楼层 |阅读模式
在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;
    }

}

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-6-30 20:00:00 | 显示全部楼层

Re:OPENGL,坐标轴旋转跟视图转换的问题?

推荐你看看《Visual C++ CAD应用程序开发技术》
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-3 00:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表