C# OpenTK - 不渲染的简单示例

Posted

技术标签:

【中文标题】C# OpenTK - 不渲染的简单示例【英文标题】:C# OpenTK - simple example not rendering 【发布时间】:2017-05-08 18:08:47 【问题描述】:

我正在使用 OpenTK 创建一个图形引擎,但它不想绘制任何东西。 清除屏幕也可以,也可以交换缓冲区,但是当我尝试使用顶点数组或旧版 OpenGL 绘制矩形时,它将无法正常工作。

我已经在这个小测试程序中重现了这个问题:

private static GameWindow window;
private static int vao;
private static int vbo;

static void Main(string[] args)

    window = new GameWindow();
    window.Load += Window_Load;
    window.RenderFrame += Window_RenderFrame;
    window.Run();


private static void Window_Load(object sender, EventArgs e)

    vao = GL.GenVertexArray();
    GL.BindVertexArray(vao);
    vbo = GL.GenBuffer();
    GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
    GL.BufferData(BufferTarget.ArrayBuffer, new IntPtr(3), new float[] 
        -0.5f, -0.5f, 0f,
        0.5f, -0.5f, 0f,
        0.5f, 0.5f, 0f,
        0.5f, 0.5f, 0f,
        -0.5f, 0.5f, 0f,
        -0.5f, -0.5f, 0f
    , BufferUsageHint.StaticDraw);
    GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, 0);


private static void Window_RenderFrame(object sender, FrameEventArgs e)

    GL.ClearColor(1, 0, 0, 1);
    GL.Clear(ClearBufferMask.ColorBufferBit);
    GL.DrawArrays(PrimitiveType.Triangles, 0, 6);
    window.SwapBuffers();

谁能告诉我我做错了什么?

【问题讨论】:

提示:你没有告诉它顶点是什么颜色。 我认为我不需要......它在没有指定颜色的情况下工作。不过我会尝试一下,之前在 Java 中工作过 好的,现在可以了,但不是在我的原始代码中.. 调查时间。你还能把它作为答案发布吗? 要绘制顶点,渲染管道需要知道它们是什么颜色以及它们在空间中的位置,以及世界、投影和视图矩阵,以便将它们映射到 2D 视口。您引用的代码除了顶点位置之外没有设置任何东西;我的猜测是,在不同平台上,一些理所当然的事情并没有按照你期望的方式发生(例如在 GameWindow 构造函数中)。 哦等等..我现在也没有指定颜色,我使用了立即模式。很抱歉造成混乱 【参考方案1】:

解决方案是使上下文向前兼容。

【讨论】:

【参考方案2】:

一个简单的渲染管道需要一些基本信息来绘制顶点:

它需要知道它们在太空中的位置 它需要知道它们的颜色或材质 它需要知道将 3D 空间映射到 2D 视口的矩阵

除了顶点位置之外,您的代码没有指定任何内容。您的三角形可能不可见的原因有很多:

顶点顺序错误且背面剔除已打开 顶点颜色与背景颜色相同 三角形位于视图体积之外

【讨论】:

...我刚刚做了一些研究,结果发现我的记忆有问题;那段是错误的。正在编辑... 好的,谢谢你的帮助 :) 很遗憾,无法解决问题,因为我需要使用现代 OpenGL 解决了。上下文需要向前兼容

以上是关于C# OpenTK - 不渲染的简单示例的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBO 的 OpenTK 渲染三角形

OpenGL延迟渲染:点光源实现

使用 openTK 绘图,保存到文件,显示在屏幕上

淘汰赛不渲染 - 简单示例

OpenGL:如何设置 OpenGL 只渲染到 FBO,不输出到屏幕/窗口/控件?

什么是使用 Pango 使用 FreeType 字体将文本渲染为图像的简单示例?