OpenGL鼠标旋转图像
(鼠标旋转功能)
#include <iostream>
using namespace std; #include<gl/glut.h> GLfloat transx,transy; GLfloat scale; int primw=;
int primh=; GLfloat rotatex=,rotatey=; GLint mousepx,mousepy; void rend(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize();
glLineWidth();
glColor3f(,,); glPushMatrix();
glTranslatef(transx,transy,);
glRotatef(rotatex,,,);
glRotatef(rotatey,,,);
glBegin(GL_LINES);
glVertex3f(,,);
glVertex3f(,,);
glVertex3f(,,);
glVertex3f(,,);
glVertex3f(,,);
glVertex3f(,,);
glEnd();
glBegin(GL_LINES);
glVertex3f(,,);
glVertex3f(,,);
glVertex3f(,,);
glEnd();
glPopMatrix(); glFlush();
} void reshape(int w, int h)
{
glViewport(,,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
gluOrtho2D(-,,-10.0/w*h,10.0/w*h);
else
gluOrtho2D(-10.0/h*w,10.0/h*w,-,);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); if(w<=h)
{
/* scale=(GLfloat)primw/w;*/
transx=(-w/2.0)*20.0/w;
transy=(-h/2.0)*20.0/w;
}
else
{
/* scale=(GLfloat)primh/h;*/
transx=(-w/2.0)*20.0/h;
transy=(-h/2.0)*20.0/h;
} } void motion(int x, int y)
{
int w,h;
w=glutGet(GLUT_WINDOW_WIDTH);
h=glutGet(GLUT_WINDOW_HEIGHT); if(<=x && x<=w && <=y && y<=h)
{
rotatex=(mousepy-y)/(GLfloat)h*;
rotatey=(mousepx-x)/(GLfloat)w*;
/* cout<<"rotatex:rotatey"<<rotatex<<" "<<rotatey<<endl;*/
glutPostRedisplay();
} } void mousedown(int mouse, int state , int x, int y)
{
if(state== GLUT_DOWN)
{
mousepx=x;
mousepy=y;
}
// cout<<"mousepx:mousepy"<<endl;
// cout<<mousepx<<" "<<mousepy<<endl;
} int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(primw,primh);
glutCreateWindow("coordination"); glClearColor(,,,);
glutDisplayFunc(rend);
glutMotionFunc(motion);
glutMouseFunc(mousedown);
glutReshapeFunc(reshape);
glutMainLoop(); return ;
}
以上代码的使用:
1,、放在控制台应用程序中运行会出现控制台界面(黑框)
2、新建一个Qt工程Qt Application:
删除无用的文件(*.ui等),仅剩下main.cpp即可
将代码复制到main.cpp中运行,没有控制台出现。
工程下载地址(注意电脑要配置Qt):http://pan.baidu.com/s/1gdEeZgZ
OpenGL鼠标旋转图像的更多相关文章
- Qt OpenGL 鼠标拾取实现
在之前的文章中讲到了OpenGL鼠标拾取操作的例子,工作中需要在Qt中实现,下面的程序演示了QT中opengl的拾取例子. 本例子在Qt5.12和Qt Creator4.8.0上测试,使用的是QOpe ...
- OpenGL 鼠标交互响应事件
OpenGL 鼠标.键盘交互响应事件 先来一个样例: uses gl,glu,glut; procedure InitEnvironment;cdecl; begin glClearColor();/ ...
- OpenGL鼠标拖拽
前序 前段时间学习3D MAX,一对比就发现差距是相当大.我也做了一个三维展示的小软件,但是拖拽操作非常不友好,如果场景的尺寸特别大,会导致拖不动,尺寸过小会导致轻轻拖一下,模型就不知道飞哪去了.我是 ...
- opengl鼠标键盘控制相机漫游
键盘wsad控制相机位移,鼠标左键按下控制相机旋转 效果如下 代码如下 #include <stdio.h> #include <string.h> #include < ...
- OpenGL(十六) 鼠标、键盘交互响应事件
OpenGL中通过鼠标和键盘跟程序交互的实现需要实现注册鼠标和键盘响应事件,在一定条件下,该事件被触发,事件里的程序被执行,达到交互的目的. 通过glutMouseFunc(&OnMouse) ...
- OpenGl读取导入3D模型并且添加鼠标移动旋转显示
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11543828.html 最近实习要用到opengl库就是跟opencv 有点像的那个,然后下了 ...
- OpenGl 实现鼠标分别移动多个物体 ----------移动一个物体另外一个物体不动--读取多个3d模型操作的前期踏脚石
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11620088.html 前言: 因为接下来的项目需求是要读取多个3D模型,并且移动拼接,那么我 ...
- OpenGl 导入读取多个3D模型 并且添加鼠标控制移动旋转
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11627508.html 前言: 因为接下来的项目需求是要读取多个3D模型,并且移动拼接,那么我 ...
- 从零开始openGL——三、模型加载及鼠标交互实现
前言 在上篇文章中,介绍了基本图形的绘制.这篇博客中将介绍模型的加载.绘制以及鼠标交互的实现. 模型加载 模型存储 要实现模型的读取.绘制,我们首先需要知道模型是如何存储在文件中的. 通常模型是由网格 ...
随机推荐
- global中拦截404错误的实现方法
1. void Application_Error(object sender, EventArgs e) { if(Context != null) { HttpContext ctx = Http ...
- XMLHttpRequest Level 2 使用指南
XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信. 最早,微软在IE 5引进了这个接口.因为它太有用,其他浏览器也模仿部署了,ajax操作因此得以诞生. ...
- webpy + nginx + fastcgi 构建python应用
1.准备环境 CentOs 6.3 nginx-1.4.2.tar.gz http://nginx.org/download/nginx-1.4.2.tar.gz openss ...
- Android Studio rename module Can't rename root module
Android Studio修改工程根目录的时候会报错, rename module Can't rename root module. 主要是该工程已经打开,再命名必须要关闭改工程,就跟正在写一个t ...
- python虚拟环境Virtualenvwrapper无法升降级虚拟环境软件解决方法
virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够在没有权限的情况下安装新套件,不同应用可以使用不同的套件版本,套件升级不影响其他应用. Virtaulen ...
- C语言基础09
指向结构体变量的指针叫做结构体指针: typedef struct { int num; char name[30]; // char *name; 程序会崩溃,*name本身是指针,没有什么空 ...
- 03-树2. Tree Traversals Again (25)
03-树2. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue ...
- 如何:对 Web 窗体使用路由
配置用于路由的 ASP.NET 网站项目 1. 在应用程序的 Web.config 文件中,将 ASP.NET 路由程序集添加到 assemblies 元素,如下面的示例所示: <add ass ...
- 将一段含有0的字符数组赋给string
string有个成员函数,assign() 可以这样: string str; str.assign(temp, sizeof(temp));
- Ubuntu Mysql开通外网访问权限
Ubuntu Mysql开通外网访问权限 1.编辑 my.cnf 文件: sudo vi /etc/mysql/my.cnf 2.将绑定地址行注释掉或者修改为指定 IP #bind-addre ...