QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)

您所在的位置:网站首页 opengl三维坐标 QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)

QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)

#QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)| 来源: 网络整理| 查看: 265

#include "GLWidget.h" #include 

#define PI          3.14 #define ROT_DELTA   0.5f

void qgluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar) {     const GLdouble ymax = zNear * tan(qDegreesToRadians(fovy) / 2.0);     const GLdouble ymin = -ymax;     const GLdouble xmin = ymin * aspect;     const GLdouble xmax = ymax * aspect;     glFrustum(xmin, xmax, ymin, ymax, zNear, zFar); }

GLWidget::GLWidget(QWidget *parent)     : QGLWidget(parent)     , xRot(

0.0f)     , yRot(0.0f)     , zRot(0.0f) {     // 设置画面的双缓冲和深度缓存     setFormat(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer)); }

GLWidget::~GLWidget() {

}

void GLWidget::initializeGL() {     // 启用阴影平滑     glShadeModel(GL_SMOOTH);     // 白色背景     glClearColor(1.0, 1.0, 1.0, 1.0);     // 设置深度缓存     glClearDepth(1.0);     // 启用深度测试     glEnable(GL_DEPTH_TEST);     // 所作深度测试的类型     glDepthFunc(GL_LEQUAL);     // 告诉系统对透视进行修正     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);     // 启用2D纹理映射     glEnable(GL_TEXTURE_2D);     // 加载纹理     loadGLTextures(); }

void GLWidget::paintGL() {     renderScene();     update(); }

void GLWidget::resizeGL(int width, int height) {     // 防止窗口大小变为0     if ( height == 0 )     {         height = 1;     }     // 重置当前的视口     glViewport(0, 0, (GLint)width, (GLint)height);     // 选择投影矩阵     glMatrixMode(GL_PROJECTION);     // 重置投影矩阵     glLoadIdentity();     // 设置视口的大小     qgluPerspective(45.0, (GLdouble)width / (GLdouble)height, 0.1, 100.0);     // 选择模型观察矩阵     glMatrixMode(GL_MODELVIEW);     // 重置投影矩阵     glLoadIdentity(); }

// 绘制立方体 void GLWidget::drawCube() {     glBegin(GL_QUAD_STRIP);         //填充凸多边形     glColor3f(1, 0, 0);     glVertex3f(0.0f, 0.0f, 0.0f);     glColor3f(1, 1, 0);     glVertex3f(0.0f, 1.0f, 0.0f);     glColor3f(0, 1, 0);     glVertex3f(1.0f, 0.0f, 0.0f);     glColor3f(0, 1, 1);     glVertex3f(1.0f, 1.0f, 0.0f);     glColor3f(1, 0, 0);     glVertex3f(1.0f, 0.0f, -1.0f);     glColor3f(1, 1, 0);     glVertex3f(1.0f, 1.0f, -1.0f);     glColor3f(0, 1, 0);     glVertex3f(0.0f, 0.0f, -1.0f);     glColor3f(0, 1, 1);     glVertex3f(0.0f, 1.0f, -1.0f);     glColor3f(1, 0, 0);     glVertex3f(0.0f, 0.0f, 0.0f);     glColor3f(1, 1, 0);     glVertex3f(0.0f, 1.0f, 0.0f);     glEnd();     glBegin(GL_QUAD_STRIP);     glColor3f(0, 0, 1);     glVertex3f(0.0f, 0.0f, 0.0f);     glColor3f(1, 0, 1);     glVertex3f(1.0f, 0.0f, 0.0f);     glColor3f(0, 1, 0);     glVertex3f(0.0f, 0.0f, -1.0f);     glColor3f(1, 0, 0);     glVertex3f(1.0f, 0.0f, -1.0f);     glColor3f(1, 1, 0);     glVertex3f(0.0f, 1.0f, 0.0f);     glColor3f(1, 0, 1);     glVertex3f(1.0f, 1.0f, 0.0f);     glColor3f(0, 0, 1);     glVertex3f(0.0f, 1.0f, -1.0f);     glColor3f(1, 0, 0);     glVertex3f(1.0f, 1.0f, -1.0f);     glEnd(); }

// 绘制圆形 void GLWidget::drawCircle() {     glBegin(GL_TRIANGLE_FAN);           //扇形连续填充三角形串     glVertex3f(0.0f, 0.0f, 0.0f);     int i = 0;     for (i = 0; i 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3