SceneManager



  • hi leutz,

    ich arbeite an einem kleinen programm für mich und komme jetzt an einen punkt wo ich net wirklich weiterkomme ^^

    ich habe eine szene mit vielen objekten .. welche alle transparent sind .. nun müsste ich diese ja von hinten nach vorne darstellen ... allerdings ist die szene in bewegung und sie ändern ihre Z positionen .. gibts kein tutorial oder so wo man einem SceneManager die ganzen objekte übergibt und er sie selber sortiert und richtige reihenfolge darstellt?
    mein wissen reicht nicht aus um das jetzt so von selber zu können

    bitte bitte hilfe


  • Mod

    du gehst pro frame den scenegraphen durch, unter verwendung von zumindestens frustumculling hollst du dir die potentiel sichtbaren objeckte raus und steckst sie in einen std::vector/array, danach sortierst du diese in abhängigkeit zum abstand vom z.b. objeckt zentrum zum kameraursprung. danach zeichnest du die liste ab.

    rapso->greets();



  • danke. so habe ich's mir gedacht, aber wie gesagt bin ich nen n00b und brauch wie jeder das eher einfach anschaulich. da ich echt keine ahnung habe wie ich von frustumculling mir die objekte holen soll und dann wie sortieren ..

    ich suche aber weiter mal in google .. der hat ja schon oft geholfen 🙂


  • Mod

    Karsten schrieb:

    danke. so habe ich's mir gedacht, aber wie gesagt bin ich nen n00b und brauch wie jeder das eher einfach anschaulich. da ich echt keine ahnung habe wie ich von frustumculling mir die objekte holen soll und dann wie sortieren ..

    ich suche aber weiter mal in google .. der hat ja schon oft geholfen 🙂

    simples frustumculling, dafür müßte es viele tutorials geben, z.b. auf flipcode.com ... ansonsten lass es erstmal sein, es läuft wohl auch so, hauptsache du schafst es den scenegraphen durchzusehen und die objekte in das array zu stecken.

    sortieren ist ebenfalls einfach, du gehst das array einmal durch und berechnest den abstand jedes objektes zur cameraposition, dann sortierst du es nach der berechneten entfernung...

    entfernung := abstandx^2 + abstandy^2 + abstandz^2

    rapso->greets();



  • @rapso
    eigentlich hast du das gleiche geschrieben wie oben. vielleicht versteht er es ja jetzt 😃

    @karsten
    nicht böse gemeint 😃



  • ich würde 2 stl vector's nehmen: einen für die transparenten objekte, und den anderen für alle anderen, dann werden zeichnest du unsortiert alle soliden objekte, sortierst die transparente lsite aufgrund der entfernung zur kamera und zeichnest dann diese.

    so werden nur die transparenten objekte sortiert -> schneller



  • Du hast eine 3D Engine geschrieben, aber weisst noch nichtmal wie man sortiert? Komisch...

    Bye, TGGC (Der Held ist zurück)


  • Mod

    basc schrieb:

    ich würde 2 stl vector's nehmen: einen für die transparenten objekte, und den anderen für alle anderen, dann werden zeichnest du unsortiert alle soliden objekte, sortierst die transparente lsite aufgrund der entfernung zur kamera und zeichnest dann diese.

    so werden nur die transparenten objekte sortiert -> schneller

    wenn du die nicht transparenten von vorne nach hinten zeichnest, dann kannst du bei aufwendiger texturierung oder pixelshadern/fragmentprogramms mehr performance gewinnen als du durch das zusätzliche sortieren verlierst.

    rapso->greets();


Anmelden zum Antworten