Текстурирование openGL показывает только красный компонент текстуры - PullRequest
0 голосов
/ 11 января 2011

Я пытаюсь нанести текстуру на карту для одного многоугольника.Мое изображение читается правильно, но текстурируется только красная плоскость изображения.

Я делаю это в QGLWidget

Я проверил изображение после того, как оно прочитано, и онокомпоненты читаются правильно - то есть я получаю действительные значения для зеленой и синей плоскостей.

Вот код

</p> <pre><code>QImageReader *theReader = new QImageReader(); theReader->setFileName(imageFileName); QImage theImageRead = theReader->read(); if(theImageRead.isNull()) { validTile = NOT_VALID_IMAGE_FILE; return; } else { int newW = 1; int newH = 1; while(newW < theImageRead.width()) { newW *= 2; } while(newH < theImageRead.height()) { newH *= 2; } theImageRead = theImageRead.scaled(newW, newH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); // values checked in theImageRead are OK here glGenTextures(1,&textureObject); theTextureImage = QGLWidget::convertToGLFormat(theImageRead); // values checked in theTextureImage are OK here glBindTexture(GL_TEXTURE_2D, textureObject); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,newW, newH, 0, GL_RGBA, GL_UNSIGNED_BYTE,theTextureImage.bits() ); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR); glFlush(); validTile = VALID_TEXTURE; return; }

тогда я рисую так:

</p> <pre>{ glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D,textureTiles[tN]->getTextureObject() ); glBegin(GL_QUADS); glTexCoord2f(0.0,0.0); glVertex2f(textureTiles[tN]->lowerLeft.x(), textureTiles[tN]->lowerLeft.y()); glTexCoord2f(1.0,0.0); glVertex2f(textureTiles[tN]->lowerRight.x(), textureTiles[tN]->lowerRight.y()); glTexCoord2f(1.0,1.0); glVertex2f(textureTiles[tN]->upperRight.x(), textureTiles[tN]->upperRight.y()); glTexCoord2f(0.0,1.0); glVertex2f(textureTiles[tN]->upperLeft.x(), textureTiles[tN]->upperLeft.y()); glEnd(); glDisable(GL_TEXTURE_2D); }

Кто-нибудь видит что-нибудь, что может привести к тому, что моя текстура будет интерпретирована, как если бы это были значенияг, 0,0,1)?(r, g, b, a)?

QT 4.7.1, Ubuntu 10.04, openGl 2. что-то или другое

Заранее благодарим за любую помощь

Ответы [ 2 ]

7 голосов
/ 13 января 2011

У меня была похожая проблема. Я обнаружил, что мне пришлось «сбросить» цвет gl на белый и непрозрачный, прежде чем рисовать текстурированный квадрат, иначе цвета испортились. Как это:

...
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,textureTiles[tN]->getTextureObject() );

glColor4f(1.0, 1.0, 1.0, 1.0); // reset gl color

glBegin(GL_QUADS);
...
2 голосов
/ 11 января 2011

Это очень распространенная проблема. Во-первых, установите фильтры MIN / MAG на какое-то значение, поскольку по умолчанию используются мип-карты, а поскольку вы не предоставили мип-карты, текстура неполная.

Выборка неполной текстуры обычно дает белый цвет. Вызов glColor с текстурной средой по умолчанию умножит цвет вершины на цвет текстуры. Возможно, у вас есть что-то вроде glColor (красный) и красный * белый = красный, поэтому вы видите красный.

Чтобы исправить это, установите фильтры MIN / MAG на GL_LINEAR или GL_NEAREST.

...