OpenGL学习笔记之鼠标检测
来源:互联网 发布:linux安装rz sz 命令 编辑:程序博客网 时间:2024/06/05 04:30
OpenGL学习笔记之鼠标检测
//由于之前的代码我也留着的,代码有点多了,所以我稍微分了一下
//main主函数
#include "head.h"//第一个参数是命令的个数,第二个参数是命令内容int main(int argc,char** argv){ std::cout<<argc<<std::endl;//输出命令个数 for(int i = 0; i < argc; ++i)//输出命令内容 { std::cout<<argv[i]<<std::endl; } glutInit(&argc,argv);//初始化glut库(创建窗口需要) glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);//初始化显示模式 GLUT_RGBA 颜色 GLUT_DOUBLE 双缓冲 glutInitWindowPosition(100,100);//初始化我们创建的窗口在屏幕左上角的位置 glutInitWindowSize(600,600);//初始化创建窗口的宽高 int iWindowID = glutCreateWindow("OpenGL");//创建窗口,并返回窗口的ID,传窗口的标题 glutDisplayFunc(DisplayFunc);//屏幕显示的回调函数 glutIdleFunc(IdleFunc);//闲置时回调函数(当没有消息时调用) glutKeyboardFunc(KeyboardFunc);//数字、字母键的按键检测的回调函数 glutSpecialFunc(SpecialFunc);//特殊按键检测(F1~F12,控制键) glutMouseFunc(MouseFunc);//鼠标检测 glutMotionFunc(MotionFunc);//鼠标按着拖动检测 glutPassiveMotionFunc(PassiveMotionFunc);//鼠标移动检测 glEnable(GL_LINE_STIPPLE);//开启画虚线的模式 glClearColor(0.0f,0.6f,0.6f,1.0f);//指定屏幕背景色,最后参数为透明度 glutMainLoop();//消息主循环 //glutDestroyWindow(iWindowID);//销毁窗口 return 1;}
//head.h
#include <gl/glew.h>#include <gl/glut.h>#include <iostream>struct Vector2D{ float fX; float fY;};extern Vector2D g_vector2D;void DisplayFunc();//显示函数void IdleFunc();//闲置时调用的函数void KeyboardFunc(unsigned char Key,int x,int y);//数字、字母键按键检测void SpecialFunc(int Key,int x,int y);//F1~F12、控制键检测void MouseFunc(int button,int state,int x,int y);//鼠标检测void MotionFunc(int x,int y);//鼠标按着拖动void PassiveMotionFunc(int x,int y);//鼠标移动
//head.cpp
#include "head.h"Vector2D g_vector2D = {-0.2f,0.2f};void DisplayFunc(){ glClear(GL_COLOR_BUFFER_BIT);//用指定的颜色清屏 glBegin(GL_TRIANGLES); { glColor3f(0,0.6f,0); glVertex2f(g_vector2D.fX,g_vector2D.fY); glColor3f(0,0.0f,0.6f); glVertex2f(g_vector2D.fX+0.4f,g_vector2D.fY); glColor3f(0.6f,0.0f,0); glVertex2f(g_vector2D.fX+0.2f,g_vector2D.fY-0.4f); } glEnd(); glFlush();//提交绘图命令 glutSwapBuffers();//交换前台缓冲与后台缓冲(GLUT_DOUBLE双缓冲模式需要)}//闲置时调用的函数void IdleFunc(){ glutPostRedisplay();//重新绘制(即调用DisplayFunc()函数)}//数字、字母键按键检测void KeyboardFunc(unsigned char Key,int x,int y){ if(Key == 'w' || Key == 'W') { if(g_vector2D.fY < 1.0f)//界限判定 g_vector2D.fY += 0.05f; } if(Key == 's' || Key == 'S') { if(g_vector2D.fY - 0.4f > -1.0f)//界限判定 g_vector2D.fY -= 0.05f; } if(Key == 'a' || Key == 'A') { if(g_vector2D.fX > -1.0f)//界限判定 g_vector2D.fX -= 0.05f; } if(Key == 'd' || Key == 'D') { if(g_vector2D.fX + 0.4f< 1.0f)//界限判定 g_vector2D.fX += 0.05f; }}//F1~F12、控制键检测void SpecialFunc(int Key,int x,int y){ if(Key == GLUT_KEY_UP) { if(g_vector2D.fY < 1.0f)//界限判定 g_vector2D.fY += 0.05f; } if(Key == GLUT_KEY_DOWN) { if(g_vector2D.fY - 0.4f > -1.0f)//界限判定 g_vector2D.fY -= 0.05f; } if(Key == GLUT_KEY_LEFT) { if(g_vector2D.fX > -1.0f)//界限判定 g_vector2D.fX -= 0.05f; } if(Key == GLUT_KEY_RIGHT) { if(g_vector2D.fX + 0.4f< 1.0f)//界限判定 g_vector2D.fX += 0.05f; }}//鼠标检测void MouseFunc(int button,int state,int x,int y){ //button 鼠标按键 0 -- 左键 1 -- 中键 2 -- 右键 //state 鼠标状态 0 -- 按下 1 -- 抬起 //x,y 鼠标的像素点坐标(以窗口的左上角为原点的坐标系) std::cout<<"鼠标的坐标:x = "<<x<<" ,y = "<<y<<std::endl; if(button == 0) { if(state == 0) { std::cout<<"鼠标左键按下"<<std::endl; } if(state == 1) { std::cout<<"鼠标左键抬起"<<std::endl; } } if(button == 1) { if(state == 0) { std::cout<<"鼠标中键按下"<<std::endl; } if(state == 1) { std::cout<<"鼠标中键抬起"<<std::endl; } } if(button == 2) { if(state == 0) { std::cout<<"鼠标右键按下"<<std::endl; } if(state == 1) { std::cout<<"鼠标右键抬起"<<std::endl; } }}//鼠标按着拖动void MotionFunc(int x,int y){ //x,y 鼠标的像素点坐标(以窗口的左上角为原点的坐标系) std::cout<<"鼠标按着拖动的坐标:x = "<<x<<" ,y = "<<y<<std::endl;}//鼠标移动void PassiveMotionFunc(int x,int y){ //x,y 鼠标的像素点坐标(以窗口的左上角为原点的坐标系) std::cout<<"鼠标移动的坐标:x = "<<x<<" ,y = "<<y<<std::endl;}
//运行效果:对鼠标的操作,会在控制台屏幕上显示出鼠标的坐标
阅读全文
0 0
- OpenGL学习笔记之鼠标检测
- OpenGL学习笔记之按键检测
- OpenGL学习笔记之配置OpenGL
- OpenGL学习笔记之了解OpenGL
- OpenGL学习笔记之Buffers
- Opengl学习笔记之Textures
- OPENGL学习笔记之二
- OPENGL学习笔记之三
- OPENGL学习笔记之四
- OPENGL学习笔记之五
- OPENGL学习笔记之六
- OPENGL学习笔记之七
- OPENGL学习笔记之八
- OPENGL学习笔记之九
- OpenCV学习笔记之鼠标调用
- Selenium学习笔记之015:鼠标事件
- QtQuick学习笔记之QML鼠标事件
- C++学习笔记之鼠标绘图
- 基于微服务的软件架构模式
- 嵌入式系统硬件组成-3.1
- Java中的四种引用方式及其区别
- 平板电脑刷机加供电系统改造
- Combination Sum II
- OpenGL学习笔记之鼠标检测
- 谈谈个人网站的建立(一)——建站历史和技术架构
- 使用@Select注解时使用in传入ids数组作为参数
- leetcode-41-找出第一个缺失的正整数
- MyBatis(三)增删改查--基于接口
- C/C++ %s %d %u 基本概念与用法
- hibernate.hbm2ddl.auto配置详解
- Jquery插件之Autocomplete
- 树剖