Aufgabe 1: Probleme mit dem Framework?
Results 1 to 12 of 12
  1. #1

    Title
    Veteran
    Join Date
    Jun 2015
    Posts
    2
    Thanks
    1
    Thanked 1 Time in 1 Post

    Aufgabe 1: Probleme mit dem Framework?

    Ich habe mehrere Fragen bez. Aufgabe 1, die schon beim Anfangen Probleme bereiten.

    1. Bounding Box: Es ist erforderlich, um den Datensatz herum eine "Bounding Box" aufzubauen die, wenn ich die Angabe richtig verstehe xyz-Koordinaten zwischen (0,0,0) und (1,1,1) haben soll.
      Konventionell verwendet man in OpenGL und C++ ein float-Array um Vertex Positionen zu definieren; das würde am ehesten in der Initialisierung passieren. Kann man davon augehen, dass die Variable cube_vertices[] “bereits die Eckpunkte der gedachten Bounding Box beinhält? Diese haben aber Koordinaten zwischen (-1,-1,-1) und (1,1,1). AuBerdem, teilt dieses Array die 8 Vertices in je 4 für eine front und back Seite. Da sich die Kamera drehen kann, kann man sicher sein, dass die Front und Back Faces immer die selben sind? Möglich ist es natürlich auch, sich selbst ein float-Array zu bauen, ich bin mir aber nicht sicher, ob das auch so gedacht ist.
    2. FBOs: Wie rendere ich mit Qt in ein FBO? Ich habe probiert diese Frage zu googlen, aber die Lösungsansatze die ich finde sind nicht wirklich anwendbar. Zum Beispiel, wenn ich im Bereich der TODOs in GLWidget.cpp glClear() aufrufe, cleart das den Inhalt des Anwendungs-Fensters. (Auch getestet mit ändern der clear Farbe.) Sowie ich es verstehe, ist im Normalfall der Vorgang vom "in FBOs rendern" folgender:
      1. 1. QOpenGLFramebufferObject erstellen - im Framework sind bereits zwei Instanzen dieser Klasse initialisiert und bei den TODOs aufrufbar, nämlich m_FBO_frontFaces und m_FBO_backFaces. Ich nehme an, dass die fur diesen Zweck gedacht sind.
      2. 2. das FBO binden mit z.B. m_FBO_frontFaces->bind(), damit nachfolgende Zeichenbefehle in dieses FBO gerendert werden.
      3. 3. Zeichenbefehle ausführen, wie zum Beispiel glDrawArrays( ), ein simples glClear() müsste aber eigentlich auch im FBO alle Pixel im Frame auf eine Farbe setzen.
      4. 4. das FBO releasen mit z.B. m_FBO_frontFaces->release()
        Zu diesem Zeitpunkt müsste ich dann auch m_FBO_frontFaces->toImage().save("test.jpg") ausführen können, um den Inhalt des FBOs testhalber zu speichern, aber dabei entsteht kein solches File. (EDIT: speichern als jpg funktioniert nicht, aber als png schon)

    3. Libraries & Debug Configuration: Ich habe ebenfalls das Problem, dass das Framework nur in der Release Configuration und nicht in der Debug Configuration startbar ist. Laut diesem Post könnte es helfen, die Libraries auszutauschen; ist das Sinnvoll? Und wie würde ich da am besten vorgehen? Zum Beispiel, verwendet die open source Version von Qt einen Installer, aber mir ist nicht ganz klar was für Komponenten am besten bei der Installation ausgewählt werden sollen.

    Sorry dass es gleich so viele Fragen auf einmal sind, hoffe aber jemand kann mir helfen!
    Last edited by numberers; 27-11-2017 at 11:59.

  2. The Following User Says Thank You to numberers For This Useful Post:


  3. #2

    Title
    Principal
    Join Date
    Mar 2015
    Posts
    45
    Thanks
    1
    Thanked 4 Times in 4 Posts
    Hallo

    1.)Cube_Vertices beschreibt bereits die Koordinaten der Bounding Box. Die Texturkoordinaten die, wie richtig gesagt, zwischen [0,0,0] und [1,1,1] liegen müssen, sollen im Shader als Farbe codiert in eine Textur geschrieben werden. Das Mapping wird also im Shader gemacht. Das Front und Back bei den Koordinaten soll euch nur als Orientierung dienen und haben nicht direkt etwas mit den Front und Backfaces der Würfelflächen zu tun.

    2.) Der beschriebene Ablauf ist soweit richtig. m_FBO_frontFaces->toImage().save("test.jpg") gibt einen bool zurück. Du kannst einmal schauen ob es "true" zurückgibt. Es kann sein, dass das Programm keine Schreibrechte auf dem Ausgabeordner hat. Dann hilft es Vs im Administratormodus zu starten. Es kann auch sein, dass das Bild im appdata Ordner abgelegt wird. Qt ist da manchmal etwas seltsam. Es kann auch helfen sich ein Debugtool für die Ausgabe von Texturen zuzulegen. Damit kann man zur Laufzeit Inhalte von Framebuffern und Texturen anschauen (Bei AMD ist es z.B.: CodeXL).

    3.) Die Debug Probleme sind leider wirklich etwas anstrengend. Das Framework ist dieses Semester neu und bei Tobias und mir geht es seltsamerweise auf mehreren Geräten problemlos. Es sollte helfen wenn du einfach die Debug Bibliotheken von Qt tauscht (das sind alle dll und lib Dateien die ein "d" hinten im Namen haben. z.B.: QtCored.dll und QtCord.lib). Dabei ist es auch egal welche Qt Verion du nutzt, Hauptsache die Debug Libs und Dlls sind von der gleichen Version. Die Release können dabei unangetastet bleiben. Ansonsten kannst du auch im Releasemode debuggen (https://msdn.microsoft.com/en-us/library/fsk896zz.aspx).

    Wenn es noch mehr Fragen gibt oder etwas unverständlich ist, bitte einfach weiter fragen Zu viele Fragen gibt es nicht
    Andreas
    Visualisierung 1 Tutor

  4. The Following User Says Thank You to Andros For This Useful Post:


  5. #3

    Title
    Veteran
    Join Date
    Jun 2015
    Posts
    2
    Thanks
    1
    Thanked 1 Time in 1 Post
    Danke für die Antwort!
    1.)Cube_Vertices beschreibt bereits die Koordinaten der Bounding Box. Die Texturkoordinaten die, wie richtig gesagt, zwischen [0,0,0] und [1,1,1] liegen müssen, sollen im Shader als Farbe codiert in eine Textur geschrieben werden. Das Mapping wird also im Shader gemacht.
    Dafür wird cube.glsl verwendet, korrekt? Das heißt, ich muss zuerst die vertices (also die in cube_vertices) raussuchen, die die front faces bilden, also die drei faces, die der Kamera näher sind als die anderen drei. Das könnte ich zum Beispiel über m_camera.mPos herausfinden. Dann muss ich diese Vertices dem Shader übergeben, das würde über ein VBO passieren. Vertex Buffer (und Index Buffer) gibt es nach Initialisierung (je) nur einen; soll derselbe für alle Renderschritte verwendet werden?

  6. #4

    Title
    Principal
    Join Date
    Mar 2015
    Posts
    45
    Thanks
    1
    Thanked 4 Times in 4 Posts
    Es genügt wenn du die vorhandenen Vertexbuffer benutzt. Die Texturkoordinaten sollen fest den verschiedenen Vertices zugeordnet sein. Z.b.: (-1.0, -1.0, -1.0) hat immer die Koordinate (0, 0, 0) in der Textur (als Beispiel. Wie es richtig aussieht werdet ihr schnell herausfinden) . Somit ist gesichert, dass bei der Drehung auch das Volumen mitgedreht wird. Die Verticeskoordinaten werden in jeden Fall schon dem Cube.glsl (der, wie richtig erkannt, für das Rendern der Koordinatentextur benutzt werden soll) übergeben. Wie du dir vielleicht vorstellen kannst ist es besser das mapping vor der Transformation der Vertices in Pixelcoodinaten zu machen, da die Zuordnung sonst schwieriger ist. Koordinaten die am Ende nicht sichtbar sind fliegen im Fragmentshader-Schritt automatisch heraus.

    Kleiner Tipp: Etwas das sich kompliziert anhört, kann in der Mathematik oft als eine Formel dargestellt werden

    Edit: Hab mich gerade daran erinnert, dass ihr die Texturkoordinaten sowieso auch schon gegeben habt. Also ist das Mapping gar nicht erforderlich
    Last edited by Andros; 29-11-2017 at 19:34.
    Andreas
    Visualisierung 1 Tutor

  7. #5

    Title
    Principal
    Join Date
    Nov 2016
    Posts
    27
    Thanks
    1
    Thanked 0 Times in 0 Posts
    Hallo

    Ich habe das soweit mit den Front und Back Faces hinbekommen. Hänge aber beim richtigen Anzeigen des Volumenmodells. Den ray kann ich schon samplen, da ich das Modell sehen kann. Aber es wird abgeschnitten, verzerrt wenn ich es mit der Maustaste rotiere. Mir ist nicht ganz klar wie ich den raycasting vertex shader mit der richtigen Position befüllen kann. Ich habe es wie mit dem cube Shader versucht.

    vielen dank

  8. #6

    Title
    Principal
    Join Date
    Mar 2015
    Posts
    45
    Thanks
    1
    Thanked 4 Times in 4 Posts
    Ohne Bild ist es etwas schwer die Lage einzuschätzen aber ich versuche eine Antwort darauf zu finden:
    1.) Hast du im Front und Backfacemodus getestet ob die Texturen richtig sind? Beim drehen sollten sich alle Farben mit dem Cube mitdrehen und in der Aufgabenstellung sind Bilder wie die Farbverteilung aussehen muss.

    2.) Im Raycastingschritt wird das Quad als Grundgeometrie verwendet.

    3.) Die Texturkoordinaten werden im Raycasting-Shader aus den Vertexpositionen berechnet. Diese sind wieder zwischen -1 und 1 wobei die z Koordinate immer 0 ist. Dieser Bereich muss in den Bereich von 0 und 1 gecastet werden. Im Fragment-Shader können diese dann für die Start und Endpunkte verwendet werden.

    4) Das Lobstermodell ist nicht quadratisch. Deswegen wird das beim drehen immer verzerrt sein. Es ist nicht gefordert diesen zu entzerren (ist aber gerne gesehen wenn es gemacht wurde )

    Sollte ich die Frage falsch verstanden haben, bitte wieder melden! Gerne auch mit Bildern. Solltest du hier keine Screenshots posten wollen/können, kannst du sie mir auch per Mail schicken (meine Mail findest du auf der Homepage. Sie ist mit meinen Namen verlinkt) oder im OpenLab vorbeikommen (Termine stehen auf der Homepage).
    Andreas
    Visualisierung 1 Tutor

  9. #7

    Title
    Principal
    Join Date
    Nov 2016
    Posts
    27
    Thanks
    1
    Thanked 0 Times in 0 Posts
    Hallo Andreas

    Vielen Dank für Deine Antwort. ad 2: dh. statt cube_vertices verwende ich quad_vertices. ad 3: ich uebergebe an raycasting.vertex die vertex (quad_elements) und texture coordinates (quad_texCoords). Heisst das, dass ein vertex (-1,-1,0) in eine uv(0,0) gemappt und an den fragment shader übergeben werden soll ?

    Vielen Dank

    hier ist mein Backface: (Bild 2)
    hier ist mein FrontFaceBild 5)

    head: (Bild 3)
    head rotiert (mit Maus): Bild 4)
    head rotiert andere Sicht:
    lobster: (Bild 1)
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	lobster.JPG 
Views:	16 
Size:	37.8 KB 
ID:	25877   Click image for larger version. 

Name:	bf.JPG 
Views:	19 
Size:	18.8 KB 
ID:	25873   Click image for larger version. 

Name:	head0.JPG 
Views:	16 
Size:	49.0 KB 
ID:	25874   Click image for larger version. 

Name:	head1.JPG 
Views:	14 
Size:	44.4 KB 
ID:	25875   Click image for larger version. 

Name:	ff.JPG 
Views:	12 
Size:	18.3 KB 
ID:	25876  

    Last edited by jobell34; 30-11-2017 at 18:20. Reason: changed pictures

  10. #8

    Title
    Principal
    Join Date
    Mar 2015
    Posts
    45
    Thanks
    1
    Thanked 4 Times in 4 Posts
    quad_texCoords sind im Framework nicht gegeben, lassen sich aber im Vertexshaderbereich vom Raycastshader leicht aus den Vertices berechnen. Das Mapping hast du genau richtig erfasst
    Die Front und die Backface Texturen sehen gut aus. Der Lobster ist beim drehen immer verzerrt. Der Grund hierbei liegt daran, dass das Volumen nicht würfelförmig ist. Um dieses Volumen zu verschönern, kann man die Bounding Box mit einer Transformationsmatrix auf das Volumenverhältnis transformieren. Das ist aber nicht Teil der Aufgabe und muss daher auch nicht gemacht werden! (Wir freuen uns aber natürlich, wenn Extras gemacht werden ). Die Stufenartefakte, die leicht zu sehen sind, können durch die Erhöhung der Samplingrate auf dem Rays vermindert werden (das erhöht aber natürlich die Rechenzeit erheblich).

    Der Schädel sieht auch recht gut auf den Fotos aus (soweit ich das sehe). Das rund um den Schädel ist Rauschen und die Aufliegefläche. Wenn du dir trotzdem nicht ganz sicher bist, kannst du mir auch die GLWidged Datei + die beiden Shaderdateien per Mail schicken. Dann schaue ich mir das einmal live an
    Andreas
    Visualisierung 1 Tutor

  11. #9

    Title
    Veteran
    Join Date
    Dec 2016
    Posts
    1
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Hallo!
    Ich habe folgendes Problem: Wenn ich eine Datei geladen habe und dann nachher eine andere laden will, stürzt das Programm mit folgender Meldung ab:
    Cannot resize a texture that already has storage allocated.
    To do so, destroy() the texture and then create() and setSize()

    Wenn ich destroy() ausführe, gibt es aber natürlich eine Access Violation. Wenn ich create ausführe, müsste ich alle Informationen hardcoden, was sicher nicht richtig ist. Wo liegt mein Denkfehler?

  12. #10

    Title
    Principal
    Join Date
    Mar 2015
    Posts
    45
    Thanks
    1
    Thanked 4 Times in 4 Posts
    Hallo
    Ich muss das erst rekonstruieren (komme aber vielleicht erst am Freitag dazu) aber hier schon mal Gedanken dazu:

    - Diese Funktion ist zwar nett wenn sie da ist, ist aber nicht Punkterelevant und muss nicht gemacht werden.
    - Es kann sein, dass das Problem darin besteht, dass ein anderer Thread (durch die Usereingabe) das Destroy() nicht aufrufen darf und daher die Access Violation entsteht. Du könntest versuchen beim Laden ein Flag zu setzen und die Texturänderung dann in der Paintloop durchzuführen.
    Andreas
    Visualisierung 1 Tutor

  13. #11

    Title
    Veteran
    Join Date
    Apr 2015
    Posts
    5
    Thanks
    1
    Thanked 0 Times in 0 Posts
    Hallo,

    Wir haben folgendes Problem: Unsere Implentierung funktioniert bei uns auf einem externen Bildschirm (siehe Screenshot unten). Komischerweise erhalten wir, nachdem wir den Bildschirm abschließen, nur mehr ein schwarzes Bild (man kann aber die Texturen sehen).

    Click image for larger version. 

Name:	Screenshot.jpg 
Views:	10 
Size:	59.7 KB 
ID:	25882Click image for larger version. 

Name:	Screenshot2.jpg 
Views:	9 
Size:	41.3 KB 
ID:	25883

    Ist dieses Problem bekannt, bzw. gibt es irgendwelche Lösungsvorschläge?


    NACHTRAG: Wir haben Visual Studio jetzt nicht mit der integrierten Grafikkarte, sondern direkt mit der NVIDIA-Karte gestartet. Es scheint nun zu funktionieren

    Könnte die Spiegelung in unserer Lösung so passen?

    Click image for larger version. 

Name:	SCreenshot4.PNG 
Views:	8 
Size:	271.6 KB 
ID:	25885

    Danke für die Hilfe!
    Attached Thumbnails Attached Thumbnails Click image for larger version. 

Name:	Screenshot3.jpg 
Views:	6 
Size:	58.7 KB 
ID:	25884  
    Last edited by arora; 11-12-2017 at 12:47.

  14. #12

    Title
    Principal
    Join Date
    Mar 2015
    Posts
    45
    Thanks
    1
    Thanked 4 Times in 4 Posts
    Hallo
    Es gibt auch andere Gruppen, bei denen die Visualisierung bei manchen Grafikkarten nicht geht. Wir müssen da erst ein wenig herumtesten, um zu sehen woran das liegen könnte. Intel Grafikkarten scheinen die meisten Probleme zu haben, NVIDIA die Geringsten.

    Zu den Spiegelungen: Die sind etwas seltsam und sollten eigentlich nicht zu sehen sein. Es sieht so aus als wenn die UV Koordinaten noch nicht ganz stimmen. Habt ihr die Front und Backfacetexturen mit den Bildern in der Aufgabenstellung verglichen?

    Oder habt ihr eigene Texturen für die Framebuffer erstellt und die Randbehandlung ist auf Repeat eigenstellt? (eigene Texturen sind an sich nicht notwendig, da die Framebuffer schon welche haben.)

    Edit: vielleicht samplet ihr auch zu weit. Überprüft ob ihr auch wirklich in der im Backface angegebenen Position den Ray stoppt
    Last edited by Andros; Yesterday at 10:44.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •