Hallo,
wenn ich bei der Darstellung einer Landkarte auch Symbole (Parkplaetze, Schutzhuetten, ...) rendern moechte, koennten das auch mal n (10000<n<100000) Stueck sein. Leider bricht dabei die Performance total ein.
Probiert habe ich
- Displaylisten (je eine pro Symbol; zusammengefaszt in einer Symbol-DisplayListe)
- Texturen (je eine pro Symbol)
- Rastergrafiken (gerendert mit glBitmap()).
Ueber 4 FPS komme ich damit leider nicht hinaus. Habt Ihr Ideen, wie man soetwas angehen musz?
Instancing waere sicher eine Moeglichkeit -- das Programm musz aber auch auf aelterer Hardware laufen, so dasz dies einklich nicht in Frage kommt.
Eine Textur pro Symbol?
Aber hoffentlich malst du dann alle gleichartigen Symbole gleichzeitig? Sonst bringt dich wahrscheinlich der Texturwechsel um.
Mach am besten alles in eine Textur und wähle das richtige dann mithilfe der Texturkoordinaten.
Zu Displaylisten: Heutzutage werden sie hardware-/treiberintern wie vbo's gehandelt - und die spielen erst ab einer gewissen Größe ihre Vorteile aus. Im Gegenteil! Kleine (ich vermute mal, du benutzt Quads, wo du die Symbole drauftexturierst?) Objekte sind sogar langsamer als direkt im Immediate-Modus.
Ich hoffe, ich konnte helfen.
LG Ziz
_________________ Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut. Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’. Und du schaust mich an und fragst ob ich das kann. Und ich denk, ich werd' mich ändern irgendwann. _________________Farin Urlaub - Bewegungslos
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Hast du dir schon Gedanken über Raumunterteilungsstrategien (space partitioning) gemacht? Je nach Darstellung lohnen sich Quad-,Oct- oder Binarytrees. Um diese sinnvoll zunutzen muss man natürlich noch sein Frustum bestimmen und prüfen welcher der Zweige der Trees überhaupt im sichtfeld liegt. Auf diese weiße grenzt man den zu zeichnenden Anteil der Obekte stark ein. Das mit dem Instancing ist ebenfalls ein guter ansatz. sollte das aber aufgrund von hardware nicht in Frage kommen, kann man als alternative alle gleichen Objekte vor transformieren und in einem VBO sammeln um sie in einem rutsch an die Graka zu schicken und zu zeichnen. Auf diese weiße sollte es kein Problem sein wieder auf ein ansehnlichen FPS Bereich zu kommen.
Also ich bezweifle das du 10000 oder 100000 Symbole gleichzeitig auf dem Bildschirm siehst. Du solltest dir also dringend die angesprochenen Raumunterteilungstechniken anschauen. Wahrscheinlich sind dann < 100 Symbole wirklich sichtbar und das rendern kein Problem mehr.
Wenn du wirklich diese 100000 Symbole rendern musst ist Instancing wirklich eine Option, aber ich bezweifle das du sie brauchen wirst.
Hallo,
vielen Dank fuer Eure Anregungen. Hab zwischenzeiltich mit PointSprites und vortransformierten texturierten Quads (im VBO) rumgespielt und mit dem VBO ist's wieder richtig schnell geworden.
FrustumCheck fuehre ich (objektweise) schon durch. Einen QuadTree werde ich demnaechst aber auch noch einbauen -- da kann man bestimmt noch einige "ifs" einsparen.
Den Quadtree solltest du wirklich einbauen. Damit musst du dir nicht jedes Objekt einzeln angucken, ob es im View Frustrum liegt, sondern kannst auf einmal ganze Gruppen verwerfen.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.