Voxel-Struktur renderen?



  • Servus,

    seit längerem arbeite ich an einem kleinen privaten Voxelprojekt. Ich habe nun einen Translitor für Step und JT Daten geschrieben und nach erster Test's verläuft das Einlesen korrekt.

    So, nun zerbreche ich mir schon seit Wochen den Kopf, wie ich mein Voxelmodel auf den Schirm bekomme. In der OpenGL-Dokumentation fand ich keine Hinweise auf eine Unterstützung. Weshalb sich mir eine Frage aufträngt.

    Wie stelle ich ein Voxel-Model dar?

    Mir kahmen folgende Ideen:
    1. Erstellen eines Polygon-Gitter. Leider verliere ich hier alle Vorteile und müsste sogar wieder Texturen erstellen und z.B. UV-Mapping berechnen.

    2. Jedes Voxel ist ein Würfel. Je nach LOD bekomme ich hier eine riesige Datenmenge und kann mir nicht vorstellen, dass dies die gänge Vorgehensweise ist.

    Wie werden Voxelobjekte gerendert? Bzw. Welche Techniken kommen zu Einsatz?

    Das Web schweigt hierzu fast komplett. Zu mindestens ist mir nichts brauchbares in die Hände gefallen.

    Gruß
    Thomas



  • Das Internet quillt doch fast über zu diesem Thema.
    Zwei Sekunden und ich habe einen passenden Wikipedia Eintrag.

    http://de.wikipedia.org/wiki/Marching_Cubes



  • Servus,

    entschuldige für meinen knappen Beitrag, aber mit 1. hab ich in diese Richtung gezielt. Leider fehlt mir ein wenig das Verständnis, wieso ich wieder auf Dreicke bzw. Polygone zurück muss.

    In sehr vielen Artikel ließt man, dass mit Voxel nur Ray-Casting möglich ist und somit zur Schattenberechnung & Co. keine Algorithmen verfügbar sind. Wenn ich auf deine Methode zurück greife, dann ist kann ich ja wieder alles verwenden. Von Raytracing bis ... alles was ich nur möchte.

    Kleine Frage noch. Ist es möglich, aus den Marching Cubes Flächen ala NURBS & Co. zu berechnen? Wenn ja, weißt du eine Anlaufstelle?

    Vielen dank für deinen Beitrag und werde heute noch lange aufbleiben 😃

    Gruß
    Thomas



  • Leider fehlt mir ein wenig das Verständnis, wieso ich wieder auf Dreicke bzw. Polygone zurück muss.

    Weil moderne Grafikkarten eben nur Polygone beschleunigen.
    (OK mit dem General Purpose Computation on Graphics Processing Unit Ansatz kannste auch die anderen Verfahren beschleunigen)
    http://de.wikipedia.org/wiki/General_Purpose_Computation_on_Graphics_Processing_Unit

    Ray-Casting als Raytraycing für Voxelmodelle geht somit natürlich auch.
    Radiosity (mit Finite Element Ansatz oder Montecarlo Ansatz) könnte auch gehen. Wird aber ne ziemlich fummelige Angelegenheit.
    Es ginge sogar schnell (Siehe NURBS Frage unten) wenn du Basen höheren Grades nimmst und dann mit der Galerkin Verfahren rangehst.
    Dann haste Beides ( Marching Cubes und Nurbs Ansatz) nahezu kombiniert.
    Dies würde aber, praktisch gesehen, meine Kenntnisse übersteigen 😉

    Kleine Frage noch. Ist es möglich, aus den Marching Cubes Flächen ala NURBS & Co. zu berechnen? Wenn ja, weißt du eine Anlaufstelle?

    Wie man daraus allgemein NURBS macht weiß ich leider nicht. Aber B-Spline Flächen (als Speziallfall von NURBS) sind recht einfach.
    http://de.wikipedia.org/wiki/Spline

    Einfach des Algorithmus von De Casteljau
    http://de.wikipedia.org/wiki/De_Casteljau-Algorithmus
    2-Dimmensional anwenden.
    Das heißt du berechnest die Punkte der B-Spline Kurve (mit dem 1-Dimmensionalen De-Caseljau wie er auf der Seite steht) z.B für die X-Richtung und nimmst die Ergebnisse einfach um quer dazu z.B in Y-Richtung die Fläche zu berechnen. Dies geschieht wieder mit dem 1 Dimmensionalen De Casteljau.

    Oder direkt die Formel fürs 2 Dimmensionale Verfahren nehmen.
    (Dann kann man es auch ohne De Casteljau allgemein über die Bernsteinpolynome berechnen. Aber besser De-Casteljau 2 mal ineinandergeschachtelt anwenden)

    Hier Seite 14 (Stammt nicht von mir. Habs kurz angelesen und scheint richtig zu sein)
    http://www.mathematik.uni-mainz.de/lehre/cg/WS0405_SCG/SCG/SCG_nurbs/Ausarbeitung.doc



  • Siassei schrieb:

    Kleine Frage noch. Ist es möglich, aus den Marching Cubes Flächen ala NURBS & Co. zu berechnen? Wenn ja, weißt du eine Anlaufstelle?

    Kurz und bündig:
    Für dich nein

    AndreasXXL redet vom Auswerten einer NURBS/B-Spline. Das ist trivial (mit deCasteljau).
    Das Fitten einer BSpline (gegen ein beliebiges Polygonmodell) ist jedoch leider nicht trivial und umfasst folgende Schritte:
    -Netztreduktion zur Ermittelung der Parameterisierungsgebiete
    -lokal Parameterisierung
    -lokal Spline-Fitting
    -global Spline-Blenden

    Wenn du jedoch ein Höhenfeld hast wird's einfacher. Wenn nicht, lass besser die Finger davon

    Gruss, Jochen


  • Mod

    Siassei schrieb:

    Wie stelle ich ein Voxel-Model dar?

    das haengt davon ab wie und was du darstellen moechtest. medizinische voxel-daten wuerde man vermutlich anders darstellen als voxel-daten von Command&conqueror -modellen.

    vorher wird wenig hilfreiches kommen.


Anmelden zum Antworten