Folgender Beispielcode bietet eine mit der frei rotier-/bewegbare Ansicht mit einem Dreieck, auf dem man steht (es befindet sich senkrecht unter der Kamerastartposition, die Bewegungsfunktionen für die Kamera sind nicht beim Code dabei weil ja nicht relevant). Dieses sollte texturiert sein - ist es aber nicht.
Ich habe versucht, den Code eines OpenGL-Tutorials nach VB 2005 umzusetzen, der das Textureladen demonstrierte, das ging aber offensichtlich schief.
Sieht jemand den Fehler? Tipps wären sehr nett, weil ich bin OpenGL-Anfänger und mit meinem Latein am Ende! Wenn ich nur ein texturiertes Dreieck hinkriegen würde, hätte ich alles, was ich für simple Anzeigen und Level bräuchte.
Public textures(1) As UInt32
Public Sub LoadTex()
Dim bla As Bitmap = frm.tex\_gras.Image
bla.RotateFlip(RotateFlipType.RotateNoneFlipY)
'MsgBox(System.Drawing.Bitmap.GetPixelFormatSize(bla.PixelFormat))
Dim bitmapdata As System.Drawing.Imaging.BitmapData
Dim rect As Rectangle = New Rectangle(0, 0, bla.Width, bla.Height)
bitmapdata = bla.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, Drawing.Imaging.PixelFormat.Format24bppRgb)
Gl.glEnable(Convert.ToUInt32(Gl.GL\_TEXTURE\_2D))
Gl.glGenTextures(1, ConvertToIntArray(textures))
Gl.glBindTexture(Convert.ToUInt32(Gl.GL\_TEXTURE\_2D), textures(0))
Gl.glTexImage2D(Gl.GL\_TEXTURE\_2D, 0, Convert.ToInt32(Gl.GL\_RGB8), \_
bla.Width, bla.Height, 0, 32992, \_
Gl.GL\_UNSIGNED\_BYTE, bitmapdata.Scan0)
'Gl.glTexParameteri(Gl.GL\_TEXTURE\_2D, Gl.GL\_TEXTURE\_MIN\_FILTER, 9729)
'Gl.glTexParameteri(Gl.GL\_TEXTURE\_2D, Gl.GL\_TEXTURE\_MAG\_FILTER, 9729)
bla.UnlockBits(bitmapdata)
bla.Dispose()
End Sub
Public Function DrawGLScene() As Boolean
Dim r As Integer
Dim k As Integer
Dim trianglesize As Integer = 16
Gl.glClear(Gl.GL\_COLOR\_BUFFER\_BIT Or Gl.GL\_DEPTH\_BUFFER\_BIT)
Gl.glMatrixMode(Convert.ToUInt32(Gl.GL\_MODELVIEW))
Gl.glLoadIdentity()
Dim xtrans As Double = -XPos
Dim ytrans As Double = -YPos
Dim ztrans As Double = -ZPos
Dim scenerotatepan As Double = 360.0F - PanRot
Gl.glRotatef(LookUpDown, 1.0F, 0, 0)
Gl.glRotatef(scenerotatepan, 0, 1.0F, 0)
Gl.glTranslatef(xtrans, ytrans, ztrans)
Gl.glBindTexture(Gl.GL\_TEXTURE\_2D, textures(0))
Gl.glBegin(Gl.GL\_TRIANGLES)
Gl.glTexCoord2f(0.0F, 1.0F)
Gl.glVertex3f(-1.0F, 1.0F, 1.0F) 'links unten
Gl.glTexCoord2f(1.0F, 1.0F)
Gl.glVertex3f(1.0F, 1.0F, 1.0F) 'rechts unten
Gl.glTexCoord2f(1.0F, 0.0F)
Gl.glVertex3f(1.0F, 1.0F, -1.0F) 'rechts oben
'1:rechts-links (größer rechts),2:hoch-runter (größer hoch),3:hinzumbild-wegvombild (größer hin)
Gl.glEnd()
Video.GLSwapBuffers()
Return True
End Function