Как остановить потемнение текстуры после рисования цветного квадрата в C# OpenTK?

Я создаю свой собственный игровой графический движок. Я хотел использовать других, таких как Unity, но они не соответствуют моим потребностям. В любом случае, я использую OpenTK (это 2D-игра), и проблема в том, что когда я рисую текстуру на экране, а затем рисую четырехугольник на экране, цвет темнеет на текстуре. Вот метод, который я использую для рисования текстуры:

    public void Texture(int ID, Vector2 size, Vector2 pos, Vector2 texSize, Vector2 texPos)
    {
        pos.Y = -pos.Y;

        GL.Enable(EnableCap.Texture2D);
        GL.BindTexture(TextureTarget.Texture2D, ID);
        GL.Begin(PrimitiveType.Quads);

        GL.TexCoord2(texPos.X, texPos.Y);
        GL.Vertex2(pos.X, pos.Y);

        GL.TexCoord2(texPos.X + texSize.X, texPos.Y);
        GL.Vertex2(pos.X + size.X, pos.Y);

        GL.TexCoord2(texPos.X + texSize.X, texPos.Y + texSize.Y);
        GL.Vertex2(pos.X + size.X, pos.Y - size.Y);

        GL.TexCoord2(texPos.X, texPos.Y + texSize.Y);
        GL.Vertex2(pos.X, pos.Y - size.Y);

        GL.End();
    }

Я инвертирую Y, потому что я привык к системе координат Windows Forms, где спуск - это y++. Я называю это так:

Texture(backdropTextureID, new Vector2(1f, 1f), new Vector2(-0.5f, -0.5f), new Vector2(1f, 1f), new Vector2(0f, 0f));

Как и ожидалось, если больше ничего не рисуется, он рисует текстуру с GL-идентификатором backgroundTextureID в центре экрана. Когда я рисую цветной квадратик, текстура темнеет. Вот метод, который я использую для рисования четырехугольника:

    public void Quad(Vector2 pos1, Vector2 pos2, Vector2 pos3, Vector2 pos4, Color color1, Color color2, Color color3, Color color4)
    {
        GL.Disable(EnableCap.Texture2D);
        pos1.Y = -pos1.Y;
        pos2.Y = -pos2.Y;
        pos3.Y = -pos3.Y;
        pos4.Y = -pos4.Y;

        GL.Begin(PrimitiveType.Quads);

        GL.Color3(color1);
        GL.Vertex2(pos1);

        GL.Color3(color2);
        GL.Vertex2(pos2);

        GL.Color3(color3);
        GL.Vertex2(pos3);

        GL.Color3(color4);
        GL.Vertex2(pos4);

        GL.End();
    }

Снова инвертируем Y по причине, указанной выше. Также обратите внимание, что я включаю EnableCap.Texture2D в методе рисования текстуры и отключаю его, когда рисую цветной квад. Я вызываю метод quad следующим образом:

Quad(new Vector2(0.0f, 0.0f), new Vector2(0.5f, 0.0f), new Vector2(0.5f, 0.5f), new Vector2(0.0f, 0.5f), Color.Gray, Color.Gray, Color.Gray, Color.Gray);

Если кто-нибудь может мне помочь, заранее спасибо. В основном: Как мне остановить потемнение текстуры после рисования цветного квадрата в C# OpenTK?

1 ответ

Решение

Для тех, у кого есть эта проблема, я понял это. Тот же цвет, который я давал цветному квадрату, я давал текстуре. Вам просто нужно добавить

GL.Color3(Color.Transparent);

к началу метода рисования текстуры.

Другие вопросы по тегам