Add3DArchiv

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

Add3DArchiv

Beitrag von ProgOldie »

Hallo,
ich habe mich als Einstieg in die Grafikprogrammierung mit dem Beispiel 'Bridge' aus dem Manual beschäftigt und bin ganz begeistert über die Möglichkeiten. Alles läuft prima, auch wenn ich eine .exe erzeuge und mit der Engine3D.dll in ein anderes Verzeichnis lege.
Mein Problem: Wenn ich diese Dateien auf einem anderen Rechner starte fehlen offenbar die Texturen, denn alle Objekte sind grau. Der Fehler liegt vermutlich darin, das die EXE-Datei die Texturen und Materialien nicht findet. Letzteres liegt wohl an meinem mangelnden Verständnis von Add3DArchiv().

Code: Alles auswählen

Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts",#PB_3DArchive_FileSystem)
  Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Packs/desert.zip", #PB_3DArchive_Zip)
  Parse3DScripts()
Wie schaffe ich es, dass die EXE auf dem anderen Rechner auch auf die Texturen und Materialien zugreifen kann?
Soll ich mir generell ein eigenes Verzeichnis mit Kopien der benötigten Dateien vor dem Übersetzen, darauf Bezug nehmen und dann diese Dateien mit auf den anderen Rechner kopieren?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
dige
Beiträge: 1182
Registriert: 08.09.2004 08:53

Re: Add3DArchiv

Beitrag von dige »

Im Prinzip hast du deine Frage schon selbst beantwortet. Ein eigenes Projekt Verzeichnis anlegen und darin alle benötigten Dateien hineinkopieren und dann mit relativen Pfaden darauf zugreifen.
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Benubi
Beiträge: 186
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: Add3DArchiv

Beitrag von Benubi »

Vermutlich kennst Du schon die Zielverzeichnisstruktur, deine exe wirst Du vermutlich in einem /bin/win32 oder sowas hinterlegen. Bei Programmstart ermittelst Du den Executable-Namen mit ProgramFilename(), dann nimst du GetPathPart() und fügst "/.." bzw. "/../.." dem Verzeichnisnamen hinzu. Du kannst dann diesen relativen Pfad nehmen, ich gehe dann erstmal per GetCurrentDirectory() und SetCurrentDirectory() vor, damit ich einen absoluten Namen bekomme.

Auch das ist nützlich:

CompilerIf #PB_Debugger ;
; #PB_Compiler_Home benutzen
CompilerElse
; ProgramFilename() und Getpath() etc. benutzen
CompilerEndif


Wenn ich den Debugger benutze möchte ich auch manchmal weniger Objekte usw. in 3D generieren um Zeit zu sparen; also z.B. 50 entities generieren anstelle von 500.

Wenn es um die GUI geht, solltest Du alle abhängigen Add3DArchive() gemacht haben bevor Du ein erstes Renderworld() machst, weil sonst gibt es Probleme beim Nachladen oder wählen (man kann derzeit nicht on-the-fly den Style/Skin der GUI ändern).

Auch glaube ich, daß der Verzeichnisinhalt gepuffert wird. Daher wenn Du ein /temporary Verzeichnis hast, wo Du generierte Meshs ablegen möchtest, dann findet die Engine diese Meshs nicht wenn sie nach dem Einbinden des Verzeichnisses erstellt worden (jedenfalls bei mir ging das nicht); hier müsste man wohl wenn sich die Verzeichnisstruktur ändert das Verzeichnis wiederholt einbinden - habe ich aber noch nicht getestet.
Antworten