Einstiegsbeispiel scheitert schon

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Einstiegsbeispiel scheitert schon

Beitrag von ProgOldie »

Hallo,
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
Obiges Programm ist im Prinzip gut zu verstehen.
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?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: Einstiegsbeispiel scheitert schon

Beitrag von Lord »

Hallo!

Ich habe mit 3D nichts am Hut, aber es scheint eine "Invader.mesh" zu fehlen.
Diese ist auf meinem Rechner nicht vorhanden. Deshalb läuft der Schnipsel
wohl nicht.
Aber warte mal auf die Profis....
Bild
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Einstiegsbeispiel scheitert schon

Beitrag von man-in-black »

Hi,

ungetestet kann ich nur vermuten, dass alles korrekt abgearbeitet wird.
Typische Fehlerquellen sind, dass die Kamera nicht zum Objekt guckt (falsche Werte),
die Kamera im Objekt steckt (und die Objektflächen einseitig durchsichtig sind) oder
aber deine Lichtquelle falsch leuchtet (ebenfalls falsche Position oder falsches Reflektionsverhalten des Objektes).
Wenn ich dran denke, gucke ich mir das Heute Abend mit einem Dummy an.
Einen Fehler in deinem Modell kann ich dann aber nicht ausschließen. ;)

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Einstiegsbeispiel scheitert schon

Beitrag von man-in-black »

Hi,

wenn ich folgende Zeilen umändere und damit ein anderes Mesh lade (robot ist aus dem Beispielordner),
sehe ich letztgenanntes am oberen Bildschirmrand vorbeifliegen.

Code: Alles auswählen

dd3DArchive("E:\Programme\PureBasic\5.60\Examples\3D\Data\", #PB_3DArchive_FileSystem)
Fehlerbehandlung(LoadMesh(#MESH, "Models\robot.mesh"), "Kann Mesh nicht laden")
Fehlerbehandlung(LoadTexture(#TEX, "Textures\r2skin.jpg"), "Kann Textur nicht laden")
PB 5.60 x64

Es wird also wirklich an einem der oben genannten Gründen liegen, dass du nichts siehst. ;)

MFG
MIB
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
BI2
Beiträge: 145
Registriert: 26.11.2006 19:07

Re: Einstiegsbeispiel scheitert schon

Beitrag von BI2 »

ProgOldie hat geschrieben:Dazu folgendes Beispiel aus dem PB-Buch...
Das Buch ist immer noch auf dem Stand von PB 4.51 - damit funktionieren alle Beispiele fehlerfrei.

Ab PB 4.6 und 5.0 hat sich soviel im 3D-Bereich geändert, dass diese Beispiele nicht mehr funktionieren (das war einer der Hauptgründe warum ich noch nicht zur kompletten Überarbeitung des Buches gekommen bin. Ich habe das aber noch im Hinterkopf :) ).

Wenn Du also die 3D-Beispiele testen möchtest, musst Du ein paralleles PB 4.51 verwenden oder das ganze an die aktuelle Version anpassen. Da meine 3D-Kenntnisse auch nicht so riesig sind (meine ersten 3D-Erfahrungen habe ich damals bei der Konvertierung des Buches nach PB 4.51 gesammelt und seither nicht ausgebaut :mrgreen: ) kann ich Dir dabei leider nicht behilflich sein.

Gruß, BI2
PB 5.7x (x64), LinuxMint 18.3 - Xfce (x64)

Einsteigerbuch: PureBasic - Eine Einführung in die Computer Programmierung
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Einstiegsbeispiel scheitert schon

Beitrag von ProgOldie »

Dank an alle,
jetzt sehe ich aus was. Man muss mit Koordinaten und Kameraposition höllisch aufpassen.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten