2012-02-17 3 views
0

Я пытался узнать, как делать openGL в среде VB .NET, и кажется, что OpenTK рекомендуется использовать с помощью OpenTK с более высокой рекомендацией, так что это то, что я выбрал попробуйте использовать.OpenTK (OpenGL) в VB .NET

Поскольку я совершенно новичок в этом, я стараюсь просто нарисовать простую коробку, треугольник или что-нибудь действительно, чтобы я мог все понять, прежде чем создавать более сложные вещи. Я до сих пор не увенчался успехом, поэтому я перечислил в порядке, что я сделал до сих пор, и, надеюсь, кто-то здесь может помочь мне исправить это или представить новый пример, чтобы я мог нарисовать простую форму.

1) Я установил 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 как объект, ByVal e As System.EventArgs) 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

Я решил свой собственный вопрос: 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 
1

Также отправьте свой код рендеринга (т. Е. Обработчик события Paint). Код, который вы разместили, настраивает структуру окна просмотра и проекции OpenGL, но на самом деле не делает ничего.

Смежные вопросы