Φωτορεαλιστικά γραφικά σε πραγµατικό χρόνο µε τον αλγόριθµο ray marching χρησιµοποιώντας compute shader
Abstract
Αυτή η διατριβή περιγράφει την υλοποίηση ενός αλγορίθµου ‘χύτευσης ακτίνων’ µε τον οποίο µπορείς να ζωγραφίσεις οτιδήποτε σχήµα στο οποίο µπορείς να ορίσεις την συνάρτηση απόστασής του. Το πρόγραµµα είναι γραµµένο µε C++ και χρησιµοποιεί την OpenGL και την GLFW βιβλιοθήκη. Από την στιγµή που η OpenGL ζωγραφίζει µόνο τριγωνα, εφαρµόστηκε µια τεχνική γνωστή ως ‘ζωγραφίζοντας κόσµους σε δύο τρίγωνα’ η οποία εφαρµόζει δύο τρίγωνα σε όλο το παράθυρο για να δηµιουργήσει ένα τετράγωνο και ζωγραφίζει µε τον αλγόριθµο µία υφή την οποία εφαρµόζει πάνω στα τρίγωνα αυτά. Ο παράλληλος προγραµµατισµός ήταν αναγκαίος εφόσον τρέχει σε πραγµατικό χρόνο, για αυτό, το πρόγραµµα χωρίζει την δουλειά σε οµάδες εργασίας ανάλογες µε το πλήθος των νηµάτων της κάρτας γραφικών. This thesis describes the implementation of a ray casting algorithm in which you can draw any shape, where you can define a distance function for it. The program is written in C++ and uses the OpenGL API and the GLFW library. Since OpenGL can only draw triangles, a technique known as “rendering worlds with two triangles” was applied. This technique draws two triangles that cover the window to create a quad and later on the algorithm draws a texture which is then applied on that quad. Parallel programming was needful since the program runs in real-time, so the program splits the work to different work groups, which they’re proportional to the GPU’s threads.