如何使用 OpenTK 绘制三角形

本文关键字:三角形 绘制 OpenTK 何使用 | 更新日期: 2023-09-27 17:56:45

我不确定为什么这段代码不是简单地绘制一个三角形来筛选(正字法)。我正在使用OpenTK 1.1,它与OpenGL 1.1相同。

List<Vector3> simpleVertices = new List<Vector3>();
simpleVertices.Add(new Vector3(0,0,0));
simpleVertices.Add(new Vector3(100,0,0));
simpleVertices.Add(new Vector3(100,100,0));
GL.MatrixMode(All.Projection);
GL.LoadIdentity();
GL.MatrixMode(All.Projection);
GL.Ortho(0, 480, 320, 0,0,1000);
GL.MatrixMode(All.Modelview);
GL.LoadIdentity();
GL.Translate(0,0,10);
unsafe
{
  Vector3* data = (Vector3*)Marshal.AllocHGlobal(
                        Marshal.SizeOf(typeof(Vector3)) * simpleVertices.Count);
  for(int i = 0; i < simpleVertices.Count; i++)
  {
    ((Vector3*)data)[i] = simpleVertices[i];
  }
  GL.VertexPointer(3, All.Float, sizeof(Vector3), new IntPtr(data));
  GL.DrawArrays(All.Triangles, 0, simpleVertices.Count);
}

该代码在绘制函数中每更新周期执行一次。我认为我正在做的(但显然不是)是创建一组位置顶点以形成一个三角形,并在相机前绘制 10 个单位。

为什么这段代码不画三角形?

如何使用 OpenTK 绘制三角形

在 OpenGL 中,Z 轴指向屏幕外,所以当你写

GL.Translate(0,0,10);

它实际上将其翻译为屏幕的"前面"。

现在,您要GL.Ortho的最后两个参数是 0,1000。这意味着将显示 0 到 1000 之间的所有内容 负 Z 方向( = 在相机前 )显示。

换句话说,GL.Translate(0,0,-10);会把你的物体放在相机前面,而GL.Translate(0,0,10);会把它放在后面。