3D-Bild in den VideoRam

  • Hallo zusammen!

    Wie kann ich ein 3D-Bild(Modell) in den VRAM einer Grafikkarte laden, damit dieses nicht immer wieder neu gezeichnet werden muss bei jeder Verschiebung/Drehung des Bildes?
    Im Moment wird es Pixel für Pixel gezeichnet (so in etwa ;) ).
    Es geht ja schließlich viel schneller wenn es erst im Video-Ram liegt!

    Anmerkung:
    Ich nutze Java (Eclipse) und Python.

  • was meinst du genau?

    was ist dein model? eine 3d texture? ein polygon haufen?
    was meinst du mir Verschiebung/drehung? soll es nur eine 2D texture sein, die du einfach drehst und scherst?
    verwendest du opengl/directx/java3d?

    bitte erkläre ein bischen genauer dein problem, dann kann ich dir vielleicht helfen...

  • Falls du OpenGL verwendest, kannst du display lists oder vertex array einsetzen. VBOs helfen auch sehr.
    Falls du nicht OpenGL verwendest, solltest du das tun :) 3D-Modelle in Software zu rendern ist hoffnungslos langsam. Eine Java-Lib für OpenGL ist zB lwjgl.

    Aber so is das ganze sehr schwer zu beantworten.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Aufgabe und Problem nun etwas detailierter:

    Ich habe mehrere 2D-Bilder(Schichten: CT-Bilder-nicht transparent), welche ich in ein Stack packe. Diese befinden sich dann (mit Abstand in Z-Richtung) alle übereinander (Man stelle sich einen Würfel vor). Dann werden die Pixel jeder Schicht ausgelesen (durch verschiedene Berechnungen).
    Daraus entsteht dann ein (gerendertes) 3D-Modell.

    Mein Kollege und ich haben einen BeispielCode gefunden der Teile von ImageJ verwendet, unter anderem ImageStack und ImagePlus. Mit diesem BeispielCode ist uns das Rendern möglich aber bei ca. 400 Bildern (Schichten) dauert das in etwa 30sek. Dies sollte jedoch annähernd in Echtzeit geschehen, da das gerenderte 3D-Modell häufig gedreht wird.
    Ziel: Nicht alle Pixel ständig neu zu berechnen!

    Wir würden auch gern OpenGL verwenden, aber uns fehlt die Erfahrung (noch nie verwendet).
    Ich versuchte mich auch mal kurz mit Java3D, aber von Erfahrung kann ich da nicht sprechen.

    Bildgröße(Schicht): 512x512 Pixel
    Grafikkarte: Geforce 6800
    Betriebssystem: Windows XP (und 2000)

    Ich wäre für eventuelle Beispiele sehr dankbar, natürlich auch für jede andere Hilfe!

  • Das ist ein durchaus nicht-triviales Problem, das man kaum in einem Forumspost lösen kann. Dazu kann ich das Buch Real-Time Volume Graphics empfehlen.

    Das fällt übrigens in die Lehrveranstaltung Visualisierung, aber bei dieser Übung ist von realtime-Darstellung auch keine Spur.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Könnte man nich die Schichten zusammen legen, ein 3D modell in einem richtigen "3D Format" machen und das dann über OpenGL einfach aufrufen, drehen und was man halt so braucht?

  • das funktioniert nur, solange man auf die Schichten von vorne (oder hinten) draufschaut, von der Seite geht das nicht mehr.

    Möglich ist allerdings, dass man aus dem ganzen Modell Dreiecke bastelt zur Darstellung, das ist aber auch wieder sehr komplex, und das Endergebnis ist meistens nicht das, was man gerne hätte von einem Volumsdatensatz.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Möglich ist allerdings, dass man aus dem ganzen Modell Dreiecke bastelt zur Darstellung, das ist aber auch wieder sehr komplex, und das Endergebnis ist meistens nicht das, was man gerne hätte von einem Volumsdatensatz.

    Mit Maya und anderen Programmen kann man aber dann wieder das optimieren recht gut! Gibt oft das Problem wenn man z.b. Sachen auf ZBrush raus bringen will in ein 3D Programm, dass man viel zu viele Daten hat. deswegen gibt es ja oft Funktionen das man nahe Vertecies löscht bzw mit einander veschmelzen lässt oder eben nen "Mittelwert" macht und dan den Punkt nimmt. Und mit nem MEL, COFFEE,.. Script wird das schon gehen... und da das ein häufiges Problem ist (aus zu vielen Daten weniger zu machen) sollte es da auch am kostenlosen Sektor einiges gutes geben....

  • Danke für die Hinweise...!

    Ich versuch mich jetzt aber mal mit dem VTK (Visualisation Toolkit).
    Denn dieses soll sogar direkt mit CT-Daten umgehen können und dazu sehr umfangreich sein. (Da muss doch was für mich dabei sein ;) )

    Vergleich zwischen OpenGL und VTK

    Vorteil für OpenGL:

    • Geschwindigkeit des Programmes

    Vorteil für VTK:

    • Geschwindigkeit der Programmerstellung


    Hat damit schon jemand Erfahrung (Java + VTK) sammeln können?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!