2012-02-17 80 views
0

我努力学习如何在VB .NET环境中做OpenGL和它似乎是陶框架或OpenTK建议使用具有更高建议,以便OpenTK就是我选择尝试使用。OpenTK(OpenGL的)在VB .NET

因为我是这个品牌的新手,我只是想绘制一个简单的盒子,三角形或任何其他东西,以便在做出更复杂的事情之前能够理解这一切。迄今为止,我一直没有成功,所以我会按顺序列出迄今为止所做的工作,希望这里的某个人能够帮助我改正或提供一个新的例子,以便我可以绘制一个简单的形状。

1)I使用OpenTK opentk-2010-10-06.exe

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)H andles GlControl1.Resize _STARTED =真 ResizeGL() 完子

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 

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

即使你不知道一个完整的解决方案,任何反应都会很好。

回答

0

我已经解决了自己的问题:一个圆,多边形,三角形,文本:我创建了一个包装类,这样我可以得出基于输入一些primatives这应该让我画很多东西页。

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 
1

请发布您的渲染代码(即您绘制事件处理程序)。你的代码贴树立的OpenGL视口,投影矩阵,但实际上并没有渲染什么。