Seite 1 von 1

Meshnummer über 10000

Verfasst: 28.07.2013 09:20
von Chimorin
Heyho,

ich habe ein bisher kleines Projekt, welches aber erweiterbar auf große Dimensionen sein soll. Inkludiert sind natürlich Platz für ne Menge Meshes, was aber Probleme schafft. Der Debugger nervt mich damit, dass die Meshnummer über 10000 wäre...

Hintergrund: Bisher soll es ein Holzfällsimulator werden (Mittelalter) mit Andockpunkt für mehr. Ein Baum hat verschiedene Altersstufen (Bis zu 6) und dementsprechend andere Meshes. Damit es realistisch wird, kann es bis zu 1000 verschiedene Baumtypen erweitert werden, welche alle in verschiedene Teile aufgeteilt sind (Stamm, Wurzelstock,...). Somit brauche ich also wirklich die "hohen" Zahlen.

Ist das ein so groooßes Problem, weil es (die hohen Meshzahlen, bzw. die vielen Meshes) so viel Performance schluckt oder so? Oder kann ich das irgendwie ignorierbar machen (Da gibt's doch sowas wie DebuggerIgnore oder so)?

Gruß,

Banane

Re: Meshnummer über 10000

Verfasst: 28.07.2013 10:08
von STARGÅTE
Nutze einfach #PB_Any beim Erstellen/Laden der Meshs, und speicher deren Nummer zB in einem Array oder List oder Struktur.

Re: Meshnummer über 10000

Verfasst: 28.07.2013 18:50
von Chimorin
Ich habs mit nem Array gemacht. Danke für die Antwort. Jetzt gibt's halt ein Array, welches 100000 Plätze hat ^^
Ein Teil muss ja final sein, sonst weiß das Programm nach dem Speichern und erneuten Laden nicht mehr, was das derzeitige Teil ist. Hab ich einfach über die Plätze realisiert.

Ich finde die Meldung bescheuert, wenn man sich mal die Rückgabewerte anschaut, liegen die in den 100k´ern.

Re: Meshnummer über 10000

Verfasst: 28.07.2013 19:19
von NicTheQuick
Bananenfreak hat geschrieben:Ich finde die Meldung bescheuert, wenn man sich mal die Rückgabewerte anschaut, liegen die in den 100k´ern.
Die IDs, die du mit #PB_Any bekommst, sind in Wirklichkeit auch Pointer, also Speicherstellen, an denen irgendwelche Informationen abgelegt sind.
PB unterscheidet dann zwischen den Pointern und den selbst festzulegenden statischen IDs anhand der Größe des Wertes. Denn üblicherweise liegen die Werte von Pointern immer über 10.000.

Re: Meshnummer über 10000

Verfasst: 28.07.2013 22:11
von PMV
Bananenfreak hat geschrieben:Ich habs mit nem Array gemacht. Danke für die Antwort. Jetzt gibt's halt ein Array, welches 100000 Plätze hat ^^
Ein Teil muss ja final sein, sonst weiß das Programm nach dem Speichern und erneuten Laden nicht mehr, was das derzeitige Teil ist. Hab ich einfach über die Plätze realisiert.

Ich finde die Meldung bescheuert, wenn man sich mal die Rückgabewerte anschaut, liegen die in den 100k´ern.
Das Objektsystem von PureBasic ist ja nichts anderes als
ein Array, welches die eigentlichen Referenzen speichert.
Wenn du also die Objektnummer 10.000 verwendest, hat
das Array auf einen Schlag 10k Elemente. Genau aus dem
Grund kommt die Meldung. Wer tatsächlich mehr braucht,
was in deinem Fall zutrifft, der nutzt #PB_Any ... ich für
meinen Teil hab noch nie die PB-Nummern verwendet sondern
immer und überall #PB_Any. :D

MFG PMV

Re: Meshnummer über 10000

Verfasst: 29.07.2013 12:10
von Chimorin
Vielen Dank für die Antworten, die haben mein Wissenshorizont ein bisschen erweitert :)

@Nic:
Wenn ich das richtig verstehe, könnte ich also mit der ID, die in Wahrheit ein Verweis auf die Speicherstelle ist, die richtige ID auslesen? Genau das macht dann wohl MeshID(), oder?

@PMV:
Gut, wusste ich vorher noch nicht :) Dann gibt es Verbesserungsbedarf in einigen Programmen.

Re: Meshnummer über 10000

Verfasst: 29.07.2013 12:20
von PMV
Was genau die ganzen XXXID() Funktionen zurück geben ist
meist nicht dokumentiert, es ist aber davon aus zu gehen, das
diese die jeweiligen internen IDs zurück geben. Bei MeshID(), EntityID(),
usw. wohl die "internen" OGRE-Referenzen. WindowID() unter Windows
gibt als zusätzliches Beispiel das "hWnd" zurück.
PB hat in den meisten Fällen noch ein eigenes Objektsystem
oben drauf. Auch bei #PB_Any wird noch ein eigenes "Objekt"
generiert, welches PB zur Verwaltung verwendet.

MFG PMV