nach meinen positiven Erfahrungen mit PB habe ich mich 'mal an die 3D-Grafik herangetraut. Dazu folgendes Beispiel aus dem PB-Buch (Danke an den Autor für die Bärenarbeit!)
Code: Alles auswählen
Enumeration
#MESH
#TEX
#MAT
#OBJEKT_INVADER
#LICHT
#KAMERA_EINS
EndEnumeration
;Setzen der Breite, Höhe und Farbtiefe des Screens
;Aufgrund der Seitenbreite wurden hier abgekürzte Variablennamen verwendet :(
Global ScrB.i = 1024
Global ScrH.i = 768
Global ScrT.i = 32
;Andere Globale Variablen
Global Beenden.i = #False
;Einfache Prozedur zur Fehlerprüfung
Procedure Fehlerbehandlung(Ergebnis.i, Text.s)
If Ergebnis = 0
MessageRequester("Fehler", Text, #PB_MessageRequester_Ok)
End
EndIf
EndProcedure
;Initialisiere Umgebung
Fehlerbehandlung(InitEngine3D(), "InitEngine3D() fehlgeschlagen.")
Fehlerbehandlung(InitSprite(), "InitSprite() fehlgeschlagen.")
Fehlerbehandlung(OpenScreen(ScrB, ScrH, ScrT, ""), "Kann Screen n. öffnen.")
Fehlerbehandlung(InitKeyboard(), "InitKeyboard() fehlgeschlagen.")
SetFrameRate(60)
Add3DArchive("Data\", #PB_3DArchive_FileSystem)
Fehlerbehandlung(LoadMesh(#MESH, "Invader.mesh"), "Kann Mesh nicht laden")
Fehlerbehandlung(LoadTexture(#TEX, "Invader.png"), "Kann Textur nicht laden")
Fehlerbehandlung(CreateMaterial(#MAT, TextureID(#TEX)), "Kann Material n. erstell.")
CreateEntity(#OBJEKT_INVADER, MeshID(#MESH), MaterialID(#MAT))
CreateLight(#LICHT, RGB(255, 255, 255), 0, 5, 0)
CreateCamera(#KAMERA_EINS, 0, 0, 100, 100)
CameraLookAt(#KAMERA_EINS, 0, 1, 2.5)
RotateCamera(#KAMERA_EINS, -15, 0, 0)
;Hauptschleife
Repeat
y.i + 2
RotateEntity(#OBJEKT_INVADER, 0, y, 0)
RenderWorld()
FlipBuffers()
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
Beenden = #True
EndIf
Until Beenden = #True
End
Im Verzeichnis des obigen Quelltextes habe ich den Ordner Data angelegt, indem auch die übernommenen Dateien Invader.mesh und Invader.png liegen.
Leider sehe ich beim Starten (PB 5.62 64-bit auf Windows 10) nur einen schwarzen Bildschirm. Das Programm wird nach ESCAPE ohne eine Fehlermeldung beendet.
Was mache ich falsch?