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

时间:2017-05-08 18:08:47

标签: c# opengl opentk

我使用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();
}

任何人都可以给我一些关于我做错的提示吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

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

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