opentk中绘制的四边形,线,点不显示正确
Posted
技术标签:
【中文标题】opentk中绘制的四边形,线,点不显示正确【英文标题】:Drawn quads, lines, points in opentk don't show up right 【发布时间】:2014-01-22 17:30:48 【问题描述】:我现在已经在我的 2d 游戏引擎中绘制了与 OpenTK 一起使用的精灵。我遇到的唯一问题是带有 opengl 的自定义绘制对象(除了精灵之外的任何东西)显示为背景颜色。示例:
我在这里画一条 2.4f 宽的黑线。示例中还有一个四边形和一个点,但它们不会与实际可见的任何内容重叠。这条线与洋红色精灵重叠,但颜色是错误的。我的问题是:我是缺少 OpenGL 功能,还是做错了什么可怕的事情?
这些是我的绘图项目示例:(如果对代码有疑问,您也可以在https://github.com/Villermen/HatlessEngine找到该项目)
初始化:
Window = new GameWindow(windowSize.Width, windowSize.Height);
//OpenGL initialization
GL.Enable(EnableCap.PointSmooth);
GL.Hint(HintTarget.PointSmoothHint, HintMode.Nicest);
GL.Enable(EnableCap.LineSmooth);
GL.Hint(HintTarget.LineSmoothHint, HintMode.Nicest);
GL.Enable(EnableCap.Blend);
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
GL.ClearColor(Color.Gray);
GL.Enable(EnableCap.Texture2D);
GL.Enable(EnableCap.DepthTest);
GL.DepthFunc(DepthFunction.Lequal);
GL.ClearDepth(1d);
GL.DepthRange(1d, 0d); //does not seem right, but it works (see it as duct-tape)
每个抽奖周期:
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
//reset depth and color to be consistent over multiple frames
DrawX.Depth = 0;
DrawX.DefaultColor = Color.Black;
foreach(View view in Resources.Views)
CurrentDrawArea = view.Area;
GL.Viewport((int)view.Viewport.Left * Window.Width, (int)view.Viewport.Top * Window.Height, (int)view.Viewport.Right * Window.Width, (int)view.Viewport.Bottom * Window.Height);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(view.Area.Left, view.Area.Right, view.Area.Bottom, view.Area.Top, -1f, 1f);
GL.MatrixMode(MatrixMode.Modelview);
//drawing
foreach (LogicalObject obj in Resources.Objects)
//set view's coords for clipping?
obj.Draw();
GL.Flush();
Window.Context.SwapBuffers();
DrawX.Line:
public static void Line(PointF pos1, PointF pos2, Color color, float width = 1)
RectangleF lineRectangle = new RectangleF(pos1.X, pos1.Y, pos2.X - pos1.X, pos2.Y - pos1.Y);
if (lineRectangle.IntersectsWith(Game.CurrentDrawArea))
GL.LineWidth(width);
GL.Color3(color);
GL.Begin(PrimitiveType.Lines);
GL.Vertex3(pos1.X, pos1.Y, GLDepth);
GL.Vertex3(pos2.X, pos2.Y, GLDepth);
GL.End();
编辑:如果我之前禁用 blendcap 并在绘制线条后启用它,它会以正确的颜色显示,但我必须将它混合。
【问题讨论】:
愚蠢的问题:你检查过你尝试使用的颜色是你真正想要的颜色吗? 是的,我什至用 GL.Color4 调用替换了函数中的颜色变量 【参考方案1】:我忘记在纹理绘制方法中取消绑定纹理...
GL.BindTexture(TextureTarget.Texture2D, 0);
【讨论】:
实际上,这只会使线条看起来正确。四边形和点仍然不可见,需要禁用深度测试才能显示...以上是关于opentk中绘制的四边形,线,点不显示正确的主要内容,如果未能解决你的问题,请参考以下文章