首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenTK (OpenGL)不会绘制大多数原语

OpenTK (OpenGL)不会绘制大多数原语
EN

Stack Overflow用户
提问于 2011-01-10 18:28:55
回答 1查看 3.6K关注 0票数 1

我最近开始在C#中使用OpenTK来玩一个简单的游戏,但是我似乎不能画出像点这样的基本形状,我尝试了很多东西,但我还是弄不明白。

我的绘图例程当前如下所示:

代码语言:javascript
复制
public static void RenderLoop(object Sender, OpenTK.FrameEventArgs Fea)
{
    OpenTK.Graphics.OpenGL.GL.Clear(OpenTK.Graphics.OpenGL.ClearBufferMask.ColorBufferBit | OpenTK.Graphics.OpenGL.ClearBufferMask.DepthBufferBit);

    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.PointSmooth);
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.Blend);
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.DepthTest);
    OpenTK.Graphics.OpenGL.GL.Disable(OpenTK.Graphics.OpenGL.EnableCap.CullFace);

    OpenTK.Graphics.OpenGL.GL.Begin(OpenTK.Graphics.OpenGL.BeginMode.Points);
    OpenTK.Graphics.OpenGL.GL.Color3(1f, 1f, 1f);
    OpenTK.Graphics.OpenGL.GL.Vertex2(50, 50);
    OpenTK.Graphics.OpenGL.GL.End();


    OpenTK.Graphics.GraphicsContext.CurrentContext.SwapBuffers();
}

初始化是这样的:

代码语言:javascript
复制
    public static bool Init()
    {
        try
        {
            //1200,850

            GameWnd = new GameWindow(1200, 850, new GraphicsMode(new ColorFormat(32), 0), "OpenTK - OpenGL Renderer", GameWindowFlags.Default, DisplayDevice.Default,3,0,GraphicsContextFlags.Default);

            GL.Disable(EnableCap.DepthTest); //Disable Z-Buffer, 2D Rendering
            GL.Disable(EnableCap.CullFace);
            GL.Enable(EnableCap.Texture2D);
            GL.Enable(EnableCap.Blend);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
            GL.PixelStore(PixelStoreParameter.UnpackAlignment, 1);
            GL.RenderMode(RenderingMode.Render);

            GL.MatrixMode(MatrixMode.Projection);

            return true;
        }
        catch (Exception ex)
        {
            ErrorHandler.Err(ex, "Renderer has failed to initialize");
            return false;
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-11 00:18:47

我认为问题正如Marcus所暗示的那样;您没有为任何有用的东西设置投影矩阵(并且根本没有为任何东西设置模型视图矩阵)。如果保留为标识,(50,50)将位于视图窗口之外。我建议您查找glOrtho和glFrustum的OpenTK映射。

假设您有一个宽度按高度大小的视口,下面将设置一个视口,其中(0,0)是左上角,(a,b)是右侧的a像素,从那里往下是b像素:

代码语言:javascript
复制
glOrthof(0, width, height, 0, 1, 10);

虽然这会使近剪裁平面与查看器的深度为1(而远剪裁平面的深度为10),因此您可能还需要在初始化时执行以下操作:

代码语言:javascript
复制
glMatrixMode(GL_MODELVIEW);
glTranslatef(0.0f, 0.0f, -5.5f);

将在二维中指定的任何未来几何图形移动到恰好位于两个剪裁平面中间的位置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4645767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档