资源简介
里面是一个简单的demo,实现用鼠标控制视角的变换。
代码片段和文件信息
#include “glwidget.h“
#include
#include
#include
#include
#include
GLWidget::GLWidget(QWidget *parent):QGLWidget(parent)
{
/*初始化成员*/
eyex=0.1;
eyey=0.1;
eyez=0.1;
upx=0;
upy=0.1;
upz=0;
CurrentAngleZ=0;
CurrentAngleY=0;
LastAngleZ=M_PI/4;
LastAngleY=M_PI/4;
}
void GLWidget::initializeGL()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.00.00.00.0);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST);
}
void GLWidget::resizeGL(int w int h)
{
glViewport(00(GLint)w(GLint)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(eyex*0.1eyey*0.1eyez*0.1000upx*0.1upy*0.1upz*0.1);
drawCoordinate();
glColor3f(101);
DrawShape(Id);
}
void GLWidget::drawCoordinate()
{
/*红色轴是X轴,绿色是Y轴,蓝色是Z轴*/
glBegin(GL_LINES);
glColor3f(1.0f0.00.0);
glVertex3f(0.00.00.0);
glVertex3f(0.50.00.0);
glEnd();
glPushMatrix();
glTranslatef(0.5 0.0f 0.0f);
glRotatef(90.0f0.0f1.0f0.0f);
glutWireCone(0.0270.091010);
glPopMatrix();
glBegin(GL_LINES);
glColor3f(0.01.00.0);
glVertex3f(0.00.00.0);
glVertex3f(0.00.50.0);
glEnd();
glPushMatrix();
glTranslatef(0.0 0.5f 0.0f);
glRotatef(-90.0f1.0f0.0f0.0f);
glutWireCone(0.0270.091010);
glPopMatrix();
glBegin(GL_LINES);
glColor3f(0.00.01.0);
glVertex3f(0.00.00.0);
glVertex3f(0.00.00.5);
glEnd();
glPushMatrix();
glTranslatef(0.0 0.0f 0.5f);
glutWireCone(0.0270.091010);
glPopMatrix();
}
void GLWidget::RotateViewPoint()
{
float avAnale=M_PI/180*0.6; //把每次移动的角度单位化
/*把每次移动点跟开始按下鼠标记录的点作差,然后乘以avAngle最后把上一次释放鼠标后时记录的
角度相加起来*/
CurrentAngleZ=(EndPoint.x()-StartPoint.x())*avAnale;
CurrentAngleZ+=LastAngleZ;
CurrentAngleY=(EndPoint.y()-StartPoint.y())*avAnale;
CurrentAngleY+=LastAngleY;
QVector3D vector1(sin(CurrentAngleY)*sin(CurrentAngleZ)cos(CurrentAngleY)sin(CurrentAngleY)*cos(CurrentAngleZ));
vector1=vector1.normalized(); //将坐标单位化
eyex=vector1.x();
eyey=vector1.y();
eyez=vector1.z();
/*主要计算第三组坐标*/
QVector3D vectorA(0sin(CurrentAngleY)0);
QVector3D vectorB=QVector3D(000)-QVector3D(sin(CurrentAngleY)*sin(CurrentAngleZ)0sin(CurrentAngleY)*cos(CurrentAngleZ));
QVector3D vectorAB=QVector3D::crossProduct(vectorAvectorB);
QVector3D vectorC=QVector3D(000)-vector1;
QVector3D vector2=QVector3D::crossProduct(vectorCvectorAB);
vector2=vector2.normalized();
upx=vector2.x();
upy=vector2.y();
upz=vector2.z();
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-09-27 19:56 GLDrawingProject\
文件 488 2013-09-27 19:53 GLDrawingProject\GLDrawingProject.pro
文件 31422 2013-09-27 19:56 GLDrawingProject\GLDrawingProject.pro.user
文件 4936 2013-09-27 19:55 GLDrawingProject\glwidget.cpp
文件 1234 2013-09-27 19:43 GLDrawingProject\glwidget.h
文件 273 2013-09-17 16:17 GLDrawingProject\main.cpp
文件 1532 2013-09-20 16:21 GLDrawingProject\mainwindow.cpp
文件 789 2013-09-20 16:19 GLDrawingProject\mainwindow.h
文件 654 2013-09-17 16:11 GLDrawingProject\mainwindow.ui
- 上一篇:Qt 4.8.4以及傻瓜式安装教程
- 下一篇:fluent安装教程
相关资源
- Qt 4.8.4以及傻瓜式安装教程
- QT编写的电子书阅读器
- OpenGLSETest.zip
- Qt之生成png/jpg/bmp格式图片
- Qt开发中常用QSS样例
- QT之子窗口控件使用
- Qt做的windows运行win+r窗口
- QTopengl模块使用demo
- QT之dock使用
- QT使用openglES模块做的立方体程序
- qt做的温度计小程序
- QT计算器界面的ui文件
- qt界面跳转切换
- OpenGL坦克大战2D游戏文档包含所有模块
- QT个税计算器
- Qt 按钮收缩,点击show按钮,在按钮后
- opengl下的贪吃蛇
- 基于Qt实现音频播放器
- 华南理工大学实验——OpenGL Shader导入
- OpenGL透视投影小程序源码
- OpenGL纹理贴图.jpg格式图片小程序源码
- Qt编写的串口收发数据小程序源码
- 基于qrencode4.0.0 库和QT环境 实现QR 二维
- 2048源码qt4
- Qt下tcp和udp的编程
- Qt自动补全
- Qt电子时钟
- qttcpsocket传送结构体
- QT5.7+OPENGL画正方体
- Qt Flat样式的各种控件
评论
共有 条评论