Qt Creator OPenGL实例
来源:互联网 发布:tab在vb中什么意思 编辑:程序博客网 时间:2024/05/21 09:24
1.坐标系变换
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.resize(800,400); w.show(); return a.exec();}
mainwindow.cpp
#include "mainwindow.h"#include <QTimer>#include <math.h>MainWindow::MainWindow(QWidget *parent) : QGLWidget(parent){ angle = 0;}MainWindow::~MainWindow(){}void MainWindow::resizeGL(int w, int h){ Q_UNUSED(w);Q_UNUSED(h); glViewport(0,0,width(),height());}void MainWindow::paintGL(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glRotated(angle+10,1,0,0); glRotated(angle+10,0,1,0); glRotated(angle+10,0,0,1); glBegin(GL_QUADS); glColor3f(1,0,1);glVertex3f(0.9,0.9,0.0); glColor3f(0,0,1);glVertex3f(-0.9,0.9,0.0); glColor3f(1,0,0);glVertex3f(-0.9,-0.9,0.0); glColor3f(1,1,0);glVertex3f(0.9,-0.9,0.0); glEnd(); glFlush();}void MainWindow::initializeGL(){ initializeOpenGLFunctions(); timer(); glClearColor(0.0,0.0,0.0,0.0); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);}void MainWindow::timer(){ angle++; updateGL(); const int interval = 100; QTimer::singleShot(interval, this, SLOT(timer()));}
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QGLWidget>#include <QOpenGLFunctions_3_0>class MainWindow : public QGLWidget,QOpenGLFunctions_3_0{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); void paintGL(); void initializeGL(); void resizeGL(int w, int h); ~MainWindow();public slots: void timer();private: GLdouble angle;};#endif // MAINWINDOW_H
2.纹理
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.resize(800,400); w.show(); return a.exec();}mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QGLWidget>#include <QOpenGLFunctions_3_0>class MainWindow : public QGLWidget,QOpenGLFunctions_3_0{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); void paintGL(); void initializeGL(); void resizeGL(int w, int h); ~MainWindow();private: GLubyte Point[136][136][3]; ///< 五角星坐标};#endif // MAINWINDOW_H
mainwindow.cpp
#include <QTimer>#include <math.h>const GLfloat PI = 3.1415926536f;MainWindow::MainWindow(QWidget *parent) : QGLWidget(parent){ for(short i=0;i<136;++i) { for(short j=0;j<136;++j) { Point[i][j][0] = cos(i * PI/18)*255; Point[i][j][1] = sin(j * PI/18)*255; Point[i][j][2] = 0.4*255; // Z值 } }}MainWindow::~MainWindow(){}void MainWindow::resizeGL(int w, int h){ Q_UNUSED(w);Q_UNUSED(h); glViewport(0,0,width(),height());}void MainWindow::paintGL(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_QUADS); glTexCoord2f(0,0);glVertex3f(1,1,0.0); glTexCoord2f(1,0);glVertex3f(-1,1,0.0); glTexCoord2f(1,1);glVertex3f(-1,-1,0.0); glTexCoord2f(0,1);glVertex3f(1,-1,0.0); glEnd(); glFlush();}void MainWindow::initializeGL(){ initializeOpenGLFunctions(); glClearColor(0.0,0.0,0.0,0.0); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); glTexImage2D(GL_TEXTURE_2D,0,3,136,136,0,GL_RGB,GL_UNSIGNED_BYTE,&Point[0][0]); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glEnable(GL_TEXTURE_2D);}
0 0
- Qt Creator OPenGL实例
- QT Creator环境配置实例
- 【Qt OpenGL】Qt Creator中的3D绘图及动画教程
- 【Qt OpenGL】Qt Creator中的3D绘图及动画教程
- Qt Creator中添加菜单栏实例
- QT Creator based on VS2010 OpenGL-----How to config compiler
- Qt Creator
- Qt Creator
- qt creator
- qt creator
- qt creator
- qt creator
- ubuntu利用Qt Creator编译运行ogldev实例
- 【Qt】Qt Creator快捷键
- qt qml opengl QPainter画笔实例
- 基于QT creator。C++实现。读取城市数据点画出地图,GIS,最好用OpenGL
- creator/QT入门 & QT Creator 使用
- 安装 Qt Creator
- protocol
- java正则表达式基础
- Android 蓝牙音乐播放器
- SQLite3使用方法大全(三)之日期&时间
- sql
- Qt Creator OPenGL实例
- 高质量的子程序
- jsp中过滤器选择过滤器的写法
- 2015-09-19
- wordpress
- python2和python3中的range区别
- Java数据结构与算法之数组(二)
- [BZOJ1096][ZJOI2007]仓库建设
- HDU 5432 Pyramid Split(浮点数二分查找)