Moin,
kann mir jemand sagen, warum bei einigen Mesh das hier klappt
CreateEntity(#EntityTest4,MeshID(LoadMesh(#PB_Any,"AKM.mesh")),MaterialID(#MaterialImageGold))
und bei anderen Mesh ich das so machen muss?
LoadMesh(1,"Cylinder.mesh")
CreateEntity(#EntityTest4,MeshID(1),MaterialID(#MaterialImageGold))
So klappt es ebenfalls nicht. Die beiden Befehle müssen getrennt sein und LoadMesh() darf nicht nicht mit #PB_Any aufgerufen werden.
CreateEntity(#EntityTest4,MeshID(LoadMesh(1,"Cylinder.mesh")),MaterialID(#MaterialImageGold))
Das merkwürdige ist es, dass das nicht bei allen Mesh so ist. In den PB-Beispielen gibt es das AKM.mesch. Damit klappt die verschachtelte Variante. Mit dem Barrel.mesh klappt es wieder nicht. LoadMesh(#PB_Any,"Barrel.mesh") gibt eine gültige Nummer zurück. MeshID(ZurückGegebeneNummer) gibt dann "Das angegebene 'Mesh in nicht initialisiert" zurück. Warum? Das Mesh wurde doch richtig geladen!
Bin auf die Erklärung schon mal gespannt
PS: Für die Erstellung der Mesh benutze ich Blender mit dem Blender2Ogre Exporter (erstellt eine XML die dann mit den Ogre-Tools in ein .Mesh umgewandelt wird).
CreateEntity() Problem
CreateEntity() Problem
Gruß, Schobaer
Re: CreateEntity() Problem
Wenn du bei LoadMesh() #PB_Any verwendest, dann wird eine Mesh-Nummer zurückgegeben.
Verwendest du eine Konstante oder Zahl, wird sofort die Mesh-ID zurückgegeben.
Das heißt, um an eine MeshID zu kommen, wie sie CreateEntity() verlangt kannst du diese Varianten verwenden.
In allen Fällen, solltest du mit IsMesh() prüfen, ob die Mesh-Nummer gültig ist, also das Mesh geladen wurde!
Verwendest du eine Konstante oder Zahl, wird sofort die Mesh-ID zurückgegeben.
Das heißt, um an eine MeshID zu kommen, wie sie CreateEntity() verlangt kannst du diese Varianten verwenden.
- LoadMesh(#Konstante)
- LoadMesh(123)
- MeshID(LoadMesh(#PB_Any))
In allen Fällen, solltest du mit IsMesh() prüfen, ob die Mesh-Nummer gültig ist, also das Mesh geladen wurde!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: CreateEntity() Problem
Meine Erinnerung besagt ... finger weg von den "IsXXX()" Befehlen,STARGÅTE hat geschrieben:In allen Fällen, solltest du mit IsMesh() prüfen, ob die Mesh-Nummer gültig ist, also das Mesh geladen wurde!
Freak oder Fred hat mal geschrieben, das diese nur für Debug-Zwecke
vorhanden sind und nicht für Produktivzwecke. Grund ist auch recht
einfach ... was auch immer die IsXXX() machen, wer ordentlich
programmiert braucht sie nicht, da jede Funktion, die ein PB-Objekt
erstellt, auch direkt zurück gibt, ob das geklappt hat oder nicht.
Zur Laufzeit ist es dann ein leichts zu wissen, ab wann ein Objekt
bewusst zerstört wurde. Wenn Objekte dagegen plötzlich nicht
mehr vorhaden sein können, nennt man so was Bug.

MFG PMV
Re: CreateEntity() Problem
Das ist richtig. Allerdings wird es hin und wieder schwierig wenn Vererbung mit hinzu kommt.Zur Laufzeit ist es dann ein leichts zu wissen, ab wann ein Objekt
bewusst zerstört wurde. Wenn Objekte dagegen plötzlich nicht
mehr vorhaden sein können, nennt man so was Bug.
Wenn ich schreibe:
MeinObjekt = CreateObject()
dann kann ich mit If MeinObjekt prüfen ob es erfolgreich erstellt wurde.
Wenn ich dann FreeObject() aufrufe, setze ich MeinObjekt = 0 und die Sache ist geregelt.
Nun kann es aber sein, dass ich MeinObjekt an unbestimmte viele andere Objekte übergeben habe.
Nun müsste ich also bei einem FreeObject() alle möglichen Partner finden und dort auch die Nummer löschen.
Um das nicht zu müssen, überprüft jeder andere halt mit IsObject(), ob die Nummer noch gültig ist.
Allerdings muss ich hier betonen, dass IsXXX() sehr langsam wird, wenn es viele Elemente gibt, da hier ja eine Stück-für-Stück-Prüfung stattfindet.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: CreateEntity() Problem
Wem das zu kompliziert ist sollte sich vielleicht überlegen, ob
er nicht besser bei den einfachen Sachen bleiben sollte.
kleiner Spaß
Ich hab auch die wildesten Konstelationen und trotzdem noch
nie IsXXX() benutzen müssen. Mit Threads ist das so wie so
nicht möglich, da es damit nicht Threadsicher umsetzbar ist.
Mir wäre die Funktion aber auch so oder so zu langsam.
Verbieten wollt ich dir die Nutzung nicht ... nur Anfängern
solltest du die Vorgehensweise nicht Nahelegen.
MFG PMV
er nicht besser bei den einfachen Sachen bleiben sollte.


kleiner Spaß

Ich hab auch die wildesten Konstelationen und trotzdem noch
nie IsXXX() benutzen müssen. Mit Threads ist das so wie so
nicht möglich, da es damit nicht Threadsicher umsetzbar ist.
Mir wäre die Funktion aber auch so oder so zu langsam.
Verbieten wollt ich dir die Nutzung nicht ... nur Anfängern
solltest du die Vorgehensweise nicht Nahelegen.

MFG PMV
Re: CreateEntity() Problem
Danke Stargate. Jetzt wird es mir klarer, warum es so ist.
Hat sich hier schon mal jemand mit Blender beschäftigt und die dort erstellten und textuierten Mesh erfolgreich in PB mit den Texturen eingebunden? Bei mir werden die Mesh angezeigt etc. Nur die Texturen werden nicht dargestellt. Farben aus den Scripten schon, nur die Images eben nicht. Kann dem Entity auch kein Material zuweisen.
Das hier funktioniert nicht. Das Mesh wird richtig angezigt, aber ohne Material. Ist ein Mesh aus Blender.
Das hier ist ein normaler Cube mit PB erstellt und mit Material. Das klappt. Hier kann ich auch das Material "Steinwand" aus dem Materialscript zuweisen oder irgend ein anderes Material.
Was muss ich machen, damit die Mesh mit Blender erstellten Mesh hier richtig laufen bzw. die Texturen angezeigt werden?
Ich glaube, ich bin zu blöd für 3D
Hat sich hier schon mal jemand mit Blender beschäftigt und die dort erstellten und textuierten Mesh erfolgreich in PB mit den Texturen eingebunden? Bei mir werden die Mesh angezeigt etc. Nur die Texturen werden nicht dargestellt. Farben aus den Scripten schon, nur die Images eben nicht. Kann dem Entity auch kein Material zuweisen.
Das hier funktioniert nicht. Das Mesh wird richtig angezigt, aber ohne Material. Ist ein Mesh aus Blender.
Code: Alles auswählen
CreateMaterial(1, LoadTexture(1, "Steinwand.jpg"))
LoadMesh(1,"Cube.001.mesh")
CreateEntity(#EntityTest4,MeshID(1),MaterialID(1))
ScaleEntity(#EntityTest4,1,1,1)
MoveEntity(#EntityTest4,0,15,0)
Code: Alles auswählen
CreateEntity(#EntityTest3,MeshID(CreateCube(#PB_Any, 0.5)),MaterialID(#MaterialScriptSteinwand))
ScaleEntity(#EntityTest3,10,10,10)
MoveEntity(#EntityTest3,25,0,0)
Ich glaube, ich bin zu blöd für 3D

Gruß, Schobaer