OpenTK绘制透明圆
OpenTK draw transparent Circle
我想在 C# 中用 OpenGL 绘制一个简单的圆,但我只得到这个:
我尝试了混合功能,但没有用。
我的代码:
public static void DrawCircle(float x, float y, float radius, Color4 c)
{
GL.Enable(EnableCap.Blend);
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
GL.Begin(PrimitiveType.TriangleFan);
GL.Color4(c);
GL.Vertex2(x, y);
for (int i = 0; i < 360; i++)
{
GL.Vertex2(x + Math.Cos(i) * radius, y + Math.Sin(i) * radius);
}
GL.End();
GL.Disable(EnableCap.Blend);
}
如果你想画一个透明的圆圈,那么你必须使用小于255的alpha通道,当你设置GL.Color4
。
GL.Color4( red, green, blue, 127 ); // alpha = 127 for semi-transparent
但是如果你想画一个圆的轮廓,那么你必须改变原始类型:
原始类型PrimitiveType.TriangleFan
会绘制一个区域。使用PrimitiveType.LineLoop
画出轮廓
参见 PrimitiveType and OpenGL Primitive。
我想在 C# 中用 OpenGL 绘制一个简单的圆,但我只得到这个:
我尝试了混合功能,但没有用。 我的代码:
public static void DrawCircle(float x, float y, float radius, Color4 c)
{
GL.Enable(EnableCap.Blend);
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
GL.Begin(PrimitiveType.TriangleFan);
GL.Color4(c);
GL.Vertex2(x, y);
for (int i = 0; i < 360; i++)
{
GL.Vertex2(x + Math.Cos(i) * radius, y + Math.Sin(i) * radius);
}
GL.End();
GL.Disable(EnableCap.Blend);
}
如果你想画一个透明的圆圈,那么你必须使用小于255的alpha通道,当你设置GL.Color4
。
GL.Color4( red, green, blue, 127 ); // alpha = 127 for semi-transparent
但是如果你想画一个圆的轮廓,那么你必须改变原始类型:
原始类型PrimitiveType.TriangleFan
会绘制一个区域。使用PrimitiveType.LineLoop
画出轮廓
参见 PrimitiveType and OpenGL Primitive。