在 C# OpenTK 中绘制彩色四边形后,如何阻止纹理变暗?

How do I stop a texture from darkening after drawing a colored quad in 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 id 为 backdropTextureID 的纹理。但是,当我也绘制彩色四边形时,纹理变暗了。这是我用来绘制四边形的方法:

    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 中绘制彩色四边形后如何阻止纹理变暗?

对于遇到此问题的任何人,我已经解决了。与我赋予纹理的彩色四边形相同的颜色。你只需要添加

GL.Color3(Color.Transparent);

纹理绘制方法开始