Da hast du deinen scheiß Würfel. Aber irgendwas stimmt mit dem Tiefenpuffer nicht, zumindest habe ich das leichte Gefühl. Vorführeffekt, ein anderer Code aus Triangles usw funktioniert seltsamerweise, wie alles andere. Falls du das nicht glaubst, poste ich den auch noch. Aber ich bin gerade faul so einen kleinen dämlichen Fehler zu suchen. Muss irgendwas vergessen haben wegen dem Tiefenpuffer, bestimmt. -.-°
Code: Alles auswählen
;//////////////////////////////////////////////////////////////////////////////////////////////////
;
; INCLUDES
;
;//////////////////////////////////////////////////////////////////////////////////////////////////
IncludeFile "OpenGL.pbi"
;//////////////////////////////////////////////////////////////////////////////////////////////////
;
; DECLARATIONS
;
;//////////////////////////////////////////////////////////////////////////////////////////////////
EnableExplicit
Global Texture.l, Angle.l
;//////////////////////////////////////////////////////////////////////////////////////////////////
;
; OPEN SCREEN
;
;//////////////////////////////////////////////////////////////////////////////////////////////////
;{ Open Screen
Global WindowNumber.l, WindowHandle.l, hDC.l, pixformat.l, hrc.l
Global pfd.PIXELFORMATDESCRIPTOR
WindowNumber = OpenWindow(#PB_Any, 0, 0, 800, 600, "Plane", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
WindowHandle = WindowID(WindowNumber)
hDC = GetDC_(WindowHandle)
pfd\nSize = SizeOf(PIXELFORMATDESCRIPTOR)
pfd\nVersion = 1
pfd\dwFlags = #PFD_SUPPORT_OPENGL | #PFD_DOUBLEBUFFER | #PFD_DRAW_TO_WINDOW
pfd\iLayerType = #PFD_MAIN_PLANE
pfd\iPixelType = #PFD_TYPE_RGBA
pfd\cColorBits = 24
pfd\cDepthBits = 32
pixformat = ChoosePixelFormat_(hDC, pfd)
SetPixelFormat_(hDC, pixformat, pfd)
hrc = wglCreateContext_(hDC)
wglMakeCurrent_(hDC, hrc)
glShadeModel_(#GL_SMOOTH)
glClearDepth_(1.0)
glClearStencil_(0)
glEnable_(#GL_DEPTH_TEST)
glDepthFunc_(#GL_LEQUAL)
glHint_(#GL_PERSPECTIVE_CORRECTION_HINT, #GL_NICEST)
glEnable_(#GL_TEXTURE_2D)
;}
;//////////////////////////////////////////////////////////////////////////////////////////////////
;
; PROCEDURES
;
;//////////////////////////////////////////////////////////////////////////////////////////////////
ProcedureDLL.l LoadTargaImage(Filename.s)
Protected Filenumber.l, Counter.l, Width.l, Height.l, Depth.l, Y.l, X.l, Result.l, R.b, G.b, B.b, A.b, *MemoryAddress.l, Pixelformat.l
Filenumber = ReadFile(#PB_Any, Filename)
If Filenumber
; Read unimportant stuff
For Counter = 1 To 12
ReadByte(Filenumber)
Next
Counter = 0
; Read important and not so important stuff
Width = ReadWord(Filenumber)
Height = ReadWord(Filenumber)
Depth = ReadByte(Filenumber)
ReadByte(Filenumber)
; Dimensionate temporally the ImageData array
Protected Dim ImageData.b(Width * Height * 4)
; Put the values into the array
For Y = 0 To Height-1
For X = 0 To Width-1
B = ReadCharacter(Filenumber)
G = ReadCharacter(Filenumber)
R = ReadCharacter(Filenumber)
If Depth = 32
A = ReadCharacter(Filenumber)
EndIf
ImageData(Counter) = R
Counter + 1
ImageData(Counter) = G
Counter + 1
ImageData(Counter) = B
Counter + 1
If Depth = 32
ImageData(Counter) = A
Counter + 1
EndIf
Next
Next
CloseFile(Filenumber)
; Now the OpenGL commands
glGenTextures_(1, @Result)
If Depth = 32
Pixelformat = #GL_RGBA
Else
Pixelformat = #GL_RGB
EndIf
glBindTexture_(#GL_TEXTURE_2D, Result)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_NEAREST)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_NEAREST)
gluBuild2DMipmaps_(#GL_TEXTURE_2D, 4, Width, Height, Pixelformat, #GL_UNSIGNED_BYTE, @ImageData())
; Return
ProcedureReturn Result
Else
ProcedureReturn #False
EndIf
EndProcedure
;//////////////////////////////////////////////////////////////////////////////////////////////////
;
; MAIN LOOP
;
;//////////////////////////////////////////////////////////////////////////////////////////////////
Texture = LoadTargaImage("tex-brick0.tga")
Repeat
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
glLoadIdentity_()
gluPerspective_(30.0, 640/480, 0.0, 100000.0)
glMatrixMode_(#GL_MODELVIEW)
Angle = Angle + 1
If Angle = 360
Angle = 0
EndIf
glTranslatef_(0.0, 0.0, -5)
glRotatef_(45.0, 0.0, 1.0, 0.0)
glRotatef_(Angle, 1.0, 0.0, 1.0)
glBindTexture_(#GL_TEXTURE_2D, Texture)
glBegin_(#GL_QUADS)
; Vorderseite
glTexCoord2f_(0.0, 0.0)
glVertex3f_(-0.5, -0.5, 0.5)
glTexCoord2f_(0.0, 1.0)
glVertex3f_(-0.5, 0.5, 0.5)
glTexCoord2f_(1.0, 1.0)
glVertex3f_(0.5, 0.5, 0.5)
glTexCoord2f_(1.0, 0.0)
glVertex3f_(0.5, -0.5, 0.5)
; Rückseite
glTexCoord2f_(0.0, 0.0)
glVertex3f_(-0.5, -0.5, -0.5)
glTexCoord2f_(0.0, 1.0)
glVertex3f_(-0.5, 0.5, -0.5)
glTexCoord2f_(1.0, 1.0)
glVertex3f_(0.5, 0.5, -0.5)
glTexCoord2f_(1.0, 0.0)
glVertex3f_(0.5, -0.5, -0.5)
; Links
glTexCoord2f_(0.0, 0.0)
glVertex3f_(-0.5, -0.5, 0.5)
glTexCoord2f_(0.0, 1.0)
glVertex3f_(-0.5, 0.5, 0.5)
glTexCoord2f_(1.0, 1.0)
glVertex3f_(-0.5, 0.5, -0.5)
glTexCoord2f_(1.0, 0.0)
glVertex3f_(-0.5, -0.5, -0.5)
; Rechts
glTexCoord2f_(0.0, 0.0)
glVertex3f_(0.5, -0.5, 0.5)
glTexCoord2f_(0.0, 1.0)
glVertex3f_(0.5, 0.5, 0.5)
glTexCoord2f_(1.0, 1.0)
glVertex3f_(0.5, 0.5, -0.5)
glTexCoord2f_(1.0, 0.0)
glVertex3f_(0.5, -0.5, -0.5)
; Oben
glTexCoord2f_(0.0, 0.0)
glVertex3f_(-0.5, 0.5, 0.5)
glTexCoord2f_(0.0, 1.0)
glVertex3f_(-0.5, 0.5, -0.5)
glTexCoord2f_(1.0, 1.0)
glVertex3f_(0.5, 0.5, -0.5)
glTexCoord2f_(1.0, 0.0)
glVertex3f_(0.5, 0.5, 0.5)
; Unten
glTexCoord2f_(0.0, 0.0)
glVertex3f_(-0.5, -0.5, 0.5)
glTexCoord2f_(0.0, 1.0)
glVertex3f_(-0.5, -0.5, -0.5)
glTexCoord2f_(1.0, 1.0)
glVertex3f_(0.5, -0.5, -0.5)
glTexCoord2f_(1.0, 0.0)
glVertex3f_(0.5, -0.5, 0.5)
glEnd_()
SwapBuffers_(hDC)
Until WindowEvent() = #PB_Event_CloseWindow
End
Ich verweise nochmal auf's Code Archiv, da ist auch ein Code drin, bei dem in 195 Zeilen ein paar Würfel mit Motion Blur gerendert werden. Habe ich gerade nochmal nachgeschaut, weil ich wissen wollte, wie der da rendert, und das sind ja eigentlich auch nur Quads... wayne.