如何在c# OpenTK中绘制彩色四边形后阻止纹理变暗?
本文关键字:纹理 四边形 彩色 OpenTK 绘制 | 更新日期: 2023-09-27 18:13:18
我正在创建自己的游戏图像引擎。我也考虑过使用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窗体坐标系统,其中向下是y++。我这样调用它:
Texture(backdropTextureID, new Vector2(1f, 1f), new Vector2(-0.5f, -0.5f), new Vector2(1f, 1f), new Vector2(0f, 0f));
如预期的那样,如果没有其他绘制,它将在屏幕中央绘制具有backdroptexturid的GL id的纹理。当我画一个彩色的四边形时,纹理变暗了。这是我用来绘制四边形的方法:
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);
到纹理绘制方法的开始