Доброго времени суток. Необходимо наложить плоскую текстуру. работаю с 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]);
}