zwischen Verticles in VBO Interpolieren



  • Hallo Leute!
    Seit einer weile plage ich mich damit meinen opengl source zu modernisieren und natürlich bin ich dadurch sofort mit shadern in berührung gekommen.
    Momentan werden aus N*M kontrollpunkten

    vec4D CP[N][M]
    

    einem Toleranzwert

    float epsilon
    

    und einem Evaluator

    function<vector<vec4D>(vector<vec4D> CP, size_t N, size_t M ,float tol, float u, float v)> Eval
    

    der für alle (u,v) in einem intervall mit epsilon abständen ausgeführt wird sodass eine TriangleMesh erzeugt wird und anschliesend mit dem alten glBegin() und glEnd() gezeichnet wird.

    Nun frage ich mich, wie man dieses prozedere einer modernen(opengl 4.x) grafikkarte beibringen könnte.
    Das problem suggeriert mir das der Geometry & Tesselations - Shader in frage kämen und ein CP-VBO als GL_PATCHES übertragen werden könnten.
    Nun kommt mir GL_MAX_PATCHES in die Quere da das limit in der regel bei 32 liegt und der Evaluator (im Shader) alle CPs für bel. (u,v) gleichzeitig haben muss.

    Kennt jemand eine gute methode Verticles in einem shader zu erzeugen wenn die CP in einem VBO(oder villeicht TBO?) stecken?



  • Wie viele Vertices hat dein Mesh denn in der Regel so? Ist die Tessellierung dynamisch veränderlich oder wird das Mesh einmal erzeugt und dann nurmehr gerendert? Woran genau scheitert es? Das Maximum von 32, von dem du sprichst, bezieht sich wohl auf die Anzahl der Kontrollpunkte pro Patch!? Was für eine Art von Patches hast du da, dass du mehr als 32 Kontrollpunkte pro Patch benötigst?



  • dot schrieb:

    Wie viele Vertices hat dein Mesh denn in der Regel so? Ist die Tessellierung dynamisch veränderlich oder wird das Mesh einmal erzeugt und dann nurmehr gerendert? Woran genau scheitert es? Das Maximum von 32, von dem du sprichst, bezieht sich wohl auf die Anzahl der Kontrollpunkte pro Patch!? Was für eine Art von Patches hast du da, dass du mehr als 32 Kontrollpunkte pro Patch benötigst?

    Meine Beispieldaten haben etwa 20 * 80 Kontrollpunkte und LOD kann über Epsilon reguliert werden; je nach Epsilon besteht der Mesh aus mehr oder Weniger Daten.
    Bei Beispieldaten dieser größe variiert es zwischen 20*80 und 20*80*1000 Verticles.
    Ein Evaluator könnte zB eine Bezier-Fläche sein.

    Noch verstehe ich nicht ganz wie der GeometrieShader und die TesselationsShader genau zusammenspielen; villeicht erscheint mir desshalb GL_MAX_PATCHES als ein Problem für mich;
    Villeicht sind ja VBOs und GL_PATCHES sogar unpassend?

    Mein verschtendniss von GL_PATCHES ist dass wenn ein VBO zb 64 elemente besitzt, die anzahl der Verticles die zu einem Patch gehören bei zB 32 liegen und ich diese über die Pipeline an die GraKa jage, dass dann der geometry shader zweimal ausgeführt wird nämlich einmal für die ersten 32 und ein weiteres mal für die letzten 32.
    Oder habe ich das falsch verstanden und der shader wird 32 mal(nämlich für alle 32-gruppe die aus nebeneiander ligenden VBO-elementen besteht) ausgeführt?


Log in to reply