Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2013, 17:13   #1
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию OpenGL и Qt

Почему программа не работает???
Компилируется без ошибок, а запускаться не хочет!!!
Код программы:

mainwindow.h

Код:
#include <QMainWindow>
#include <GL/glut.h>
#include <GL/glu.h>
#include <QTimer>
#include <QGLWidget>

class OpenGLClass : public  QGLWidget {
    Q_OBJECT
private:
    bool light;
    GLfloat xrot;
    GLfloat yrot;
    GLfloat xspeed;
    GLfloat yspeed;
    GLfloat z;
    GLfloat LightAmbient[4];
    GLfloat LightDiffuse[4];
    GLfloat LightPosition[4];
    GLuint filter;
    GLuint texture[3];
protected:
    virtual void initializeGL();
    virtual void resizeGL(int nWidth, int nHeight);
    virtual void paintGL();
    void keyPressEvent(QKeyEvent * pe);
public:
    void LoadTextures();
    OpenGLClass(QWidget * pwgt = 0);
public slots:
    void change();
};
main.cpp

Код:
#include <QApplication>
#include "mainwindow.h"

int main(int argc, char** argv) {
    QApplication app(argc, argv);
    OpenGLClass gl;
    gl.resize(400, 400);
    gl.show();
    return app.exec();
}
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 06.09.2013, 17:14   #2
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

mainwindow.cpp
Код:
#include "mainwindow.h"
#include <QKeyEvent>
#include <QTimer>
#include <GL/glut.h>
#include <GL/glu.h>

OpenGLClass::OpenGLClass(QWidget * pwgt) :
    xrot(0), yrot(0), xspeed(0), yspeed(0), z(-5.0f) {
    LightAmbient[0] = 0.5f;
    LightAmbient[1] = 0.5f;
    LightAmbient[2] = 0.5f;
    LightAmbient[3] = 1.0f;


    LightDiffuse[0] = 1.0f;
    LightDiffuse[1] = 1.0f;
    LightDiffuse[2] = 1.0f;
    LightDiffuse[3] = 1.0f;

    LightPosition[0] = 0.0f;
    LightPosition[1] = 0.0f;
    LightPosition[2] = 2.0f;
    LightPosition[3] = 1.0f;

    QTimer * timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(change()));
    timer -> start(20);
}

void OpenGLClass::change() {
    xrot += xspeed;
    yrot += yspeed;
    updateGL();
}

void OpenGLClass::resizeGL(int nWidth, int nHeight) {
    glViewport(0, 0, (GLint)nWidth, (GLint)nHeight);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    gluPerspective(45.0f, (GLfloat)nWidth / (GLfloat)nHeight, 0.1f, 100.0f);
    glMatrixMode(GL_MODELVIEW);
}

void OpenGLClass::LoadTextures() {
    QImage im = QImage("images.jpeg");

    if(!im.isNull()) {
        glGenTextures(3, &texture[0]);
        glBindTexture(GL_TEXTURE_2D, texture[0]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, im.width(), im.height(), 0,
                     GL_RGBA, GL_UNSIGNED_BYTE, im.bits());

        glBindTexture(GL_TEXTURE_2D, texture[1]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, im.width(), im.height(), 0,
                     GL_RGBA, GL_UNSIGNED_BYTE, im.bits());

        glBindTexture(GL_TEXTURE_2D, texture[2]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
        gluBuild2DMipmaps(GL_TEXTURE_2D, 3, im.width(), im.height(), GL_RGBA, GL_UNSIGNED_BYTE, im.bits());
    }
}

void OpenGLClass::initializeGL() {
    LoadTextures();

    glEnable(GL_TEXTURE_2D);
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

    glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
    glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);
    glEnable(GL_LIGHT0);
}
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 06.09.2013, 17:15   #3
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

mainwindow.cpp
Код:
void OpenGLClass::paintGL() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    glTranslatef(0.0f, 0.0f, z);
    glRotatef(xrot, 1.0f, 0.0f, 0.0f);
    glRotatef(yrot, 0.0f, 1.0f, 0.0f);
    glBindTexture(GL_TEXTURE_2D, texture[filter]);

    glBegin(GL_QUADS);
      glNormal3f(0.0f, 0.0f, 1.0f);
      glTexCoord2f(0.0f, 0.0f);  glVertex3f(-1.0f, -1.0f, 1.0f);
      glTexCoord2f(1.0f, 0.0f);  glVertex3f(1.0f, -1.0f, 1.0f);
      glTexCoord2f(1.0f, 1.0f);  glVertex3f(1.0f, 1.0f, 1.0f);
      glTexCoord2f(0.0f, 1.0f);  glVertex3f(-1.0f, 1.0f, 1.0f);

      glNormal3f(0.0f, 0.0f, -1.0f);
      glTexCoord2f(1.0f, 0.0f);  glVertex3f(-1.0f, -1.0f, -1.0f);
      glTexCoord2f(1.0f, 1.0f);  glVertex3f(-1.0f, 1.0f, -1.0f);
      glTexCoord2f(0.0f, 1.0f);  glVertex3f(1.0f, 1.0f, -1.0f);
      glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f);

      glNormal3f(0.0f, 1.0f, 0.0f);
      glTexCoord2f(0.0f, 1.0f);  glVertex3f(-1.0f, 1.0f, -1.0f);
      glTexCoord2f(0.0f, 0.0f);  glVertex3f(-1.0f, 1.0f, 1.0f);
      glTexCoord2f(1.0f, 0.0f);  glVertex3f(1.0f, 1.0f, 1.0f);
      glTexCoord2f(1.0f, 1.0f);  glVertex3f(1.0f, 1.0f, -1.0f);

      glNormal3f(0.0f, -1.0f, 0.0f);
      glTexCoord2f(1.0f, 1.0f);  glVertex3f(-1.0f, -1.0f, -1.0f);
      glTexCoord2f(0.0f, 1.0f);  glVertex3f(1.0f, -1.0f, -1.0f);
      glTexCoord2f(0.0f, 0.0f);  glVertex3f(1.0f, -1.0f, 1.0f);
      glTexCoord2f(1.0f, 0.0f);  glVertex3f(-1.0f, -1.0f, 1.0f);

      glNormal3f(1.0f, 0.0f, 0.0f);
      glTexCoord2f(1.0f, 0.0f);  glVertex3f(1.0f, -1.0f, -1.0f);
      glTexCoord2f(1.0f, 1.0f);  glVertex3f(1.0f, 1.0f, -1.0f);
      glTexCoord2f(0.0f, 1.0f);  glVertex3f(1.0f, 1.0f, 1.0f);
      glTexCoord2f(0.0f, 0.0f);  glVertex3f(1.0f, -1.0f, 1.0f);

      glNormal3f(-1.0f, 0.0f, 0.0f);
      glTexCoord2f(0.0f, 0.0f);  glVertex3f(-1.0f, -1.0f, -1.0f);
      glTexCoord2f(1.0f, 0.0f);  glVertex3f(-1.0f, -1.0f, 1.0f);
      glTexCoord2f(1.0f, 1.0f);  glVertex3f(-1.0f, 1.0f, 1.0f);
      glTexCoord2f(0.0f, 1.0f);  glVertex3f(-1.0f, 1.0f, -1.0f);
    glEnd();
}

void OpenGLClass::keyPressEvent(QKeyEvent * pe) {
    switch(pe -> key()) {
    case Qt::Key_L:
            light = !light;
            if(!light)
                glDisable(GL_LIGHTING);
            else
                glEnable(GL_LIGHTING);
            break;
    case Qt::Key_F:
        filter += 1;
        if(filter > 2)
            filter = 0;
        break;
    case Qt::Key_W:
        z -= 0.02f;
        break;
    case Qt::Key_S:
        z += 0.02f;
        break;
    case Qt::Key_Up:
        xspeed -= 0.01f;
        break;
    case Qt::Key_Down:
        xspeed += 0.01f;
        break;
    case Qt::Key_Right:
        yspeed += 0.01f;
        break;
    case Qt::Key_Left:
        yspeed -= 0.01f;
        break;
}

    updateGL();
}
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Qt+OpenGL. Qt "не видит" функции OpenGL EnterFix Qt и кроссплатформенное программирование С/С++ 4 29.01.2013 18:59
OpenGL+Qt SAMOUCHKA Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 27.11.2012 21:56
OpenGl Valera Помощь студентам 3 09.11.2011 23:49
C++ и OpenGL likstalkera Visual C++ 26 06.07.2011 13:48
OpenGl Freer Помощь студентам 1 25.05.2009 17:57