繁体   English   中英

如何使用OpenTK绘制三角形?

[英]How do I draw a triangle using OpenTK?

我不确定为什么这个代码不是简单地绘制三角形到屏幕(正交)。 我正在使用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个单位。

为什么这段代码没有绘制三角形?

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

GL.Translate(0,0,10);

它实际上将其翻译在屏幕的“前方”。

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

换句话说, GL.Translate(0,0,-10); GL.Translate(0,0,10); 会把它放在后面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM