资源简介
里面是一个简单的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 Creator5)
- OpenGL参考手册
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- OpenGL文档,api大全,可直接查询函数
- C 餐厅叫号系统(QT平)
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- QT 实现文件下载
- qt图像处理
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- QT,JPEG解码源代码(已完成)
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- Qt 播放音频文件
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- OPENGL实现世界上最小的3D游戏
评论
共有 条评论