Все цвета текстуры зависят от цветного прямоугольника - OpenGL - PullRequest
0 голосов
/ 07 ноября 2018

В настоящее время я пытаюсь раскрасить некоторые прямоугольники, чтобы представить поля столкновения для моего игрового персонажа. Проблема заключается в цвете, который я пытаюсь применить ТОЛЬКО к прямоугольникам, которые применяются к моему персонажу и фоновым текстурам. Поэтому, если я рисую прямоугольник, используя следующий код:

void DrawRect(v2f MinPoint, v2f MaxPoint) 
    {
        glBegin(GL_QUADS);

        glColor3f(1.0f, 0.0f, 0.0f); //Red color
        glVertex2f(MaxPoint.x, MaxPoint.y);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(MinPoint.x, MaxPoint.y);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(MinPoint.x, MinPoint.y);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex2f(MaxPoint.x, MinPoint.y);

        glEnd();
        glFlush();
    }

Тогда сразу после нарисуйте мою текстуру фона:

void DrawBackground(ui32 TextureID, Drawable_Rect BackgroundImage, v2f MinUV, v2f MaxUV)
    {
        glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, TextureID);

        glBegin(GL_QUADS);
        glTexCoord2f(MinUV.x, MinUV.y);
        glVertex2f(BackgroundImage.BottomLeft.x, BackgroundImage.BottomLeft.y);

        glTexCoord2f(MaxUV.x, MinUV.y);
        glVertex2f(BackgroundImage.BottomRight.x, BackgroundImage.BottomRight.y);

        glTexCoord2f(MaxUV.x, MaxUV.y);
        glVertex2f(BackgroundImage.TopRight.x, BackgroundImage.TopRight.y);

        glTexCoord2f(MinUV.x, MaxUV.y);
        glVertex2f(BackgroundImage.TopLeft.x, BackgroundImage.TopLeft.y);

        glEnd();
        glFlush();

        glDisable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, 0);
    }

Тогда и мой прямоугольник И мой фон красного цвета, а не только мой прямоугольник. Почему цвет применяется и к моему прямоугольнику, и к моей текстуре?

1 Ответ

0 голосов
/ 07 ноября 2018

Если текстурирование включено, то по умолчанию цвет текселя умножается на текущий цвет, потому что по умолчанию режим текстурной среды (GL_TEXTURE_ENV_MODE) равен GL_MODULATE. См glTexEnv.

Это приводит к тому, что цвет текстур текстуры «смешивается» с последним цветом, который вы установили с помощью glColor3f:

Установите «белый» цвет перед рендерингом текстуры, чтобы решить вашу проблему:

glColor3f(1.0f, 1.0f, 1.0f); 

Аналогично вы можете изменить режим среды на GL_REPLACE, вместо этого:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
...