Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Netw0rk

Frischling

  • »Netw0rk« ist der Autor dieses Themas

Beiträge: 23

Wohnort: nähe Bonn

  • Private Nachricht senden

1

17.09.2011, 12:40

Ogre3D mesh nur einmal laden

Hallo,

kennt jemand eine Funktion, wie ich eine Meshdatei in ogre nur einmal laden muss und hinterer immer wieder(in meinem Fall in einer Schleife) abrufen kann?

Das wäre sehr praktisch, da ich eine 3D Tilemap mit meshes mache und der RAM schnell voll wird, andere Lösungsvorschläge nehme ich auch gerne entgegen.

LG
Netw0rk.

2

17.09.2011, 17:04

ein bissl Code wäre nett gewesen. Wie lädst du und instanzierst du ein mesh?

Soweit ich weiss, mach Ogre3d dies automatisch. Mittels Entitys instanzierst du die Meshs.
Ogre3D kommt mit ner tollen Sammlung an gut dokumentierten Demos. Schau dir "Instancing"-Demo an.

Gruss
Markus

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

17.09.2011, 17:15

Darum kümmert sich der MeshManager automatisch. du kannst getrost denselben Code aufrufen, er legt das Mesh nur einmal physikalisch an :)

Netw0rk

Frischling

  • »Netw0rk« ist der Autor dieses Themas

Beiträge: 23

Wohnort: nähe Bonn

  • Private Nachricht senden

4

17.09.2011, 19:16

Hallo, vielen dank für die Antworten!

Wäre ja ideal, wenn sich Ogre selbst darum kümmern würde.

Hier die Zeile, die es betrifft:

C-/C++-Quelltext

1
mapEntity = mSceneMgr->createEntity("mapEntity;;x:" + StringConverter::toString(x) + ";y:" + StringConverter::toString(y) + ";z:" + StringConverter::toString(z), "Cube.mesh");


Ich rufe das ganze in einer Schleife auf, die 10000x durchlaufen wird.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

18.09.2011, 10:52

Da lädst Du das Mesh ja gar nicht.
Ogre macht das von allein.
Mit so vielen Entities wirst Du aber vermutlich Performance-Probleme haben.

Netw0rk

Frischling

  • »Netw0rk« ist der Autor dieses Themas

Beiträge: 23

Wohnort: nähe Bonn

  • Private Nachricht senden

6

18.09.2011, 11:06

Ja, hab ich auch leider, dachte ich kann es irgendwie umgehen, klappt aber nicht so :S.

Hat jemand eine Idee, wie ich eine 3d-Tilemap besser realisieren kann?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

18.09.2011, 11:22

Ideen:
- Instancing benutzen (Ogre-Beispiel dafür gibt's)
- Größere Bereiche der Map zu jeweils einem einzigen Mesh zusammenfassen

Netw0rk

Frischling

  • »Netw0rk« ist der Autor dieses Themas

Beiträge: 23

Wohnort: nähe Bonn

  • Private Nachricht senden

8

18.09.2011, 13:01

Vielen Dank!

Ich denke ich muss meine Grundidee noch einmal überdenken.

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

9

18.09.2011, 16:47

Das einzige worauf du achten musst ist, dass deine Entity immer einen unterschiedlichen Namen hat.

C-/C++-Quelltext

1
2
Ogre::Entity* Sinnbad = mSceneMgr->createEntity("Sinbad","Sinbad.mesh");
Ogre::Entity* Sinnbad2 = mSceneMgr->createEntity("Sinbad2","Sinbad.mesh");


Ich würde mich da einfach zurück lehnen und Ogre die arbeit machen lassen, ich denke die API ist so schlau, dass sie nicht wieder alles von der Platte holt.

Gruß

Fb

Werbeanzeige