LINUX环境下QT5.9+OPENGL绘制图形与渲染入门(二)
如果你想要深层次的搞明白OpenGL的技术原理,请到B站看各种大佬的详细讲解,
再此只说明我自己的理解。
可以认为OpenGL是将一个图形分解成N多个小方块,也就是微分几何,之所以微分是因为GPU精于数据计算,微分之后几何图形就变成可以计算的数据了,即每个小方块的位置数据;然后再进行积分将N多个小方块组合在一起,就集合形成了一个几何图形。
1.修改.pro文件
QT += opengl
LIBS += -lGLU //重点注意缺少该文件,将导致 #include <GL/glu.h>无法导入,进而导致gluPerspective()函数无法使用
2.修改.h文件,请看图
3.编写.cpp文件
#include “nehewidget.h”
NeheWidget::NeheWidget(QWidget *parent, bool fs)
:QGLWidget(parent)
{
fullScreen = fs;
}
void NeheWidget::initializeGL()
{
glShadeModel(GL_SMOOTH);
// glShadeModel(GL_FLAT);
glClearColor(0.f, 0.f, 0.f, 0.f);
glEnable(GL_DEPTH_TEST);
}
void NeheWidget::resizeGL(int w, int h)
{
glViewport(0, 0, (GLint)w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (GLfloat)w/(GLfloat)h, 0.1f, 100.f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void NeheWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawTriangle();
drawSquare();
}
void NeheWidget::drawTriangle()
{
glLoadIdentity();
glTranslatef(-1.5f, 0.f, -6.f);
glBegin(GL_TRIANGLES);
glColor3f(1.f, 0.f, 0.f);
glVertex3f(0.f, 1.f, 0.f);
glColor3f(0.f, 1.f, 0.f);
glVertex3f(1.f, -1.f, 0.f);
glColor3f(0.f, 0.f, 1.f);
glVertex3f(-1.f, -1.f, 0.f);
glEnd();
}
void NeheWidget::drawSquare()
{
glLoadIdentity();
glTranslatef(1.5, 0.0, -6.f);
// 会为蓝色,因为在paintGL()中,先调用了drawTriangle(), 最后一个顶点用的深蓝色,之后为做改动,
// 所以,这里仍为蓝色.
glBegin( GL_QUADS );
glVertex3f( -1.0, 1.0, 0.0 );
glVertex3f( 1.0, 1.0, 0.0 );
glVertex3f( 1.0, -1.0, 0.0 );
glVertex3f( -1.0, -1.0, 0.0 );
glEnd();
}
本篇博客重点在于入门QT+OpenGL,基本图形绘制,避免刚入门同学走许多不必要的大坑,代码全部公开,仅供参考,如有错误请指正。