【问题标题】:Creating shapes in the OpenTK library in C#?在 C# 的 OpenTK 库中创建形状?
【发布时间】:2015-12-12 00:17:20
【问题描述】:

所以我正在做一个石油管道模拟项目,它有三个窗口;统计窗口(用于管道详细信息),模拟窗口(有关管道如何工作的详细信息以及中间窗口 - 石油管道的 2D 模拟。

2D 模拟实际上是出于审美目的——主要的细节是在我已经编程的 Maths.cs 类中完成的。所以我的问题是:

使用 OpenTK 库中的形状,我似乎只能构建三角形。我已经插入了用于构建三角形的代码,但似乎没有其他形状。有什么方法可以画出 1) 圆形、2) 矩形和 3) 线?

另外,“BeginMode”类有什么作用?我觉得这会解决问题,通过使用 BeginMode 以外的东西我可以通过不同的类访问其他形状??

谢谢 :-)

    private void viewportGL_Paint(object sender, PaintEventArgs e)
    {
        if (!loaded)
            return;

        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

        GL.MatrixMode(MatrixMode.Modelview);
        GL.LoadIdentity();

        GL.Translate(x, 0, 0);

        GL.Color3(Color.Aqua);
        GL.Begin(BeginMode.Triangles);
        GL.Vertex2(10, 20);
        GL.Vertex2(100, 20);
        GL.Vertex2(100, 50);
        GL.End();

        viewportGL.SwapBuffers();

    }

    int x = 0;
    private void viewportGL_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Space)
            x+=4;
        viewportGL.Invalidate();
    }

【问题讨论】:

  • 没有像圆形这样的基元,但您可以通过在 Begin() 和 End() 之间定义多个三角形来构建它。
  • 你能提供源代码吗?我遇到了真正的麻烦。 :(

标签: c# windows forms shapes opentk


【解决方案1】:

所以我现在将延伸到一个答案:

float step = (float) Math.PI/10;
GL.Color3(Color.Aqua);
GL.Begin(BeginMode.Triangles);
for (float angle = 0.0f; angle < Math.PI*2 - 0.001f; angle += step) {
    GL.Vertex2(0.0f, 0.0f);
    GL.Vertex2(Math.Cos(angle), Math.Sin(angle));
    GL.Vertex2(Math.Cos(angle - step), Math.Sin(angle - step));
}
GL.End();

BeginMode 是一个枚举,它基本上告诉 OpenGL 输入基元类型。我认为 PrimitiveType 做同样的事情,但有人可能会争辩说它的含义更直观。对于一个矩形,你可以写:

GL.Begin(PrimitiveType.Quads);
GL.Vertex2(-0.5f, -0.5f);
GL.Vertex2( 0.5f, -0.5f);
GL.Vertex2( 0.5f,  0.5f);
GL.Vertex2(-0.5f,  0.5f);
GL.End();

顺便说一下,您可能想看看 OpenTK 手册: http://www.opentk.com/doc/graphics

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多