Название: Помогите с наложением текстуры Отправлено: 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]); } |