【发布时间】: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构造函数中)。 -
哦等等..我现在也没有指定颜色,我使用了立即模式。很抱歉造成混乱