Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: argentum от Июнь 03, 2011, 21:36



Название: Помогите с наложением текстуры
Отправлено: argentum от Июнь 03, 2011, 21:36
Доброго времени суток. Необходимо наложить плоскую текстуру. работаю с 2D графикой. вариантов считывания и наложения  хватает, но ни один не работает. Если не сложно - гляньте плиз код и скажите что - не так, и что изменить??? привожу текст glwidget.cpp:


Цитировать
#include "glwidget.h"
#include "cell.h"
#include <QImage>
#include <QTGui>

GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent)
{

}

void GLWidget::initializeGL()
{
    glClearColor(1.0, 1.0, 1.0, 0);
    loadTextures();
    glEnable(GL_TEXTURE_2D);
}

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

    cell_size = w/8;
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, w, 0, h); // set origin to bottom left corner
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
void GLWidget::loadTextures()
{

    QImage im = QImage("rookw.png");
          if (!im.isNull())
          {
              glGenTextures(1, &text[0]);
              glBindTexture(GL_TEXTURE_2D, text[0]);
              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, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, im.bits());
          }
    else
          {
              QMessageBox::warning(this, "ERROR", "errrrr", 0, 1);
          }
}
void GLWidget::paint_cell(cell cells)
{
   // GLint k;

    glBindTexture(GL_TEXTURE_2D, text[0]);
    glBegin(GL_QUADS);
        glTexCoord2f(0.0, 0.0);         glVertex2f(cells.v1.x, cells.v1.y);
        glTexCoord2f(0.0, 1.0);         glVertex2f(cells.v2.x, cells.v2.y);
        glTexCoord2f(1.0, 1.0);         glVertex2f(cells.v3.x, cells.v3.y);
        glTexCoord2f(1.0, 0.0);         glVertex2f(cells.v4.x, cells.v4.y);
    glEnd();
    glDisable(GL_TEXTURE_2D);
}

void GLWidget::paintGL()
{

    int count = 0;
    cell cells[32];
    GLfloat temp_x = 0.0, temp_y = 0.0;
    for (int i = 0; i < 8; i++)
    {
        if (i%2 == 0)temp_x = 0.0;
        else temp_x = cell_size;
        for (int j = 0; j < 4; j++)
        {
            cells[count].v1.x = temp_x;             cells[count].v1.y = temp_y;
            cells[count].v2.x = temp_x;             cells[count].v2.y = temp_y + cell_size;
            cells[count].v3.x = temp_x + cell_size; cells[count].v3.y = temp_y + cell_size;
            cells[count].v4.x = temp_x + cell_size; cells[count].v4.y = temp_y;
            count++;
            temp_x += cell_size*2;

        }
        temp_y += cell_size;


    }
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0,0,0);
    for(int k = 0; k < 1; k++)paint_cell(cells[k]);

}