青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::

==================================[GLWidget.h]==================================

#ifndef GLWIDGET_H

#define GLWIDGET_H


#include <QtOpenGL/QGLWidget>


class GLWidget : public QGLWidget {

    Q_OBJECT


public:

    GLWidget(QWidget *parent = 0);

    ~GLWidget();


protected:

    virtual void initializeGL();

    virtual void resizeGL(int w, int h);

    virtual void paintGL();


    virtual void hideEvent(QHideEvent *event);

    virtual void showEvent(QShowEvent *event);

    virtual void timerEvent(QTimerEvent *event);

    virtual void mousePressEvent(QMouseEvent *event);

    virtual void mouseMoveEvent(QMouseEvent *event);

    virtual void mouseReleaseEvent(QMouseEvent *event);

    virtual void wheelEvent(QWheelEvent *event);


private:

    int     timerId;

    QPoint  lastPos;

    GLfloat rotateX;

    GLfloat rotateY;

    GLfloat rotateZ;

    GLfloat zoom;


    void drawCube(GLfloat factorX = 1, GLfloat factorY = 1,

                  GLfloat factorZ = 1, GLfloat w = 1);

    void drawCone(GLfloat radius = 1.0f, GLfloat height = 1,

                  GLuint steps = 18);

};


#endif // GLWIDGET_H



==================================[GLWidget.cpp]==================================

#include "GLWidget.h"

#include <qDebug>

#include <QTimerEvent>

#include <QMouseEvent>

#include <cmath>


GLWidget::GLWidget(QWidget *parent)

    : QGLWidget(parent) {

    setFormat(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer));


    rotateX = 0.0f;

    rotateY = 0.0f;

    rotateZ = 0.0f;

    zoom = 1.0f;

}


GLWidget::~GLWidget() {


}


void GLWidget::hideEvent(QHideEvent *event) {

    this->killTimer(this->timerId);

}


void GLWidget::showEvent(QShowEvent *event) {

    this->timerId = this->startTimer(500);

}


void GLWidget::timerEvent(QTimerEvent *event) {

    if (event->timerId() == this->timerId) {

    } else {

        QGLWidget::timerEvent(event);

    }

}


void GLWidget::mousePressEvent(QMouseEvent *event) {

    if (Qt::LeftButton == event->button()) {

        lastPos = event->pos();

    } else if (Qt::RightButton == event->button()) {

        lastPos = event->pos();

    }

}


void GLWidget::mouseMoveEvent(QMouseEvent *event) {

    if (Qt::LeftButton & event->buttons()) {

        GLfloat dx = event->pos().x() - lastPos.x();

        GLfloat dy = event->pos().y() - lastPos.y();


        rotateX += dy;

        rotateY += dx;


        updateGL();

        //qDebug() << QString("RotateX:%1, RotateY:%2").arg(rotateX).arg(rotateY);

    } else if (Qt::RightButton & event->buttons()) {

        GLfloat dz = event->pos().y() - lastPos.y();

        dz *= 0.01f;

        zoom += dz;

        updateGL();

    }


    lastPos = event->pos();

}


void GLWidget::mouseReleaseEvent(QMouseEvent *event) {


}


void GLWidget::wheelEvent(QWheelEvent *event) {

    GLfloat degrees = event->delta();

    zoom -= degrees * 0.0002f;

    // 注意, 如果zoom為負值, eye就會被放置到z軸的負方向, 而從物體的背面看了.

    if (zoom < 1.0f) {

        zoom = 1.0f;

    }


    updateGL();

}


///////////////////////////////////////////////////////////////////////////////

//                               Opengl Code

///////////////////////////////////////////////////////////////////////////////

void GLWidget::initializeGL() {

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

    glEnable(GL_DEPTH_TEST);

    glFrontFace(GL_CCW);

    //glEnable(GL_CULL_FACE);

    glCullFace(GL_BACK);

    glShadeModel(GL_SMOOTH);


    // Point size

    // glPointSize(GLfloat size);

    GLfloat sizes[2];

    GLfloat step;

    glGetFloatv(GL_LINE_WIDTH_RANGE, sizes);

    glGetFloatv(GL_LINE_WIDTH_GRANULARITY, &step);

}


void GLWidget::resizeGL(int w, int h) {

    glViewport(0, 0, w, h);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    gluPerspective(75, (GLdouble)w / h, 0.1, 100);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

}


void GLWidget::paintGL() {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();

    //glTranslatef(0.0f, 0.0f, zoom);

    gluLookAt(0.0f, 0.0f, zoom, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);


    glRotatef(rotateX, 1, 0, 0);

    glRotatef(rotateY, 0, 1, 0);

    glRotatef(rotateZ, 0, 0, 1);


    // Real draw code.

    //glColor3f(1.0f, 0.0f, 0.0f);

    //drawCube(1, 1, 1, 1);

    glPolygonMode(GL_BACK, GL_LINE);

    drawCone(1.0f, 1.50, 48);


}


void GLWidget::drawCube(GLfloat factorX, GLfloat factorY,

                        GLfloat factorZ, GLfloat w) {

    GLfloat x = factorX * 0.5f;

    GLfloat y = factorY * 0.5f;

    GLfloat z = factorZ * 0.5f;


    // x / w, y / w, z / w

    // 前左下, 前右下, 前右上, 前左上: p0, p1, p2, p3

    // 后左下, 后右下, 后右上, 后左上: p4, p5, p6, p7

    GLfloat p0[4] = {-x, -y, z, w};

    GLfloat p1[4] = {x, -y, z, w};

    GLfloat p2[4] = {x, y, z, w};

    GLfloat p3[4] = {-x, y, z, w};


    GLfloat p4[4] = {-x, -y, -z, w};

    GLfloat p5[4] = {x, -y, -z, w};

    GLfloat p6[4] = {x, y, -z, w};

    GLfloat p7[4] = {-x, y, -z, w};


    // 開始繪制Cube的六個面: 逆時針

    glBegin(GL_QUADS);

    // 前面: p0, p1, p2, p3

    glVertex4fv(p0);

    glVertex4fv(p1);

    glVertex4fv(p2);

    glVertex4fv(p3);

    // 右面: p1, p5, p6, p2

    glVertex4fv(p1);

    glVertex4fv(p5);

    glVertex4fv(p6);

    glVertex4fv(p2);

    // 后面: p5, p4, p7, p6

    glVertex4fv(p5);

    glVertex4fv(p4);

    glVertex4fv(p7);

    glVertex4fv(p6);

    // 左右: p4, p0, p3, p7

    glVertex4fv(p4);

    glVertex4fv(p0);

    glVertex4fv(p3);

    glVertex4fv(p7);

    // 上面: p2, p6, p7, p3

    glVertex4fv(p2);

    glVertex4fv(p6);

    glVertex4fv(p7);

    glVertex4fv(p3);

    // 下面: p0, p4, p5, p1

    glVertex4fv(p0);

    glVertex4fv(p4);

    glVertex4fv(p5);

    glVertex4fv(p1);

    glEnd();

}



void GLWidget::drawCone(GLfloat radius, GLfloat height,

                        GLuint steps) {

    const GLfloat GL_PI = 3.1415f;

    GLfloat angles = 2 * GL_PI / steps;

    GLfloat vertices[steps][3];


    for (int i = 0; i < steps; ++i) {

        vertices[i][0] = radius * cos(i * angles);

        vertices[i][1] = radius * sin(i * angles);

        vertices[i][2] = 0;

    }


    // top surface

    glBegin(GL_TRIANGLE_FAN);

        glColor3f(0.0f, 0.0f, 1.0f);

        glVertex3f(0.0f, 0.0f, height);

        for (int i = 0; i < steps; ++i) {

            glVertex3fv(vertices[i]);

            if ((i & 1) == 0) {

                glColor3f(1.0f, 0.0f, 0.0f);

            } else {

                glColor3f(0.0f, 0.0f, 1.0f);

            }

        }

        glVertex3fv(vertices[0]);

    glEnd();


    // bottom surface

    glBegin(GL_TRIANGLE_FAN);

        glVertex3f(0.0f, 0.0f, 0);

        for (int i = steps - 1; i >= 0; --i) {

            glVertex3fv(vertices[i]);

            if ((i & 1) == 0) {

                glColor3f(0.0f, 1.0f, 0.0f);

            } else {

                glColor3f(1.0f, 0.0f, 1.0f);

            }

        }

        glVertex3fv(vertices[steps - 1]);

    glEnd();

}


posted on 2009-05-19 15:15 逛奔的蝸牛 閱讀(2962) 評論(1)  編輯 收藏 引用 所屬分類: QtOpenGL

評論

# re: Qt: OpenGL模板 2012-12-14 15:19 wsc
GLfloat vertices[steps][3];這句代碼有錯誤。不能這樣用變量定義數組吧。應該用循環吧?  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区在线视频免费观看| 亚洲伊人伊色伊影伊综合网 | 国产精品久久久久久妇女6080| 久久久综合精品| 久久久久综合一区二区三区| 午夜激情久久久| 欧美一区国产一区| 久久五月天婷婷| 免费不卡视频| 欧美日韩一区精品| 国产精品视频免费一区| 国产日韩视频一区二区三区| 国产一区二区三区在线播放免费观看 | 国产精品美女主播| 国产精品自拍三区| 樱桃国产成人精品视频| 99在线精品视频在线观看| 亚洲少妇自拍| 久久久精品日韩欧美| 欧美电影免费| 亚洲一区二区视频| 久久夜色精品国产噜噜av| 亚洲一区二区成人| 国产精品国产成人国产三级| 国产精品久久久久久五月尺| 国产有码一区二区| 亚洲欧洲久久| 欧美一区二区三区精品| 欧美福利视频在线观看| 亚洲四色影视在线观看| 久久久亚洲国产美女国产盗摄| 蜜臀久久99精品久久久久久9| 欧美日韩第一区日日骚| 国产一区二区三区久久久久久久久| 亚洲黄色一区| 亚洲欧美中文另类| 欧美国产亚洲另类动漫| 亚洲欧美综合国产精品一区| 久久一区中文字幕| 国产精品一区二区三区四区| 日韩一区二区电影网| 老司机免费视频一区二区| 99国产麻豆精品| 美女视频网站黄色亚洲| 国产精品推荐精品| 夜夜嗨一区二区| 欧美成人精品h版在线观看| 亚洲在线电影| 欧美日韩日韩| 亚洲精品一区二区三区在线观看| 久久精品人人做人人爽| 亚洲视频精品在线| 欧美极品aⅴ影院| 亚洲国产成人精品久久| 久久香蕉精品| 久久成人免费视频| 国产视频久久久久| 亚洲一区二区av电影| 亚洲级视频在线观看免费1级| 宅男在线国产精品| 欧美天堂亚洲电影院在线观看| 亚洲人成啪啪网站| 欧美激情1区2区| 可以免费看不卡的av网站| 国产自产2019最新不卡| 久久午夜av| 久久婷婷麻豆| 91久久精品日日躁夜夜躁欧美| 久久婷婷成人综合色| 久久精品麻豆| 一区二区在线视频观看| 麻豆视频一区二区| 裸体女人亚洲精品一区| 亚洲黄色高清| 亚洲精品视频在线观看网站| 欧美日本亚洲视频| 亚洲午夜黄色| 亚洲自拍16p| 国产一区二区三区在线观看免费视频 | 99精品视频免费观看视频| 欧美大片在线看免费观看| 亚洲精品中文字幕女同| 亚洲精品在线视频观看| 国产精品久久午夜| 久久蜜桃精品| 狼人天天伊人久久| 9色精品在线| 亚洲自拍16p| 亚洲国产精品黑人久久久| 91久久午夜| 国产精品美女主播在线观看纯欲| 久久精品伊人| 欧美国产综合| 亚洲一区久久| 久久国产精品久久久久久电车 | 欧美激情1区2区| 亚洲影视综合| 欧美专区日韩专区| 日韩视频一区| 午夜免费电影一区在线观看| 樱桃国产成人精品视频| 亚洲国产1区| 国产精品一区二区视频| 亚洲高清在线视频| 国产欧美精品一区二区三区介绍| 麻豆精品在线视频| 国产精品高潮在线| 欧美成人中文字幕在线| 国产精品99免视看9| 米奇777在线欧美播放| 欧美日韩一区二区三区视频| 久久频这里精品99香蕉| 欧美日韩精品综合| 蜜臀av一级做a爰片久久| 欧美日韩高清一区| 免费在线国产精品| 国产精品看片资源| 亚洲国产一成人久久精品| 国产欧美日本一区视频| 亚洲人成在线播放| 伊人久久婷婷色综合98网| 亚洲少妇自拍| 一本综合久久| 美女主播视频一区| 久久另类ts人妖一区二区| 欧美视频在线免费| 亚洲精品视频啊美女在线直播| 国语自产精品视频在线看8查询8 | 欧美一区二区三区视频免费播放| 男同欧美伦乱| 另类激情亚洲| 国产视频不卡| 午夜精品久久久久| 新67194成人永久网站| 欧美视频久久| 在线中文字幕日韩| 亚洲国产三级在线| 在线成人中文字幕| 午夜精品影院| 久久高清一区| 国产日韩欧美中文在线播放| 国产精品99久久99久久久二8| 夜夜精品视频| 欧美婷婷久久| av成人免费在线观看| 亚洲一级免费视频| 欧美性猛交xxxx乱大交蜜桃| 亚洲麻豆av| 一区二区三区**美女毛片| 欧美另类一区二区三区| 99国产精品| 性欧美video另类hd性玩具| 国产精品入口麻豆原神| 亚洲欧美www| 久久久久国产精品一区| 国产欧美在线播放| 久久久久成人精品免费播放动漫| 美玉足脚交一区二区三区图片| 国产在线观看精品一区二区三区 | 黑人极品videos精品欧美裸| 欧美在线免费看| 欧美18av| 一本色道久久88综合日韩精品| 欧美精品一区二区三区蜜臀| 亚洲欧洲一区二区三区| 一区二区三区成人| 国产精品久久久久久久久久妞妞 | 亚洲精品一区二区在线| 亚洲欧美国产77777| 国产欧美一区二区三区久久人妖| 久久精品人人做人人爽电影蜜月| 可以看av的网站久久看| 亚洲激情成人在线| 欧美调教视频| 久久精品夜色噜噜亚洲a∨| 欧美激情一区在线| 亚洲综合日韩在线| 激情欧美一区二区| 欧美亚洲成人免费| 美女精品一区| 亚洲欧美福利一区二区| 欧美激情综合色| 久久www成人_看片免费不卡| 亚洲精品日产精品乱码不卡| 国产精品国产三级国产aⅴ浪潮| 久久久久久久激情视频| 亚洲午夜精品一区二区| 欧美高清不卡在线| 久久精品国产久精国产一老狼| 亚洲精品系列| 一区二区视频免费在线观看| 国产精品国产三级国产专区53| 农夫在线精品视频免费观看| 欧美一区成人| 亚洲图片自拍偷拍| 亚洲精品一二三| 欧美激情精品久久久久久| 久久精品国产综合精品| 亚洲欧美日韩国产一区| 99国产一区|