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

逛奔的蝸牛

我不聰明,但我會很努力

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

==================================[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>
            久久久久高清| 久久综合色综合88| 亚洲图片欧洲图片日韩av| 久久狠狠亚洲综合| 亚洲国产一区二区视频| 欧美亚洲一区二区三区| 国产精品视频不卡| 亚洲一区在线免费| 99视频超级精品| 欧美大片在线看免费观看| 亚洲国产美女精品久久久久∴| 久久久久久久999精品视频| 亚洲一区在线播放| 国产精品一区毛片| 欧美与欧洲交xxxx免费观看 | 久久久久在线观看| 亚洲一区国产一区| 国产精品欧美日韩久久| 亚洲在线日韩| 亚洲欧美日韩中文视频| 国产综合自拍| 美女在线一区二区| 母乳一区在线观看| 亚洲精品一区二区三区在线观看| 欧美激情精品久久久久久变态 | 国产一区二区三区高清播放| 久久久久久久久久久成人| 欧美在线综合视频| 亚洲第一区在线| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲欧美国产高清| 国产嫩草一区二区三区在线观看| 欧美一区二区久久久| 久久av资源网站| 亚洲高清在线播放| 亚洲精选在线| 国产无遮挡一区二区三区毛片日本| 久久国产综合精品| 伊人激情综合| 亚洲精品久久视频| 国产午夜精品美女毛片视频| 欧美成人一区二免费视频软件| 欧美电影打屁股sp| 亚洲欧美亚洲| 久久久久久综合网天天| 亚洲视频在线一区观看| 在线视频一区观看| 欧美69wwwcom| 亚洲一区二区三区四区中文| 午夜影视日本亚洲欧洲精品| 黄色日韩在线| 亚洲精品在线三区| 国产欧美一区二区白浆黑人| 另类天堂视频在线观看| 欧美国产91| 欧美一区二区在线播放| 麻豆国产精品va在线观看不卡| 亚洲一区成人| 久久久噜噜噜久久人人看| 99国产精品久久久久久久久久| 亚洲综合大片69999| 亚洲精品精选| 欧美在线播放视频| 亚洲一区在线免费观看| 久久久久青草大香线综合精品| 亚洲一级在线观看| 欧美大尺度在线| 久久久精品一品道一区| 欧美色综合天天久久综合精品| 久久综合久久综合久久| 欧美无乱码久久久免费午夜一区| 狂野欧美激情性xxxx欧美| 国产精品毛片a∨一区二区三区|国 | 亚洲激情av| 亚洲一区二区三区在线看| 日韩一级在线| 免费成人美女女| 久久综合给合久久狠狠狠97色69| 国产精品久久久久9999吃药| 亚洲福利视频专区| 狠狠色2019综合网| 午夜宅男久久久| 午夜国产一区| 国产精品国色综合久久| 亚洲精品国偷自产在线99热| 亚洲国产成人av好男人在线观看| 欧美在线高清| 久久久www成人免费精品| 国产精品一区二区久久| 在线一区二区三区做爰视频网站| 亚洲美女91| 欧美高清免费| 亚洲人成久久| 一区二区三区精品在线| 欧美精品一区二区三区在线播放| 亚洲高清av| 亚洲免费成人av| 欧美精品自拍偷拍动漫精品| 亚洲精选视频免费看| 亚洲一二三区精品| 国产精品午夜久久| 欧美一区二区视频97| 久久人人爽人人爽爽久久| 国产综合久久| 另类人畜视频在线| 亚洲欧洲精品一区二区三区 | 欧美一区二区三区久久精品茉莉花| 欧美午夜在线观看| 亚洲综合色丁香婷婷六月图片| 亚洲欧美影音先锋| 国产情侣一区| 蜜桃视频一区| 欧美日韩一区综合| 国产精品99久久久久久久久久久久| 亚洲视频一区二区免费在线观看| 欧美午夜精品久久久久久久| 亚洲一区二区免费| 久久免费视频网站| 亚洲精品激情| 国产精品久久久一区二区| 午夜精品三级视频福利| 欧美高清自拍一区| 亚洲图片在线观看| 国色天香一区二区| 欧美精品国产| 欧美一区二区网站| 91久久国产综合久久| 性xx色xx综合久久久xx| 影音先锋久久| 国产精品国产| 美女亚洲精品| 午夜精品短视频| 国外精品视频| 欧美日韩精品系列| 久久精品二区亚洲w码| 亚洲免费高清| 免费不卡在线视频| 亚洲综合国产激情另类一区| 在线免费观看日韩欧美| 国产精品sss| 久久久欧美精品sm网站| 99国产精品私拍| 欧美成人精品一区二区| 欧美一级一区| 一区二区三区精密机械公司| 激情欧美一区| 国产精品免费观看视频| 欧美电影电视剧在线观看| 欧美一区二区三区免费观看视频| 91久久精品久久国产性色也91| 久久久999精品免费| 亚洲欧美日韩区| 亚洲美女免费视频| 激情av一区| 国产视频观看一区| 国产精品久久久久久妇女6080| 欧美风情在线| 久久综合给合久久狠狠色 | 久久久久久9| 亚洲天堂偷拍| 亚洲免费电影在线| 亚洲日本理论电影| 亚洲福利专区| 亚洲电影自拍| 欧美国产一区在线| 免费视频一区| 美女精品网站| 久久婷婷影院| 久久全国免费视频| 久久综合伊人77777蜜臀| 久久精品国产亚洲5555| 午夜一区二区三视频在线观看| 亚洲神马久久| 亚洲天堂成人| 亚洲欧美日韩国产一区| 亚洲欧美日韩国产另类专区| 亚洲欧美电影在线观看| 亚洲一区二区三区中文字幕 | 亚洲精品视频二区| 亚洲精品一区二区三区婷婷月| 男人的天堂亚洲在线| 欧美freesex交免费视频| 久久成人免费日本黄色| 翔田千里一区二区| 国内精品视频一区| 国产中文一区二区| 国产在线不卡精品| 黄色成人在线免费| 亚洲电影免费观看高清完整版在线 | 91久久午夜| 亚洲人成亚洲人成在线观看| 亚洲三级免费电影| 中文在线资源观看网站视频免费不卡| 在线视频一区观看| 欧美一区二区视频免费观看| 久久久久一区二区三区| 欧美激情片在线观看| 日韩亚洲欧美在线观看| 亚洲欧美在线免费观看| 久久久亚洲欧洲日产国码αv|