OpenGL中的鼠标控制

简介:
昨天在《OpenGL中的光照和键盘控制》中的代码的基础上加入了用鼠标来控制旋转,不过自己觉得思路是不正确的,纯属瞎弄。。。

      为了识别出用户想要旋转的方向和角度,增加了下面的变量:

    enum RotateDirection
    {//鼠标控制的旋转方向
        EAST,
        WEST,
        NORTH,
        SOUTH
    };

    RotateDirection direction;
    CPoint m_pStart;//起点
    CPoint m_pEnd;//终点
    bool isMoseDown;//是否左键还按下

然后就是鼠标的事件处理代码了:

void COpenGLDemoView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    this->isMoseDown = TRUE;
    this->m_pStart = point;
    this->m_pEnd = point;
    CView::OnLButtonDown(nFlags, point);
}
void COpenGLDemoView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    this->isMoseDown = FALSE;
    if(this->direction==EAST)
        yspeed+=0.5f;
    else if(this->direction==WEST)
        yspeed-=0.5f;
    else if(this->direction==SOUTH)
        xspeed+=0.5f;
    else if(this->direction==NORTH)
        xspeed-=0.5f;
    CView::OnLButtonUp(nFlags, point);
}

void COpenGLDemoView::OnMouseMove(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    if(this->isMoseDown==false)
    {
        return;
    }
    if(point.x>this->m_pEnd.x)
        this->direction = EAST;
    else if(point.x<this->m_pEnd.x)
        this->direction = WEST;
    else if(point.y>this->m_pEnd.y)
        this->direction = SOUTH;
    else if(point.y<this->m_pEnd.y)
        this->direction = NORTH;

    this->m_pEnd = point;

    CView::OnMouseMove(nFlags, point);
}

      试了下效果,控制上不是很舒适方便,我觉得自己才旋转的方向判断上应该是不对的,到底如何判断旋转方向呢?


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/08/14/854880.html,如需转载请自行联系原作者
目录
相关文章
|
IDE Linux 测试技术
Rockchip系列之深度分析CAN接口系列(1)
Rockchip系列之深度分析CAN接口系列(1)
639 2
|
12月前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
1724 4
|
存储 安全 编译器
一篇文章让你熟悉unordered_map及其模拟实现(中)
unordered_map元素访问和元素查找函数 1. operator[] mapped_type& operator[] ( const key_type& k );: 这个重载函数接受一个const引用类型的键(key_type),并返回与该键关
|
存储 传感器 监控
网络安全产品之认识防非法外联系统
非法外联是指计算机或其他内部网络设备在未经授权的情况下私自连接到外部网络或设备,如互联网、其他公共网络或非法设备等。这种行为可能涉及违反法律法规、公司政策或安全规定。非法外联的危害包括可能导致数据泄露、恶意软件感染、非法访问和攻击等安全风险,同时可能违反合规要求并导致法律责任。 非法外联的形式多种多样,包括但不限于通过拨号上网、双网卡上网、GPRS、红外等方式进行连接。这些非法连接不仅可能暴露内部网络于外部攻击的风险,而且可能使内部数据面临泄露的风险,特别是当员工使用个人设备连接企业内部网络时。因此,防止非法外联对于维护网络安全和保护组织利益至关重要。
466 0
|
API C++
c++进阶篇——初窥多线程(三)cpp中的线程类
C++11引入了`std::thread`,提供对并发编程的支持,简化多线程创建并增强可移植性。`std::thread`的构造函数包括默认构造、移动构造及模板构造(支持函数、lambda和对象)。`thread::get_id()`获取线程ID,`join()`确保线程执行完成,`detach()`使线程独立,`joinable()`检查线程状态,`operator=`仅支持移动赋值。`thread::hardware_concurrency()`返回CPU核心数,可用于高效线程分配。
200 0
|
存储 程序员 编译器
C++从入门到精通:3.4深入理解内存管理机制
C++从入门到精通:3.4深入理解内存管理机制
343 0
|
存储 编译器 Linux
【C++】float / double 与 0 值比较
使用普通的比较没有问题,如果考虑精度的话,需要与具体的值比较
1509 0
【C++】float / double 与 0 值比较
|
缓存 图形学
《OpenGL编程指南(原书第9版)》——导读
OpenGL图形系统是图形硬件的一种软件接口(GL表示Graphics Library,即图形库)。它使得用户可以创建交互式的程序以产生运动的三维对象的颜色图像。通过OpenGL,我们可以使用计算机图形学技术产生逼真的图像,或者通过一些虚构的方式产生虚拟的图像。
3144 0
|
XML 人工智能 Go
VSCode 中使用 vim 操作
为什么要使用 Vim 呢?因为真的很高效啊!!!我已经在代码编辑器和浏览器中都安装了类 Vim 插件来提搞我的操作效率。当熟练使用 Vim 命令之后,真的可以扔掉鼠标了。
1339 0