Текстура имеет только синий оттенок при использовании glTexImage2D - PullRequest
2 голосов
/ 15 февраля 2012

Я пытаюсь показать изображение с помощью glTexImage2D, я работаю с MFC, Visual C 6.0.
Здесь код:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

/* enable 2D texture mapping */
glEnable( GL_TEXTURE_2D );

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGB,
    800, 600,
    0, GL_RGB, GL_UNSIGNED_BYTE, BitmapBits);

static float v0[3] = { 0.0, 0.0, 0.0 };
static float v1[3] = { 0.0, 1.0, 0.0 };
static float v2[3] = { 1.0, 1.0, 0.0 };
static float v3[3] = { 1.0, 0.0, 0.0 };

static float t0[2] = { 0.0, 0.0 };
static float t1[2] = { 0.0, 1.0 };
static float t2[2] = { 1.0, 1.0 };
static float t3[2] = { 1.0, 0.0 };

glBegin( GL_QUADS );
    glTexCoord2f(0.0, 0.0);
    glVertex3f(0.0, 0.0, 0.0);
    glTexCoord2f(1.0, 0.0);
    glVertex3f(1.0, 0.0, 0.0);
    glTexCoord2f(1.0, 1.0);
    glVertex3f(1.0, 1.0, 0.0);
    glTexCoord2f(0.0, 1.0);
    glVertex3f(0.0, 1.0, 0.0);
glEnd();

glDisable( GL_TEXTURE_2D );

Я вижу только синий оттенок изображения.Загруженное изображение BitmapBits в порядке.
В чем может быть проблема?

1 Ответ

6 голосов
/ 15 февраля 2012

Возможно, вы захотите использовать GL_BGR_EXT / GL_BGR для формата , а не GL_RGB:

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGB,
    800, 600,
    0, GL_BGR, GL_UNSIGNED_BYTE, BitmapBits);

Или поменяйте местами байты перед загрузкой.

Поскольку вы используете текстуры NPOT, обязательно проверьте GL_ARB_texture_non_power_of_two или версию GL> = 2.0.

РЕДАКТИРОВАТЬ: Перед загрузкой убедитесь, что у вас glPixelStorei(GL_UNPACK_ALIGNMENT, 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...