Blending sortieren
-
nur eine Kurze frage kann ich es prozessormässig verantworten, sämtliche geblendeten elemente am ende mit dem Prozessor zu sortieren, ich meine das kostet eben viel Leistung und zeit, und vielleicht macht man dass ja anders.
Es handelt sich dabei um Objekte wie zum Beispiel Büsche,Wasser, Zäune in grosser anzahl, die über den Prozessor bei jedem Frame auf verdeckung überprüft werden müssten.
Ich dachte bevor ich eine Sortier Routine schreibe, frag ich besser nach, ob es nicht eine elegantere Lösung ibt oder Opengl vielleicht sogar eine Funktion bereitstellt.
oder werd ich an der Routine nicht vorbeikommen?
-
sortieren ist n*log(n) also fast Gratis. Und schreib dir nicht deine eigene Routine, sondern verwende std::sort.
-
alterbro schrieb:
Es handelt sich dabei um Objekte wie zum Beispiel Büsche,Wasser, Zäune in grosser anzahl, die über den Prozessor bei jedem Frame auf verdeckung überprüft werden müssten.
Das kann man sicher optimieren. Das sind doch zu 99% statische Objekte, die Reihenfolge muss nur einmal ermittelt werden.
-
Mechanics schrieb:
Das kann man sicher optimieren. Das sind doch zu 99% statische Objekte, die Reihenfolge muss nur einmal ermittelt werden.
Aber die Kameraposition ist dynamisch.
-
otze schrieb:
Mechanics schrieb:
Das kann man sicher optimieren. Das sind doch zu 99% statische Objekte, die Reihenfolge muss nur einmal ermittelt werden.
Aber die Kameraposition ist dynamisch.
Mag sein, aber das kriegt man sicher auch in den Griff, sodass man die Reihenfolge nicht für jedes Frame bestimmen muss. Die Kameraposition ändert sich durchschnittlich vielleicht alle paar hundert Frames, und die meisten Änderungen haben vielleicht keine Auswirkungen oder nur auf einen Teil der Objekte. Kann man auf jeden Fall schlauer machen, als bei jedem Frame alles neuzuberechnen.
-
mist ich hab geahnt dass es auf so kompliziertes zeug rausläuft.
aber zu der sache mit dem einmal sortieren hab ich was zu sagen:
was bringt es eine komplizierte Berechnung nur einmal durchzuführen?
dann laggt etwa jede sekunde ein einzges frame, und das ist sicher unschön.
ausserdem muss ich mich dafür entschuldigen dass ich im falschen forum gepostet habe, bei drop down verklick ich mich oft.
ich hab mir deas etwa so vorbgestellt (pseudo):
jedes Renderbare Drei oder Viereck(Busch, Wand,Model, Wasser) erhält ein Flag ob es Blending braucht oder nicht. alle ohne Flag rendern. also für jedes Frame List für sonderfälle anlegen (int sonder[100][2]) //sonderfall=objekt(dreieck oder viereck) ist zwar näher als ein anderes zur Kamera, kann aber trozdem von diesem verdeckt verden, zb. bei Langen Zäunen. Bounding box array bilden(Vektor[100][2]) für jedes blendobjekt: Vektor[i][0]=position des objekts. Vektor[i][0]=position+wert der am weitesten in jede richtung liegt,d.h die Box umfasst das gesamte objekt für jedes blendobjekt mit jedem anderen folgendes testen: sonderfälle filtern, indem die Boxen auf kollision überprüft werden alle anderen objekte mit der Länge und std::sort sortieren. sonderfälle speziell sortieren in der richtigen reihenfolge rendern
so in etwa hab ich mir das vorgestellt
oder hat jemand eine bessere Idee?
-
"sonderfälle speziell sortieren - in der richtigen reihenfolge rendern" ist leicht gesagt, geht aber nicht.
Deine "Sonderfälle" kannst du nur lösen indem du sie in mehrere Teile zerschneidest. (EDIT Genauer: es gibt bestimmte Fälle wo man zerschneiden muss - viele andere sind natürlich ganz normal sortierbar)
-
achso, stimmt ja, sortier ich eben nur nach position