2012-02-17 68 views
0

VB.NET環境でOpenGLを実行する方法を学びましたが、OpenTKを推奨するOpenTKの方が推奨されています使用してみてください。VB.NETのOpenTK(OpenGL)

私はこの新しいことから、もっと複雑なものを作る前にすべてを理解できるように、単純なボックス、三角形、または何かを実際に描画しようとしています。私はこれまでこれまでに失敗していましたので、私がこれまで行ってきたことを順番にリストアップし、ここで誰かがそれを訂正したり、単純な形を描くことができる新しい例を提供するのを助けてくれることを願っています。

1)Iは、I)IはOpenTK.dllとOpenTK.Compatibility.dll

3への参照を追加した新しいプロジェクトでopentk-2010-10-06.exe

2)を使用してOpenTKをインストールコントロール(opentk.glcontrol.dll)を追加しました

4)実際のコントロールをフォームに追加しました。オンラインいくつかの例を使用して

私は残りの部分を追加しました:私は私の書いた

Dim _STARTED As Boolean = False 

7):私のグローバル変数

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

6):

5)私はで私の参照を書きましたイベント:

プライベートサブGlControl1_Resize(ByVal送信者オブジェクト、System.EventArgsとしてByVal送信者)H andles GlControl1.Resize _STARTED = Trueの ResizeGL() End Subの

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

私は自分自身の質問を解決しました:私は、私が多くのものを描くことができる入力に基づいていくつかの原則を描くことができるようにラッパークラスを作成しました:円、多角形、三角形、

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のビューポートと投影行列を設定しますが、実際にははレンダリングされません。です。

関連する問題