【问题标题】:OpenTK (OpenGL) in VB .NETVB .NET 中的 OpenTK (OpenGL)
【发布时间】:2015-06-02 19:03:01
【问题描述】:

我正在尝试学习如何在 VB .NET 环境中执行 openGL,似乎建议使用 Tao 框架或 OpenTK,而 OpenTK 具有更高的推荐,所以我选择尝试使用。

因为我是新手,所以我试着画一个简单的盒子、三角形或其他任何东西,以便在制作更复杂的东西之前能够理解它们。到目前为止我一直没有成功,所以我将按顺序列出我到目前为止所做的事情,希望这里有人可以帮助我纠正它或提供一个新示例,以便我可以绘制一个简单的形状。

1) 我使用 opentk-2010-10-06.exe 安装了 OpenTK

2) 在一个新项目中,我添加了对 OpenTK.dll 和 OpenTK.Compatibility.dll 的引用

3)我添加了控件(opentk.glcontrol.dll)

4) 我在表单中添加了实际控件。

使用一些在线示例,我添加了其余部分:

5) 我的参考文献写在:

Imports OpenTK
Imports OpenTK.GLControl
Imports OpenTK.Platform
Imports OpenTK.Graphics.OpenGL
Imports System.Math

6) 我的全局变量:

 Dim _STARTED As Boolean = False

7) 我写了我的事件:

Private Sub GlControl1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) 处理 GlControl1.Resize _STARTED = 真 调整大小GL() 结束子

Private Sub ResizeGL()
    GL.Viewport(0, 0, GlControl1.Width, GlControl1.Height)
    GL.MatrixMode(MatrixMode.Projection) ' Select The Projection Matrix
    GL.MatrixMode(MatrixMode.Modelview) ' Select The Modelview Matrix
    GL.LoadIdentity() ' Reset The Modelview Matrix
End Sub


Public Sub ViewPerspective() ' Set Up A Perspective View

    GL.MatrixMode(MatrixMode.Projection) ' Select Projection
    GL.LoadIdentity() ';    
    Dim perspective1 As Matrix4 = OpenTK.Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4, _
                                         CSng((GlControl1.Width) / (GlControl1.Height)), 0.1, 1000)
    GL.LoadMatrix(perspective1)
    GL.MatrixMode(MatrixMode.Modelview) ' Select The Modelview Matrix
    GL.LoadIdentity() ' Reset The Matrix
    GL.Enable(EnableCap.DepthTest) ' This doesnt need to be here but.. If your using the Z buffer.. It dont hurt.

End Sub


Public Sub ViewOrtho()
    GL.MatrixMode(MatrixMode.Projection) 'Select Projection
    GL.LoadIdentity() ' Reset The Matrix
    GL.Ortho(0, GlControl1.Width, -GlControl1.Height, 0, 0.1, 100.0) ' Select Ortho Mode
    GL.MatrixMode(MatrixMode.Modelview) ' Select Modelview Matrix
    GL.LoadIdentity() ' Reset The Matrix
End Sub

8) 最后,我试着给他们打电话:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ViewOrtho()
End Sub

以上结果没有显示,所以任何帮助将不胜感激。

即使您不知道完整的解决方案,任何回应都会很好。

【问题讨论】:

    标签: vb.net opengl opentk


    【解决方案1】:

    请也发布您的渲染代码(即您的 Paint 事件处理程序)。您发布的代码设置了 OpenGL 视口和投影矩阵,但实际上并没有渲染任何东西。

    【讨论】:

      【解决方案2】:

      我已经解决了我自己的问题:p 我创建了一个包装类,这样我就可以根据输入绘制一些基元,这应该允许我绘制很多东西:圆形、多边形、三角形和文本。

      Private Sub GlControl1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GlControl1.Load
          GL.ClearColor(Color.Black)
          SetupViewport()
      End Sub
      
      Public Sub SetupViewport()
          Dim w As Integer = GlControl1.Width
          Dim h As Integer = GlControl1.Height
          GL.MatrixMode(MatrixMode.Projection)
          GL.LoadIdentity()
          GL.Ortho(0, w, 0, h, -1, 1)
          GL.Viewport(0, 0, w, h)
      End Sub
      
      
      Private Sub GlControl1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GlControl1.Resize
          SetupViewport()
          GlControl1.Invalidate()
      End Sub
      
      
      Private Sub GlControl1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles GlControl1.Paint
          GL.Clear(ClearBufferMask.ColorBufferBit)
          GL.Clear(ClearBufferMask.DepthBufferBit)
      
          'go through list and draw shapes
          Dim i As Integer = 0
          Try
              Do Until i = objectsettings.GetUpperBound(1) + 1
                  Select Case objectsettings(1, i)
                      Case "circle"
                          draw_circle(objectsettings(2, i), objectsettings(3, i), objectsettings(5, i), objectsettings(12, i))
                      Case "polygon"
                          draw_polygon(objectsettings(2, i), objectsettings(3, i), objectsettings(6, i), objectsettings(7, i), objectsettings(4, i), objectsettings(12, i))
                      Case "text"
                          draw_text(objectsettings(2, i), objectsettings(3, i), objectsettings(6, i), objectsettings(7, i), objectsettings(4, i), objectsettings(8, i), objectsettings(12, i))
                      Case "triangle"
                          draw_triangle(objectsettings(2, i), objectsettings(3, i), objectsettings(4, i), objectsettings(9, i), objectsettings(10, i), objectsettings(11, i), objectsettings(12, i))
                      Case Else
                          Exit Do
                  End Select
      
      
                  i = i + 1
              Loop
          Catch
          End Try
      
      
      
          GlControl1.SwapBuffers()
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2018-08-15
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        • 2012-08-05
        • 1970-01-01
        • 2012-09-01
        • 2016-02-01
        相关资源
        最近更新 更多