知乎:https://www.zhihu.com/people/monkey.d.luffy Android高级开发交流群2: 752871516
全部博文(315)
分类: 其他平台
2013-02-24 21:17:03
之前一直做地图的算法,没什么时间学习opengl,之前看nehe_OpenGL.chm和Qt+OpenGL教程_for_Qt_4.5.3.doc(感谢分享的网友),看了一些,大概入门了算是;因为公司的opengl代码是高手写的,我们呢??只是调用接口,呵呵,做算法,不过了,还是慢慢的学习了很多东西;
这里还是把之前从文档里面摘取除了的qt的opengl框架留着,想用的时候方便,省的每次敲,作为学习模版还是不错的。
Qt安装好后,基本上opengl可以使用了,不过需要在工程配置文件中加入配置选项;然后基本的.c、.h文件,差不多了!!!
工程配置文件:(.pro)
#------------------------------------------------- # # Project created by QtCreator 2012-12-29T12:00:04 # #------------------------------------------------- QT += core gui QT += opengl //OPENGL库支持 QT += qt3support //支持qt3支持 TARGET = SecondOpenggl TEMPLATE = app SOURCES += main.cpp\ widget.cpp HEADERS += widget.h FORMS += widget.ui
.h文件:
#ifndef WIDGET_H
#define WIDGET_H
#include
.c文件:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QGLWidget *parent, const char* name, bool fs) :
QGLWidget(parent, name),
ui(new Ui::Widget)
{
ui->setupUi(this);
fullscreen = fs;
}
Widget::~Widget()
{
delete ui;
}
void Widget::initializeGL() // 初始化OpenGL
{
/********************用户自定义的初始化过程*******************/
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // 设置颜色缓冲
glClearDepth(1.0f); // 设置深度缓冲
glDepthFunc(GL_LEQUAL); // 指定深度缓冲比较值(如果输入的深度值小于或等于参考值,则通过)
glEnable(GL_DEPTH_TEST); // 启用深度缓冲
glShadeModel(GL_SMOOTH); // 指定两点间其他点颜色的过渡模式(GL_SMOOTH会出现过渡效果,GL_FLAT 则只是以指定的某一点的单一色绘制其他所有点)
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 指定所控制行为的符号常量
/*********************************************************/
return;
}
void Widget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除颜色缓冲和深度缓冲
glLoadIdentity(); // 重置模型观察矩阵
///////////////////在此处添加绘制代码////////////////
glTranslatef( -1.5, 0.0, -6.0); // 相对与当前所在的屏幕位置进行移动
///////////////////在此处添加绘制代码////////////////
}
void Widget::resizeGL(int width, int height) // 窗口大小改变时重新调用
{
if (0 == height)
{
height = 1;
}
if (0 == width)
{
width = 0;
}
glViewport(0, 0, (GLint)width, (GLint)height); // 重置当前的视口(Viewport)
glMatrixMode(GL_PROJECTION); // 选择投影矩阵
glLoadIdentity(); // 重置投影矩阵
gluPerspective(45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0); // 建立透视投影矩阵
glMatrixMode(GL_MODELVIEW); // 选择模型观察矩阵
glLoadIdentity(); // 重置模型观察矩阵
}
main.c文件:
#include