代码之家  ›  专栏  ›  技术社区  ›  Noah Heber

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

  •  1
  • Noah Heber  · 技术社区  · 9 年前

        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));
    

    正如预期的那样,如果没有其他正在绘制的内容,它将在屏幕中央绘制一个具有backdropTextureID的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中绘制彩色四边形后,如何阻止纹理变暗?

    1 回复  |  直到 9 年前
        1
  •  0
  •   Noah Heber    9 年前

    对于任何有这个问题的人,我找到了答案。与我给纹理的彩色四边形的颜色相同。你只需要添加

    GL.Color3(Color.Transparent);
    

    到纹理绘制方法的开始。

    推荐文章