c# - 如何使用 OpenTK 绘制三角形?

标签 c# opengl xamarin.ios monodevelop opentk

我不确定为什么这段代码不是简单地在屏幕上绘制一个三角形(正交)。我正在使用与 OpenGL 1.1 相同的 OpenTK 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) ; 会把它放在后面。

关于c# - 如何使用 OpenTK 绘制三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6028565/

相关文章:

c# - 何时使用 List<T>、IEnumerable<T> 和 ArrayList

qt - 在 QML 中控制带纹理的 3D 对象不透明度

opengl - 对于GLSL片段着色器Intel HD4000上的中等大输入,sin(x)仅返回4个不同的值

c# - 如何拦截 xamarin 表单的后退按钮?

C# DI Func工厂无需注册Func?

c# - 我在结合 dotMemory、xUnit 和 async 时做错了什么吗

c# - Lidgren 的 UPnP 和端口转发失败

c# - 我如何使用 3d 变换计算 2d 边界框

iphone - 如果 monotouch 可用,为什么要使用 xcode?

iOS:将 ObjC 代码转换为 C#,如何知道应用程序处于空闲状态的时间