Russian Qt Forum
Апрель 26, 2024, 16:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt4 + текстуры  (Прочитано 2333 раз)
ti0
Новичок

Offline Offline

Сообщений: 38


Просмотр профиля
« : Август 30, 2014, 18:09 »

Уже второй день бьюсь с текстурами, но ничего не выходит. В смысле не отображаются.
Делал по примерам. Ниже код.
Код:
#define GL_CLAMP_TO_EDGE 0x812F

OpenGLWidget::OpenGLWidget(QWidget *parent) :
    QGLWidget(parent)
{
    setMouseTracking(true);

    QSettings settings("settings.conf", QSettings::IniFormat);
    Scale_frequency = settings.value(VER + "GUI/Scale_frequency", 0.395734).toFloat();
    Scale_dBm = settings.value(VER + "GUI/Scale_dBm", 34.4251).toFloat();
    Translate_frequency = settings.value(VER + "GUI/Translate_frequency", -3.72921).toFloat();
    Translate_dBm = settings.value(VER + "GUI/Translate_dBm", 12.1542).toFloat();

    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(updt()));
    timer->start(40.0);
}

OpenGLWidget::~OpenGLWidget()
{
 
}

void OpenGLWidget::initializeGL()
{
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    qglClearColor(QColor(100.0, 100.0, 100.0));
    // Light values and coordinates
    glEnable(GL_DEPTH_TEST); // Hidden surface removal
    // Сглаживание точек
    glEnable(GL_POINT_SMOOTH);
    glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
   
    // Generate texture
    textureID[0] = bindTexture(QPixmap(QString("69383_1310988233_picture1.jpg")), GL_TEXTURE_2D);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
    glEnable(GL_TEXTURE_2D);
}

void OpenGLWidget::resizeGL(int nWidth, int nHeight)
{
    Client_Width = nWidth;
    Client_Height = nHeight;
    glViewport(0, 0, Client_Width, Client_Height);//set field of view
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, Client_Width, 0, Client_Height, 1, - 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void OpenGLWidget::paintGL()
{
    qglClearColor(QColor(100.0, 100.0, 100.0));
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, Client_Width, 0, Client_Height, 1, -1); //
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glColor4f(1.0, 1.0, 1.0, 1.0);
    glBindTexture(GL_TEXTURE_2D, textureID[0]);
    glBegin (GL_QUADS);
        glTexCoord2f(0.0, 0.0); glVertex2f (0.0,          0.0);
        glTexCoord2f(1.0, 0.0); glVertex2f (128.0,       0.0);
        glTexCoord2f(1.0, 1.0); glVertex2f (128.0,       128.0);
        glTexCoord2f(0.0, 1.0); glVertex2f (0.0,          128.0);
    glEnd();

    swapBuffers();
}
Рисунок 69383_1310988233_picture1.jpg лежит вместе с исполняемым файлом.
Записан
mitrich
Гость
« Ответ #1 : Август 31, 2014, 10:51 »

Картинка просто не грузится. Полный путь к рисунку указывай (напр., узнав каталог исп. файла ф-цией QCoreApplication::applicationDirPath).

И ещё, на всякий случай:
Когда ты рисуешь свой квадрат, делаешь обход вершин по часовой стрелке, в то время как по умолчанию в OpenGL включен обход против часовой. Сейчас работает, но включишь удаление невидимых задних граней (glEnable(GL_CULL_FACE)) - опять перестанет работать как надо. Так что либо включи обход по часовой (glFrontFace(GL_CW) в initializeGL()), либо задавай вершины против часовой стрелки.
« Последнее редактирование: Август 31, 2014, 11:02 от mitrich » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.