详解Qt写 OpenGL入门示例
opengl入门教程

opengl入门教程OpenGL入门教程OpenGL是一种跨平台的图形库,可用于创建各种类型的图形和视觉效果。
本教程将带你入门使用OpenGL,并介绍一些基本的概念和技术。
安装OpenGL首先,你需要安装OpenGL的开发环境。
具体安装方法将因操作系统而异,以下是一些常见操作系统的安装指南。
- Windows: 在Windows上,你可以使用MinGW或者MSYS2安装OpenGL。
- macOS: OpenGL在macOS上是默认安装的,你只需要确保你的系统版本满足OpenGL的要求。
- Linux: 在Linux上,你可以使用包管理器安装OpenGL的开发环境,如apt-get (Ubuntu)或yum (Fedora)。
创建一个OpenGL窗口在开始编写OpenGL应用程序之前,你需要创建一个OpenGL 窗口来显示你的图形。
以下是使用GLUT创建一个简单窗口的例子。
```c++#include <GL/glut.h>void display() {glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glVertex2f(-0.5, -0.5);glVertex2f(0.5, -0.5);glVertex2f(0.0, 0.5);glEnd();glFlush();}int main(int argc, char** argv) {glutInit(&argc, argv);glutCreateWindow("OpenGL Window");glutDisplayFunc(display);glutMainLoop();return 0;}```运行上述代码,你将看到一个简单的OpenGL窗口中显示了一个三角形。
绘制基本图形OpenGL提供了一组基本的绘图函数,可用于绘制各种类型的图形。
以下是一些常见的绘图函数:- `glBegin(GL_POINTS)`: 用于绘制点。
qt开发例程

qt开发例程全文共四篇示例,供读者参考第一篇示例:Qt是一个跨平台的C++应用程序框架,是由挪威的Trolltech公司开发的。
Qt具有一套完善的类库和工具,可以轻松地实现图形用户界面、数据库操作、网络通信等功能。
Qt的特点是跨平台、易用性高、扩展性强、灵活性大,因此备受开发者的青睐。
本文将介绍一些Qt的开发例程,帮助读者更快速、更简单地掌握Qt的开发方法。
一、简单的Hello World程序我们来看一个简单的Hello World程序,这是最基础的Qt开发示例。
创建一个新的Qt项目,选择Qt Widgets Application模板,命名为HelloQt。
```cpp#include <QApplication>#include <QLabel>QLabel label("Hello, Qt!");label.show();return app.exec();}```在这个程序中,我们首先包含了QApplication和QLabel两个类的头文件,分别是Qt应用程序的主类和一个用于显示文本的类。
然后,我们创建了一个QLabel对象,并将其内容设置为"Hello, Qt!",最后调用show()方法显示出来。
我们调用app.exec()方法让程序开始运行。
二、使用信号与槽实现按钮点击事件class MyWidget : public QWidget{public:MyWidget(QWidget *parent = 0) : QWidget(parent){QPushButton *button = new QPushButton("Click me", this);connect(button, &QPushButton::clicked, this,&MyWidget::showMessage);}MyWidget widget;widget.show();在这个程序中,我们从QWidget类派生出了一个自定义的MyWidget类,在构造函数中创建了一个按钮,并通过connect()方法将按钮的clicked信号与自定义的showMessage槽函数连接起来。
Qt_OpenGL_教程

(由 nehewidget.cpp 展开。 ) #include "nehewidget.h" NeHeWidget::NeHeWidget( QWidget* parent, const char* name, bool fs ) : QGLWidget( parent, name ) { fullscreen = fs; 保存窗口是否为全屏的状态。 setGeometry( 0, 0, 640, 480 ); 设置窗口的位置,即左上角为(0,0)点,大小为 640*480。 setCaption( "NeHe's OpenGL Framework" ); 设置窗口的标题为“NeHe's OpenGL Framework” 。 if ( fullscreen ) showFullScreen(); 如果 fullscreen 为真,那么就全屏显示这个窗口。 } 这个是构造函数,parent 就是父窗口部件的指针,name 就是这个窗口部件的名称,fs 就是 窗口是否最大化。 NeHeWidget::~NeHeWidget() { } 这个是析构函数。 void NeHeWidget::initializeGL() { glShadeModel( GL_SMOOTH ); 这一行启用 smooth shading(阴影平滑)。阴影平滑通过多边形精细的混合色彩,并对外部光 进行平滑。我将在另一个教程中更详细的解释阴影平滑。 glClearColor( 0.0, 0.0, 0.0, 0.0 ); 这一行设置清除屏幕时所用的颜色。 如果您对色彩的工作原理不清楚的话, 我快速解释一下。 色彩值的范围从 0.0 到 1.0。0.0 代表最黑的情况,1.0 就是最亮的情况。glClearColor 后的第 一个参数是红色,第二个是绿色,第三个是蓝色。最大值也是 1.0,代表特定颜色分量的最亮 情况。最后一个参数是 Alpha 值。当它用来清除屏幕的时候,我们不用关心第四个数字。现 在让它为 0.0。我会用另一个教程来解释这个参数。 通过混合三种原色(红、绿、蓝) ,您可以得到不同的色彩。希望您在学校里学过这些。因 此 , 当 您 使 用 glClearColor(0.0, 0.0,1.0, 0.0 ) , 您 将 用 亮 蓝 色 来 清 除 屏 幕 。 如 果 您 用 glClearColor(0.5, 0.0, 0.0, 0.0)的话,您将使用中红色来清除屏幕。不是最亮(1.0),也不是最 暗(0.0)。要得到白色背景,您应该将所有的颜色设成最亮(1.0)。要黑色背景的话,您该将所 有的颜色设为最暗(0.0)。 glClearDepth( 1.0 ); 设置深度缓存。 glEnable( GL_DEPTH_TEST ); 启用深度测试。 glDepthFunc( GL_LEQUAL ); 所作深度测试的类型。
OpenGL编程轻松入门之一个简单的例子

OpenGL编程轻松入门之一个简单的例子先编译运行一个简单的例子,这样我们可以有一个直观的印象。
从这个例子我们可以看到OpenGL可以做什么,当然这个例子只做了很简单的一件事--绘制一个彩色的三角形。
除此以外,我们还可以看到典型的OpenGL程序结构及openGL 的运行顺序。
例1:本例在黑色的背景下绘制一个彩色的三角形,如图一所示。
#include <stdlib.h>#include <GL/glut.h>void background(void){glClearColor(0.0,0.0,0.0,0.0);//设置背景颜色为黑色}void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);//buffer设置为颜色可写glBegin(GL_TRIANGLES);//开始画三角形glShadeModel(GL_SMOOTH);//设置为光滑明暗模式glColor3f(1.0,0.0,0.0);//设置第一个顶点为红色glV ertex2f(-1.0,-1.0);//设置第一个顶点的坐标为(-1.0,-1.0)glColor3f(0.0,1.0,0.0);//设置第二个顶点为绿色glV ertex2f(0.0,-1.0);//设置第二个顶点的坐标为(0.0,-1.0)glColor3f(0.0,0.0,1.0);//设置第三个顶点为蓝色glV ertex2f(-0.5,1.0);//设置第三个顶点的坐标为(-0.5,1.0)glEnd();//三角形结束glFlush();//强制OpenGL函数在有限时间内运行}void myReshape(GLsizei w,GLsizei h){glViewport(0,0,w,h);//设置视口glMatrixMode(GL_PROJECTION);//指明当前矩阵为GL_PROJECTION glLoadIdentity();//将当前矩阵置换为单位阵if(w <= h)gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);//定义二维正视投影矩阵elsegluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);glMatrixMode(GL_MODELVIEW);//指明当前矩阵为GL_MODELVIEW }int main(int argc,char ** argv){/*初始化*/glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,400);glutInitWindowPosition(200,200);/*创建窗口*/glutCreateWindow("Triangle");/*绘制与显示*/background();glutReshapeFunc(myReshape);glutDisplayFunc(myDisplay);glutMainLoop();return(0);}图一:一个彩色的三角形首先创建工程,其步骤如下:1)创建一个Win32 Console Application。
OpenGL_Qt学习笔记之_02(绘制简单平面几何图形)

OpenGL_Qt学习笔记之_02(绘制简单平⾯⼏何图形)本⽂来讲讲怎样使⽤opengl来画平⾯⼏何图形,这⼀节本来是很简单的,因为某些问题都弄⼤半天了。
当然,这还是按照NeHe的教程来的学习的。
这次实现的功能是在窗⼝中画⼀个三⾓形,⼀个矩形,⼀个圆形。
⾸先来简单的看⼀下opengl中的基本坐标规则,如下图所⽰:假设左下⾓那个点是⼈的眼睛观察的位置,则向左为x正⽅向,向上为y的正⽅向(这点与opencv中不同),向⾥为z的正⽅向。
下⾯来看看怎么绘制平⾯⼏何图形。
在设置好需要画的⼏何图形的属性后,⽐如颜⾊信息,就以glBegin()开始,以glEnd()结束,glBegin()中的参数为所画⼏何图形的类型,⽐如说GL_ TRIANGLES代表三⾓形,GL_QUADS为矩形等等。
在glBegin()和glEnd()之间是放的点,这⾥是三维的点,这些点是对应所画矩形的类型的。
画圆的话稍微⿇烦⼀点,因为opengl中没有直接对应的类型,⼀般都是采⽤三⾓形来逼近,其它很多⼏何图形也是类似的。
在⽤三⾓形逼近时,是⽤的画连续三⾓形,⼀般有2种类型。
GL_TRIANGLE_STRIP和GL_TRIANGLE_PAN,这2者的区别⾸先来看个⽰意图:如果给定有顺序的点v0,v1,v2,v3,v4,v5,则采⽤GL_TRIANGLE_STRIP模式时,所画的连续三⾓形应该依次为:(v0,v1,v2),(v1, v2, v3), (v2, v3, v4),(v3, v4, v5);如果采⽤的是GL_TRIANGLE_PAN模式,则第⼀个点是固定的,且后⾯每次都要跳⼀个顶点,所以它的结果为(v0, v1, v2), (v0, v2, v3), (v0, v3, v4),(v0, v4, v5)。
因此我这⾥要画圆盘的话,就采⽤的GL_TRIANGLE_PAN模式了,⼤家可以⼿动画⼀下就知道,具体可以参考后⾯给出的代码。
每次绘⼀个⼏何图形,都会移动当前的焦点,采⽤的函数是glTranslatef,⽽⽹上的教程给该函数的参数时,都是类似这样的glTranslatef(-1.5f, 0.0f, -6.0f);NeHe的教程中也是⼀样,他的解释是移动多少个单位,⽐如说-1.5f就是向左移动1.5个单位,我⼀开始也在程序中这么弄,结果调试了4个多⼩时,就是不显⽰三⾓形,在⽹上找了很多⽅法,都试过了还不⾏。
QT编程技术详解.ppt

窗口操作函数,窗口初始化、窗口大小、窗 口位置等函数
回调函数。响应刷新消息、键盘消息、 鼠标消息、定时器函数等
创建复杂的三维物体 菜单函数
程序运行函数,glutMainLoop()
OpenGL的库
• 从核心库方面分析,OpenGL只是一个针对 显卡的软件接口,也就是说,单纯的 OpenGL除了绘制图形之外,没有任何的其 它的功能。而事实上,一个三维的程序不 可能是一副静态的图画,一个游戏不可能 不和用户进行交互,由于OpenGL本身不提 供这些功能,所以程序员需要一个可以应 用OpenGL的编程环境(比如VC、Qt)及应用 其核心之外的库。(因为OpenGL创建之初 的宗旨就是:让画家专注于绘画)
核心库包含 有115个函 数,函数名 的前缀为gl, 用于常规的、 核心的图形 处理.
矩阵操作、几何变换和投影变换的函数,如glPushMatrix() 颜色、光照和材质的函数,如设置颜色模式函数glColor*() 显示列表函数,如glNewList()、 glEndList() 纹理映射函数,如glTexImage1D()、glTexImage2D() 光栅化、象素操作函数,如glRasterPos*()、glLineWidth() 选择与反馈函数,如渲染模式glRenderMode() 曲线与曲面的绘制函数,如glMap*()、glMapGrid*()
2020/4/8
OpenGL绘图
• glBegin(GLenum mode)
Mode 的值
含义
GL_POINTS
一系列独立的点
GL_LINES
多组线段
GL_POLYGON
单个简单填充多边形
GL_TRIANGLES
多组独立填充三角形
OpenGL编程轻松入门之特殊效果操作Read

OpenGL编程轻松入门之特殊效果操作-Read————————————————————————————————作者:————————————————————————————————日期:OpenGL编程轻松入门之特殊效果操作每个物体在不同的环境在会有不同的视觉效果。
为了使效果更加真实需要增加特殊效果。
例8:绘制三个互相重叠的矩形,这三个矩形从左到右分别为绿、红、蓝。
其中红色、蓝色矩形的透明度分别为50%的透明度,即alpha值为0.5,如图九所示。
#include <stdlib.h>#include <GL/glut.h>void myInit(void){glClearColor(0.2,0.8,0.8,0.0);//将背景设置为湖蓝色glEnable(GL_BLEND);//激活GL_BLENDglBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);//指定像素的数学算法glEnable(GL_FLAT);}void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);/*绘制一个绿色的矩形alpha = 1.0*/glColor4f(0.0,1.0,0.0,1.0);glBegin(GL_POL YGON);glVertex3f(-0.75,0.5,0.0);glVertex3f(-0.75,-0.75,0.0);glVertex3f(0.5,-0.75,0.0);glVertex3f(0.5,0.5,0.0);glEnd();/*绘制一个红色的矩形alpha = 0.5*/glColor4f(1.0,0.0,0.0,0.5);glBegin(GL_POL YGON);glVertex3f(-0.25,1.0,0.0);glVertex3f(-0.25,-0.25,0.0);glVertex3f(1.0,-0.25,0.0);glVertex3f(1.0,1.0,0.0);glEnd();/*绘制一个蓝色的矩形alpha = 0.5*/glColor4f(0.0,0.0,1.0,0.5);glBegin(GL_POL YGON);glVertex3f(0.25,1.5,0.0);glVertex3f(0.25,0.25,0.0);glVertex3f(1.5,0.25,0.0);glVertex3f(1.5,1.5,0.0);glEnd();glFlush();}void myReshape(int w,int h){glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<h)glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-1.5,1.5);elseglOrtho(-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-1.5,1.5);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(-0.4,0.0,0.0);}int main(int argc,char ** argv){/*初始化*/glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(300,400);glutInitWindowPosition(200,200);/*创建窗口*/glutCreateWindow("BLEND POL YGON");/*绘制与显示*/myInit();glutReshapeFunc(myReshape);glutDisplayFunc(myDisplay);/*进入GLUT事件处理循环*/glutMainLoop();return(0);}图九:三个互相重叠的矩形·glBlendFunc(GLenum sfactor,GLenum dfactor)指定像素算法。
QT+OpenGL描绘简单图形

QT+OpenGL描绘简单图形初学opengl,绕了很多弯路,继承于QOpenGLWindow,描画出来。
新建类myopengl,头⽂件如下:#ifndef MYOPENGL_H#define MYOPENGL_H#include <QWidget>#include <QOpenGLWidget>#include <QOpenGLWindow>#include <QGLWidget>#include <QGLFunctions>#include <QOpenGLFunctions>#include <QtOpenGL>#include <QOpenGLBuffer>#include <QOpenGLShaderProgram>#include <QMatrix4x4>#include <GL/glu.h>class myopenGL:public QOpenGLWindow, protected QOpenGLFunctions{Q_OBJECTpublic:explicit myopenGL(QWindow *parent = 0);~myopenGL();protected:void initializeGL() override;void paintGL() override;void resizeGL(int width, int height) override;void loadGLTextures();protected:GLfloat rTri;GLfloat rQuad;GLfloat xRot, yRot, zRot;GLuint texture[1];private:};#endif// MYOPENGL_Hmyopengl.cpp 代码如下:#include "myopengl.h"#include <QImage>#include <QDebug>myopenGL::myopenGL(QWindow *parent){rTri = 0.0;rQuad = 0.0;xRot = yRot = zRot = 0.0;}myopenGL::~myopenGL(){}void myopenGL::loadGLTextures(){QImage tex, buf;if ( !buf.load( "./msbg_blue.png" ) ){qWarning( "Could not read image file, using single-color instead." );QImage dummy( 128, 128, QImage::Format_RGB32 );dummy.fill( Qt::green );buf = dummy;}tex = QGLWidget::convertToGLFormat( buf );glGenTextures( 1, &texture[0] );glBindTexture( GL_TEXTURE_2D, texture[0] );glTexImage2D( GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0,GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );}//初始化opengl窗⼝部件void myopenGL::initializeGL(){initializeOpenGLFunctions();glClearColor(0.0,0.0,0.0,1.0);glShadeModel(GL_SMOOTH);glClearDepth(1.0);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); }//绘制opengl窗⼝void myopenGL::paintGL(){glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();glTranslatef(-1.5f,0.0f,-6.0f);glRotatef( rTri, 0.0, 1.0, 0.0 );glBegin(GL_TRIANGLES);glColor3f( 1.0, 0.0, 0.0 );glVertex3f( 0.0, 1.0, 0.0 );glColor3f( 0.0, 1.0, 0.0 );glVertex3f( -1.0, -1.0, 1.0 );glColor3f( 0.0, 0.0, 1.0 );glVertex3f( 1.0, -1.0, 1.0 );glColor3f( 1.0, 0.0, 0.0 );glVertex3f( 0.0, 1.0, 0.0 );glColor3f( 0.0, 0.0, 1.0 );glVertex3f( 1.0, -1.0, 1.0 );glColor3f( 0.0, 1.0, 0.0 );glVertex3f( 1.0, -1.0, -1.0 );glColor3f( 1.0, 0.0, 0.0 );glVertex3f( 0.0, 1.0, 0.0 );glColor3f( 0.0, 1.0, 0.0 );glVertex3f( 1.0, -1.0, -1.0 );glColor3f( 0.0, 0.0, 1.0 );glVertex3f( -1.0, -1.0, -1.0 );glColor3f( 1.0, 0.0, 0.0 );glVertex3f( 0.0, 1.0, 0.0 );glColor3f( 0.0, 0.0, 1.0 );glVertex3f( -1.0, -1.0, -1.0 );glColor3f( 0.0, 1.0, 0.0 );glVertex3f( -1.0, -1.0, 1.0 );glEnd();glTranslatef(3.0f,0.0f,-7.0f);glRotatef( rQuad, 0.0, 0.0, 1.0 );glRotatef( rTri, 0.0, 1.0, 0.0 );glRotatef( rQuad, 0.0, 0.0, 1.0 );glBegin(GL_QUADS);glColor3f( 0.0, 1.0, 0.0 );glVertex3f( 1.0, 1.0, -1.0 );glVertex3f( -1.0, 1.0, -1.0 );glVertex3f( -1.0, 1.0, 1.0 );glVertex3f( 1.0, 1.0, 1.0 );glColor3f( 1.0, 0.5, 0.0 );glVertex3f( 1.0, -1.0, 1.0 );glVertex3f( -1.0, -1.0, 1.0 );glVertex3f( -1.0, -1.0, -1.0 );glVertex3f( 1.0, -1.0, -1.0 );glColor3f( 1.0, 0.0, 0.0 );glVertex3f( 1.0, 1.0, 1.0 );glVertex3f( -1.0, 1.0, 1.0 );glVertex3f( -1.0, -1.0, 1.0 );glVertex3f( 1.0, -1.0, 1.0 );glColor3f( 1.0, 1.0, 0.0 );glVertex3f( 1.0, -1.0, -1.0 );glVertex3f( -1.0, -1.0, -1.0 );glVertex3f( -1.0, 1.0, -1.0 );glVertex3f( 1.0, 1.0, -1.0 );glColor3f( 0.0, 0.0, 1.0 );glVertex3f( -1.0, 1.0, 1.0 );glVertex3f( -1.0, 1.0, -1.0 );glVertex3f( -1.0, -1.0, -1.0 );glVertex3f( -1.0, -1.0, 1.0 );glColor3f( 1.0, 0.0, 1.0 );glVertex3f( 1.0, 1.0, -1.0 );glVertex3f( 1.0, 1.0, 1.0 );glVertex3f( 1.0, -1.0, 1.0 );glVertex3f( 1.0, -1.0, -1.0 );glEnd();rTri += 0.2;rQuad -= 0.15;}//处理窗⼝⼤⼩void myopenGL::resizeGL(int width, int height){glViewport(0,0,(GLint)width,(GLint)height);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45.0,(GLfloat)width/(GLfloat)height,0.1,100.0);glMatrixMode(GL_MODELVIEW); //选择模型观察矩阵glLoadIdentity(); //重置模型观察矩阵}main.cpp修改代码如下:#include "myopengl.h"#include <QGuiApplication>#include <QPushButton>int main(int argc, char *argv[]){QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);QGuiApplication a(argc, argv);myopenGL w;w.resize(QSize(1280,720));//QPushButton ptn(&w);w.show();return a.exec();}效果图:这么简单的效果⽤了就⾛了好多弯路。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
详解 Qt 写 OpenGL 入门示例
2011-07-01 17:12 佚名互联网我要评论(0)字号:T | T
本文介绍的是详解 Qt 写 OpenGL 入门示例,不多说,先来看详细内容。
AD:
Qt 写OpenGL 入门示例是本文所介绍的内容。
其实我个人是很喜欢玩游戏的,为什么呢?只是因为我还无法制作游戏.所以,以前就看过一些...东西. 比如directx/opengl. 可惜无法入门,而当年拼命的记忆那个windows api版的hello world(vc++自动生成)...在一个星期后便忘记了.使得我对windows上的编程充满了阴影(在若干年后,我终于明白你不需要去记忆具体api, 因为环境会给你提示) - windows都没入门, 怎么开始directx哦?(不过无数次的hello world,也有好处,就是让我明白了windows平台的消息循环机制...这让我在若干年后在看到qt的app.exec()时,心有灵犀的想, 哦,进入了消息循环了...)
后来自然就看看qt,看看c++、PHP就不说了,一直搞这个的)等. 还有有比如SDL一类的搞搞,但始终不得其门而入,qt有自带的提供给opengl的窗口类的. 在我以前, 反正也试过,这样那样的错误就放弃了...
不过不知道为什么, 现在却很简单,(可能做任何事情都有简单和难的时候,只是未到时间吧).,假如你也想玩玩qt? opengl的话, 那么先具体下面一些东西:
(1)OpenGL编程指南 (书, 里面有代码的,咋们参考一些)
(2)装了qt库和环境(windows下qt里应该有自带opengl, 所以opengl的库就不提了)
(3)编译器
那么我们就开始了...反正是很简单的入门...写个main.cpp, 如下
1.yarco@coto?~/Documents/test/1?$?cat?main.cpp ?
2.#include?<QApplication>?
3.#include?"MyWidget.h" ?
4.int?main(int?argc,?char*?argv[])?//?感慨一下:?万年不变的argc,?argv阿,让
每个程序员都感到亲切 ?
5.{ ?
6.????????QApplication?app(argc,?argv); ?
7.????????MyWidget?w; ?
8.????????w.show(); ?
9.????????return?app.exec(); ?
10.}?
然后就是我们自己定义的类MyWidget:
1.yarco@coto?~/Documents/test/1?$?cat?MyWidget.h ?
2.#include?<QGLWidget>?
3.class?MyWidget?:?public?QGLWidget ?
4.{ ?
5.public: ?
6.????????MyWidget(QWidget*?parent?=?0)?:?QGLWidget(parent)?{} ?
7.protected: ?
8.????????void?initializeGL(); ?
9.????????void?resizeGL(int?w,?int?h); ?
10.????????void?paintGL(); ?
11.}; ?
12.//?qt文档里的哦 ?
13.//?三个xxxGL必须实现 ?
14.//?也就是在这里,我们就可以使用opengl的指令了哦... ?
15.yarco@coto?~/Documents/test/1?$?cat?MyWidget.cpp ?
16.#include?"MyWidget.h" ?
17.void?MyWidget::initializeGL() ?
18.{ ?
19.} ?
20.void?MyWidget::resizeGL(int?w,?int?h) ?
21.{ ?
22.} ?
23.void?MyWidget::paintGL() ?
24.{ ?
25.????????renderText(20,?100,?"Hello,?My?first?OpenGL?app."); ?
26.} ?
27.//?啥都没有,只有调用qt提供的renderText来输出文字?
然后就是qt的编译步骤了...(不详细描述)
结果的效果图如下:
小结:详解 Qt 写OpenGL 入门示例的内容介绍完了,希望本文对你有所帮助!。