Hallo Leute,
ich hab mal ein ganz neues Thema angefangen: 3D Programmieren. Ich habe mich für OpenGL entschieden, da ich die DirectX Klassen nicht auf meinen PC installieren konnte. (Wenn mir Irgendjemand einen Tipp geben kann was der Fehler "S1023" bedeutet, werd' ich das natürlich nachholen ;))
Ich hab mal mit einem einfachem Beispiel angefangen: Einen Würfel der sich immerzu dreht
Sieht auch ganz gut aus, aber ich habe vor eine Textur einzubinden. Funktioniert leider nicht so ganz
Hier mal mein Ansatz:
Quellcode (~120 Zeilen)
Ich habe den Verdacht, dass ich GL.TexCoord2 noch irgendwo einbauen muss, da in meiner Vorlage steht:
Allerdings weiß ich erstens nicht was genau diese Funktion macht bzw. wie sie zum einsetzen ist (Google spuckt auch nichts verständliches für mich aus - bin auch erst in der 4.Klasse ).
Zweitens bin ich mir nicht ganz sicher. Hoffe ihr findet was
Ich kanns kaum erwarten meine ersten "3D-Spiele" zu machen
ich hab mal ein ganz neues Thema angefangen: 3D Programmieren. Ich habe mich für OpenGL entschieden, da ich die DirectX Klassen nicht auf meinen PC installieren konnte. (Wenn mir Irgendjemand einen Tipp geben kann was der Fehler "S1023" bedeutet, werd' ich das natürlich nachholen ;))
Ich hab mal mit einem einfachem Beispiel angefangen: Einen Würfel der sich immerzu dreht
Sieht auch ganz gut aus, aber ich habe vor eine Textur einzubinden. Funktioniert leider nicht so ganz
Hier mal mein Ansatz:
VB.NET-Quellcode
- Imports OpenTK
- Imports OpenTK.Graphics
- Imports OpenTK.Graphics.OpenGL
- Public Class Form1
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim sgw As New Action(AddressOf StartGame)
- sgw.BeginInvoke(Nothing, Nothing)
- End Sub
- Sub StartGame()
- Dim ge As New GameEngine()
- ge.Run()
- Me.Invoke(Sub() Me.Close())
- End Sub
- End Class
- Class GameEngine
- Inherits GameWindow
- Shadows WithEvents keyboard As OpenTK.Input.KeyboardDevice = MyBase.Keyboard
- Dim quad_tex As Integer
- Public Sub New()
- MyBase.New(1, 1, GraphicsMode.Default, "OpenGLTest1")
- Me.WindowState = OpenTK.WindowState.Maximized
- End Sub
- Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
- MyBase.OnLoad(e)
- GL.ClearColor(Color.LightBlue)
- GL.Enable(EnableCap.Texture2D)
- GL.Enable(EnableCap.DepthTest)
- 'Texturen laden
- quad_tex = GL.GenTexture()
- GL.BindTexture(TextureTarget.Texture2D, quad_tex)
- Dim bmp = New Bitmap("tex.png")
- Dim bmp_data = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height), Imaging.ImageLockMode.ReadOnly, Imaging.PixelFormat.Format32bppArgb)
- GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, bmp.Width, bmp.Height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, bmp_data.Scan0)
- bmp.UnlockBits(bmp_data)
- GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear)
- GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear)
- End Sub
- Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
- MyBase.OnResize(e)
- GL.Viewport(0, 0, Width, Height)
- Dim aspect = Width / Height
- Dim proMat = Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver2, aspect, 0.1, 5)
- GL.MatrixMode(MatrixMode.Projection)
- GL.LoadMatrix(proMat)
- GL.MatrixMode(MatrixMode.Modelview)
- GL.LoadIdentity()
- End Sub
- Private Sub keyboard_KeyDown(ByVal sender As Object, ByVal e As OpenTK.Input.KeyboardKeyEventArgs) Handles keyboard.KeyDown
- If e.Key = Input.Key.Escape Then
- Me.Close()
- End If
- End Sub
- Dim angle = 0
- Protected Overrides Sub OnRenderFrame(ByVal e As OpenTK.FrameEventArgs)
- MyBase.OnRenderFrame(e)
- GL.Clear(ClearBufferMask.ColorBufferBit Or ClearBufferMask.DepthBufferBit)
- GL.LoadIdentity()
- GL.Translate(0, 0, -5)
- GL.Rotate(angle, Vector3d.UnitY)
- GL.Rotate(angle, Vector3d.UnitX)
- angle += 0.2
- If angle = 360 Then angle = 0
- GL.Color3(Color.Black)
- GL.BindTexture(TextureTarget.Texture2D, quad_tex)
- GL.Begin(BeginMode.Quads)
- 'Vorderseite
- GL.TexCoord2(0, 0) : GL.Vertex3(-1, -1, 1)
- GL.TexCoord2(0, 1) : GL.Vertex3(-1, 1, 1)
- GL.TexCoord2(1, 1) : GL.Vertex3(1, 1, 1)
- GL.TexCoord2(1, 0) : GL.Vertex3(1, -1, 1)
- 'Hinterseite
- GL.Vertex3(-1, -1, -1)
- GL.Vertex3(-1, 1, -1)
- GL.Vertex3(1, 1, -1)
- GL.Vertex3(1, -1, -1)
- 'Seite links
- GL.Vertex3(-1, -1, 1)
- GL.Vertex3(-1, 1, 1)
- GL.Vertex3(-1, 1, -1)
- GL.Vertex3(-1, -1, -1)
- 'Seite rechts
- GL.Vertex3(1, -1, 1)
- GL.Vertex3(1, 1, 1)
- GL.Vertex3(1, 1, -1)
- GL.Vertex3(1, -1, -1)
- 'Seite oben
- GL.Vertex3(-1, 1, 1)
- GL.Vertex3(-1, 1, -1)
- GL.Vertex3(1, 1, -1)
- GL.Vertex3(1, 1, 1)
- 'Seite unten
- GL.Vertex3(-1, -1, 1)
- GL.Vertex3(-1, -1, -1)
- GL.Vertex3(1, -1, -1)
- GL.Vertex3(1, -1, 1)
- GL.End()
- SwapBuffers()
- End Sub
- End Class
Ich habe den Verdacht, dass ich GL.TexCoord2 noch irgendwo einbauen muss, da in meiner Vorlage steht:
Allerdings weiß ich erstens nicht was genau diese Funktion macht bzw. wie sie zum einsetzen ist (Google spuckt auch nichts verständliches für mich aus - bin auch erst in der 4.Klasse ).
Zweitens bin ich mir nicht ganz sicher. Hoffe ihr findet was
Ich kanns kaum erwarten meine ersten "3D-Spiele" zu machen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Memo“ ()