ΘΕΜΑΤΑ ΥΠΟΛΟΓΙΣΤΙΚΗΣ ΟΡΑΣΗΣ ΚΑΙ ΓΡΑΦΙΚΩΝ ΕΙΣΑΓΩΓΗ RASTERING INTRODUCTION TO OPENGL. Ε. Θεοδωρίδης, Α. Τσακαλίδης 2013-2014



Σχετικά έγγραφα
5ο Μάθημα Αλγόριθμοι Σχεδίασης Βασικών Σχημάτων

OpenGL. Εισαγωγή στην OpenGL Βασικά Γεωμετρικά Σχήματα Παράλληλη (ορθογραφική) προβολή. Μάθημα: Γραφικά Υπολογιστών και Εικονική Πραγματικότητα

Γραφικά με υπολογιστές

Προγραμματισμός γραφικών

Εισαγωγή στην OpenGL: μέρος 1ο

Αλγόριθµοι Παράστασης Βασικών Σχηµάτων

Γραφικά Υπολογιστών: OpenGL

OpenGL. Εισαγωγή. Εξάμηνο: 2014Β. Διδάσκουσα: Κανελλοπούλου Χριστίνα_ΠΕ19 Πληροφορικής Ηλεκτρονική Τάξη:

Εισαγωγή στην OpenGL

Εισαγωγή. Γιατί γραφικά υπολογιστών; Προσέγγιση «από πάνω προς τα κάτω» (top-down). Βαθµίδα διασύνδεσης προγραµµατιστή εφαρµογών (API)

Δθμιουργία, μελζτθ και βελτιςτοποίθςθ φωτορεαλιςτικϊν απεικονίςεων πραγματικοφ χρόνου με χριςθ προγραμματιηόμενων επεξεργαςτϊν γραφικϊν

Απεικόνιση Υφής. Μέρος Α Υφή σε Πολύγωνα

Εισαγωγή στην OpenGL

Αλγόριθμοι παράστασης βασικών σχημάτων σε πλεγματικές οθόνες

Αλγόριθµοι Παράστασης Βασικών Σχηµάτων

Γραφικά Υπολογιστών: Μέθοδοι Ανίχνευσης Επιφανειών (Surface Detection Methods)

Εισαγωγή. Γιατί γραφικά υπολογιστών; Προσέγγιση «από πάνω προς τα κάτω»(topdown). Βαθμίδα διασύνδεσης προγραμματιστή εφαρμογών (API)

Γραφικά Υπολογιστών: Αλγόριθμοι Σχεδίασης Γραμμών

Αλγόριθµοι Παράστασης Βασικών Σχηµάτων

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διαλέξεις #05 & #06. Διδάσκων: Φοίβος Μυλωνάς. Γραφικά με υπολογιστές. Αλγόριθμος Σχεδίασης Κύκλου Αλγόριθμος Σχεδίασης Έλλειψης

Γραφικά Υπολογιστών: Σχεδίαση γραμμών (Bresenham), Σχεδίασης Κύκλων, Γέμισμα Πολυγώνων

Homework 8 Model Solution Section

Η διαδικασία Παραγωγής Συνθετικής Εικόνας (Rendering)

Γραφικά Υπολογιστών: Θέαση στις 3D

Γραφικά με Η/Υ Αλγόριθμοι σχεδίασης βασικών 22D D σχημάτων (ευθεία

Αρχιτεκτονική Υπολογιστών

Τεχνολογία Ψυχαγωγικού Λογισμικού και Εικονικοί Κόσμοι Ενότητα 4η - 3Δ γραφικά

Εισαγωγή Αποκοπή ευθείας σε 2Δ Αποκοπή πολυγώνου σε 2Δ Αποκοπή σε 3Δ. 3ο Μάθημα Αποκοπή. Γραφικα. Ευάγγελος Σπύρου

Instruction Execution Times

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Γραφικά με υπολογιστές. Διδάσκων: Φοίβος Μυλωνάς. Διάλεξη #07

Εικόνα. Τεχνολογία Πολυμέσων και Πολυμεσικές Επικοινωνίες 05-1

Γραφικά με Η/Υ / Εισαγωγή

1 ο Εργαστήριο Συντεταγμένες, Χρώματα, Σχήματα

Δημιουργώντας σχεδιοκίνηση στο περιβάλλον 3Ds Max χρησιμοποιώντας βασικά εργαλεία

Άσκηση 6 η Ανύψωση Σχημάτων. Στόχος της άσκησης

Εργαστήριο Τεχνολογίας Πολυμέσων & Γραφικών, Τ.Ε.Π Π.Μ, Μάθημα: Γραφικά με Η/Υ

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Απαραίτητες αφού 3Δ αντικείμενα απεικονίζονται σε 2Δ συσκευές. Θέση παρατηρητή. 3Δ Μετασχ/σμός Παρατήρησης

ECE 468: Digital Image Processing. Lecture 8

Διδάσκων: Φοίβος Μυλωνάς

Ψηφιακή τέχνη DIGITAL ART

References. Chapter 10 The Hough and Distance Transforms

Βασικές αρχές σχεδίασης (Α)

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Απόδοση 3D σκηνών - Κινούµενα γραφικά

ΘΕΜΑΤΑ ΥΠΟΛΟΓΙΣΤΙΚΗΣ ΟΡΑΣΗΣ ΚΑΙ ΓΡΑΦΙΚΩΝ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΙ ΑΠΟΚΟΠΗ Ε. Θεοδωρίδης, Α. Τσακαλίδης

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα CAD / CAM. Ενότητα # 6: Γραφικά

Parametrized Surfaces

Blending. Have a look:

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΤΟΜΕΑΣ ΥΔΡΑΥΛΙΚΗΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΙΚΗΣ ΤΕΧΝΙΚΗΣ. Ειδική διάλεξη 2: Εισαγωγή στον κώδικα της εργασίας

2.0 ΒΑΣΙΚΕΣ ΓΝΩΣΕΙΣ-ΟΡΟΛΟΓΙΕΣ

Τεχνολογία Παιγνίων. Τεχνολογία Παιγνίων. Τεχνολογία Παιγνίων. Εισαγωγή στο Easy Java Simulations (EJS)

Σήματα και Συστήματα ΙΙ

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

Απεικόνιση δεδομένων (data visualization)

7 ο Εργαστήριο Θόρυβος 2Δ, Μετακίνηση, Περιστροφή

Γραφικά Υπολογιστών Εισαγωγή

Μοντελοποίηση τρισδιάστατου κόσμου σε πραγματικό κόσμο: το παράδειγμα του Kinect. ιδάσκων: Φ. Αζαριάδης Φοιτήτρια: Άρτεμις-Αγγελική Σφύρη

ΔΙΑΚΡΙΤΟΣ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ FOURIER - Discrete Fourier Transform - DFT -

Διάλεξη #04. Διδάσκων: Φοίβος Μυλωνάς. Γραφικά με υπολογιστές. Φαινόμενο Ταύτισης. Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Χειμερινό εξάμηνο

Γραφικά & Οπτικοποίηση. Κεφάλαιο 1. Εισαγωγή. Γραφικά & Οπτικοπίηση: Αρχές & Αλγόριθμοι Κεφάλαιο 1

Εισαγωγή στο 3DS Max 2009

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Δημιουργώντας εφέ φωτισμού στο περιβάλλον 3Ds Max χρησιμοποιώντας βασικά εργαλεία

Reminders: linear functions

Εικόνες και γραφικά. Τεχνολογία Πολυµέσων 05-1

Η Βιβλιοθήκη Γραφικών OpenGl Με Χρήση C/C++, JAVA και PYTHON

Γραφικά Υπολογιστών: Αποκοπή στις 3D Διαστάσεις

Γραφικά με Η/Υ Αλγ λ ό γ ρ ό ιθ ρ μοι κύκλου & έλλειψης

Συσκευές εισόδου. Φυσικές συσκευές εισόδου Λογικές συσκευές εισόδου

Τεχνολογία Πολυμέσων. Ενότητα # 5: Εικόνα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 9 Ανάλυση Fourier: Από τη Θεωρία στην Πρακτική Εφαρμογή των Μαθηματικών

GRAPHICS AND CODE DESIGN

Section 9.2 Polar Equations and Graphs

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Εργασία στα Γραφικά Υπολογιστών Ακαδημαϊκό Έτος

Χορεύοντας με τα teraflops

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

Οδηγίες για το Geogebra Μωυσιάδης Πολυχρόνης Δόρτσιος Κώστας

Άσκηση 6 Σύνθετα Αντικείµενα. Στόχος της άσκησης

Γραφικά Ι. Ενότητα 1: Εισαγωγή. Θεοχάρης Θεοχάρης Σχολή Θετικών Επιστημών Τμήμα Πληροφορικής και Τηλεπικοινωνιών

Λειτουργικά Συστήματα. Εισαγωγή

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

HMY 429: Εισαγωγή στην Επεξεργασία Ψηφιακών Σημάτων. Διάλεξη 22: Γρήγορος Μετασχηματισμός Fourier Ανάλυση σημάτων/συστημάτων με το ΔΜΦ

Οπτική Επικοινωνία 4 - Α.Ε Προτεινόμενες ρυθμίσεις V-Ray 3.4 για Rhino. Υλικά

Καλλιτεχνική δηµιουργία στους εικονικούς κόσµους στο διαδίκτυο.

Block Ciphers Modes. Ramki Thurimella

CHAPTER 12: PERIMETER, AREA, CIRCUMFERENCE, AND 12.1 INTRODUCTION TO GEOMETRIC 12.2 PERIMETER: SQUARES, RECTANGLES,

Γεωμετρικές Σκιές. Θ. Θεοχάρης Ι. Κακαδιάρης - Γ. Πασσαλής

ΜΕΘΟΔΟΙ ΑΕΡΟΔΥΝΑΜΙΚΗΣ

Δημιουργώντας γραφικά στο περιβάλλον 3Ds Max χρησιμοποιώντας βασικά εργαλεία

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ

Partial Differential Equations in Biology The boundary element method. March 26, 2013

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

ΣΧΕΔΙΑΣΗ ΣΥΣΤΗΜΑΤΩΝ ΜΕ ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΩΝ (E-CAD) ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Χ. Βέργος Καθηγητής

Transcript:

ΘΕΜΑΤΑ ΥΠΟΛΟΓΙΣΤΙΚΗΣ ΟΡΑΣΗΣ ΚΑΙ ΓΡΑΦΙΚΩΝ ΕΙΣΑΓΩΓΗ RASTERING INTRODUCTION TO OPENGL 2013-2014 Ε. Θεοδωρίδης, Α. Τσακαλίδης

Εισαγωγή Real Time Rendering 3 rd edition OpenGL - Superbible 5 th Edition Γραφικά Θεοχάρης Rows of switches and lights CRT, laser & inkjet printers 2d dot rendering - ASCII chars Lines, circles, polygons

Πηγαίνοντας στις 3Δ (1) 3Δ ένα αντικείμενο που περιγράφεται ή «απεικονίζεται» και έχει τρεις (3) διαστάσεις πλάτος, ύψος, βάθος Ζωγραφική, Γραφικά τεχνικές «ζωγραφικής» στο επίπεδο (καμβάς, οθόνη κλπ) ώστε να δημιουργείται η ψευδαίσθηση του βάθους

Πηγαίνοντας στις 3Δ (2) Προοπτική γωνίες μεταξύ των ευθειών 3D monitors προσέγγιση της 3D όρασης Σκίαση επιφανειών Μέγεθος αντικειμένων Χρώματα, υφές κλπ

3Δ Γραφικά (1) Rendering διαδικασία παραγωγής 2Δ/3Δ εικόνας από μαθηματικά μοντέλα ή/και εικόνες Vertices Lines Triangles/polygons Transformations Projections Hidden surface removal Rasterization

3Δ Γραφικά (2) Shading Lighting Texture mapping Blending Graphics: Geometry dots, lines, triangles rasterizing triangles Transformation Shading Texture Blending

Αρχές 3Δ Προγραμματισμού Σύστημα συντεταγμένων Αντικειμένων οθόνης Αποκοπή συντεταγμένων Viewport: αντιστοίχιση συντεταγμένων γεωμετρίας στις συντεταγμένες του παραθύρου

Graphics Rendering Pipeline (1) Generate a 2d-image Virtual camera 3d objects Light sources Shading equations Textures

Graphics Rendering Pipeline (2) Conceptual stages Functional stages Pipeline stages Slowest stage rules rendering speed (fps) Application cpu Geometry: {transformations, projections } gpu Rasterizer: {draw image, per pixel computations} gpu

Application Stage Application Logic Produces geometry primitives geometry stage Points, lines, triangles Collision detection at this level Input from sources: keyboard, mouse Texture animation/ animation via transforms Acceleration algorithms : e.g. Frustum culling

Geometry Stage (1) Majority of per-polygon, per-vertex operations Model & View Transform Model space (model coordinates) Model transforms Instances with difference in location, size, etc World Space (world coordinates) Camera (location, direction) View transform/camera space

Geometry Stage (2) Vertex Shading model appearance Objects material Effect Light shining on the object Shading equation (points of the object, material data) Material data = {location, normal, color } Output = {colors, vectors, texture coordinates } Interpolated in the rasterization stage

Geometry Stage (3) Projection Transform view volume into unit cube (-1,-1,-1), (1,1,1) Orthographic projection Perspective projection Farther = smaller Parallel lines converge Flustrum into cube

Geometry Stage (4) Clipping Primitives in the view volume go to rasterizer stage Primitives partially in view volume are Clipped Primitives are clipped against the unit cube User defined clipping planes Fixed operation hardware

Geometry Stage (5) Screen Mapping 3d primitives (x,y) coords screen coordinates + z coords rasterizing stage Screen mapping coords Different to APIs Fixed operation hardware

Rasterizer Stage (1) Compute and set colors for pixels covered by object 2d coords from screen space + z coords + shading information pixels on the screen Triangle Setup Fixed operation hd Triangle data for scan conversion/interpolation of triangle surface

Rasterizer Stage (2) Triangle Traversal/Scan Conversion Fixed operation hd Find which pixels are inside a triangle and value with interpolation Pixel Shading Per pixel shading using interpolated shading data GPU programmable cores!!!!! Texturing

Rasterizer Stage (3) Merging Information for each pixel in color buffer Merge (current colors, fragment colors) Fixed hardware Resolving visibility according z coord (depth buffer) Alpha channel - related opacity Stencil buffer (Raster/blend operations) Frame buffer (Accumulator buffer) Double Buffering

Graphic Processing Unit (1) Graphic acceleration from right to left Rasterization of triangles scanlines 1999 NVIDIA GeForce256 GPU Hardware vertex shading Complex fixed pipeline highly programmable Some parts remain configurable Programmable shaders Vertex shaders (transformation, deformation ) Pixel shaders - custom per pixel shading equation Geometry shader (create primitives on the fly)

Graphic Processing Unit (2) Vertex Shader Geometry Shader (optional, create/destroy primitives) Modern shaders (shader model 4.0, DirectX, ) common-shader core, programming model C-like shading languages HSSL, Cg, GLSL Compiled machine independent assembly language Assembly language machine language in driver

Graphic Processing Unit (3) Virtual machine PROCESSOR Registers Data sources Single instruction multiple data capabilities Draw Call API call Draw a group of primitives pipeline Uniform inputs (consts values ) e.g. texture Varying inputs Fastest ops: scalar and vector *,+, multiply add, dot-product Sqrt, reciprocal, sin, cosine, exp, log Texturing ops are costly due to access (i/o, ) Flow control and dynamic flow control (more costly ) Compilation offline / runtime stored as a txt and passed to GPU via the driver

Graphic Processing Unit (4) Evolution 1984 shade trees Programmable shading via multiple rendering passes Quake III 1999 RenderMan 2000 2001 Nvidia Gforce 3 GPU programmable vertex shaders (Dx, OGL) Very limited programs without FLOW CONTROL compute both branches and interpolate DirectX Shader Model 2002 DirectX 9.0 SM 2.0 + OpenGL 16 bit floating point New ops DirectX HLSL OpenGL GLSL 2004 Shader Model 3 Increased resources Xbox 360 2005, Pstation 3 2006 2006 Wii fixed function GPU IDE for developing Shaders 2007 Shader Model 4 (DX10,OpenGL) Uniform programming model

Graphic Processing Unit (5) Vertex Shader DirectX: input assembler for list of vertices, list of colors etc and perform instancing, id them for later use Triangle mesh = nodes list that form triangles Vertex shader modifies, creates or ignore for each vertex color, texture coords and position (older versions in CPU, now in GPU) Vertex shader is common to VM Each vertex passed in is processed by vertex shader program, values are interpolated across lines or triangles This can run in parallel cores in GPU (each vertex is processed independently)

Graphic Processing Unit (6) Vertex Shader Effects Lens Effects Shadow volume, vertex blending, silhouette rendering, lens effects: fish eyed, underwater Object definition Object twist, bend, taper Primitive creation by sending meshes down the pipeline Page curls, heat haze, water ripples Vertex texture fetch: ocean surface, terrain height

Graphic Processing Unit (7) Geometry Shader Optional use Input : single object and its vertices (triangle, line, point) +3 nodes on triangle or 2 on line Output: one on zero primitive a mesh can selectively modified by editing vertices, adding new primitives or removing others Input one type of object (e.g.. Triangles) output maybe another type of triangles (e.g. Points centers) FIFO processing of objects slow performance (maybe by sorting) e.g. Produce a bush from a leaf it not efficient to implemented in geometry shader This stage is about the modification of incoming data or making a limited # of copies

Graphic Processing Unit (8) Pixel Shader (Fragment Shader) Each triangle covers a pixel cell (fully or partially) Material there is opaque or transparent Pixel color doesn t effect directly but in merger Limitation: pixel shader can only influence the fragment handling it does not uses the results of neighbor pixels but from vertex interpolation Set fragment color for merging Depth value can be modified Fog computation, alpha testing Merger Depths and colors of fragments are combined in the color buffer Operations (stencil buffer, z buffer, color blending) High configurable

Graphic Processing Unit (9) Shader Example Unification of vertex shader and pixel shader HLSL Variables

Graphic Processing Unit (10)

Αλγόριθμοι Παράστασης Βασικών Σχημάτων

Αλγόριθμοι Σχεδίασης Ευθειών Στόχος Η επιλογή των pixel κοντά στην μαθηματική πορεία της ευθείας Πάχος ευθείας σταθερό-ανεξάρτητο από το μήκος και την κλίση της Ποιο είναι το μικρότερο πάχος? Σε ποιες κλίσεις επιτυγχάνεται αυτό? Ταχύτητα σχεδίασης ικανοποιητική Γιατί χρειάζεται να είναι αποδοτικοί αυτοί οι αλγόριθμοί?

Αλγόριθμος με τη βοήθεια της αλγεβρικής εξίσωσης ευθείας (1) P 1 (x 1,y 1 ) - P n (x n,y n ) Από αναλυτική γεωμετρία: y = s x + b s = y n - y 1 / x n - x 1 b = y 1 x n y n x 1 / x n x 1

Αλγόριθμος με τη βοήθεια της αλγεβρικής εξίσωσης ευθείας (2) int x1, y1, xn, yn, colour; Line1 (x1,y1,xn,yn,colour){ float s, b, y; int x; s= (yn-y1) / (float) (xn-x1) ; b= (y1*xn yn*x1) / (float) (xn-x1); for (x=x1; x<=xn; x++){ y=s*x + b; setpixel (x, round (y), colour); } }

Αυξητικός Αλγόριθμος (incremental) (1) Για κάθε επανάληψη η τιμή του x αυξάνεται κατά 1 (x i+1 = x i + 1) Y i+1 = s x i+1 + b = sx i + b + s = y i + s Άρα ο πολλαπλασιασμός μπορεί να αντικατασταθεί από πρόσθεση Το pixel στο βήμα i υπολογίζεται με βάση το pixel στο βήμα i 1 Αποφεύγεται ο υπολογισμός του b

Αυξητικός Αλγόριθμος (incremental) (2) int x1, y1, xn, yn, colour; Line2 (x1,y1,xn,yn,colour){ float s, y; int x; s= (yn-y1) / (float) (xn-x1) ; y= y1; for (x=x1; x<=xn; x++){ setpixel (x, round (y), colour); y= y + s; } }

Αλγόριθμος χωρίς στρογγύλευση (1) Η πράξη στρογγύλευσης του round (y) μπορεί να αποφευχθεί εάν χωρίσουμε τη μεταβλητή y σε ακέραιο και δεκαδικό μέρος Το δεκαδικό μέρος το θεωρούμε ως μεταβλητή (του) error Error = κατακόρυφη απόσταση του (x i +1, y i ) από την ιδεατή πορεία της ευθείας

Αλγόριθμος χωρίς στρογγύλευση (2) int x1, y1, xn, yn, colour; Line1 (x1,y1,xn,yn,colour){ float s, error; int x, y; s= (yn-y1) / (float) (xn-x1) ; y= y1; error= 0; for (x=x1; x<=xn; x++){ //y= s*x + b; setpixel (x, y, colour); error= error + s; if (error >= 0.5){ y++; error--; } } }

Αλγόριθμος Bresenham (1) Με κλιμάκωση των s, error μπορούμε να έχουμε πράξεις ακεραίων χωρίς επίδραση των pixel Πολλαπλασιάζοντας με dx= x n -x 1, το s και το error γίνονται ακέραιοι. Άρα s=dy και error>=dx/2 (Το τελευταίο καθορίζει και την επιλογή του pixel) Αφαιρώντας από την αρχική τιμή του error το ακέραιο [dx/2], η τιμή του γίνεται error>=0

Αλγόριθμος Bresenham (2) int x1, y1, xn, yn, colour; line4 (x1,y1,xn,yn,colour){ int x, y, error, dx, dy; dx = xn-x1; dy = yn-y1; y = y1; error = - dx/2; for (x=x1; x<=xn; x++){ //y = s*x + b; setpixel (x, y, colour); error = error + dy; if (error>=0){ y++; error = error - dx; } } }

Αλγόριθμος Bresenham (3) Ο αλγόριθμος Bresenham λειτουργεί για x 1 <x n και βρίσκονται στο πρώτο οκταμόριο Για τη μεταφορά σε άλλα οκταμόρια, θα πρέπει κάθε φορά το (x 1, y 1 ) να συμπέσει με την αρχή των αξόνων (μεταφορά του ευθύγραμμου τμήματος) Βασικό μειονέκτημα είναι ότι ευθύγραμμα τμήματα διαφορετικής κλίσης μπορεί να σχεδιάζονται με διαφορετική φωτεινότητα (αυτό διορθώνεται με τεχνικές αντιταύτισης)

Αλγόριθμος Bresenham (4)

Αλγόριθμος σχεδίασης κύκλου (1) Στον κύκλο μπορούμε να εκμεταλλευτούμε την ύπαρξη 8- πλής συμμετρίας Πώς υπάρχει 8-πλη συμμετρία στον κύκλο? Άρα μπορούμε να εξετάσουμε τη σχεδίαση του κύκλου σε ένα οκταμόριο Στα υπόλοιπα οκταμόρια τι γίνεται? Έστω Ο η αρχή των αξόνων (κέντρο κάποιου pixel) και r η ακτίνα, ακέραιος αριθμός Που βάζουμε την αρχή των αξόνων και γιατί? Η ρουτίνα circle_symmetry σχεδιάζει τα 8 συμμετρικά σημεία ενός αρχικού σημείου (x,y) Πώς? Ποια αντικατάσταση των x και y μπορεί να βοηθήσει στους υπολογισμούς και γιατί?

Αλγόριθμος σχεδίασης κύκλου (2) int x, y, colour; circle_symmetry (x, y, colour){ setpixel (x, y, colour); setpixel (y, x, colour); setpixel (y, -x, colour); setpixel (x, -y, colour); setpixel (-x, -y, colour); setpixel (-y, -x, colour); setpixel (-y, x, colour); setpixel (-x, y, colour); }

Αλγόριθμος σχεδίασης κύκλου (με Bresenham) (3) Έστω (x i,y i ) Έστω το σημείο στο 2 ο οκταμόριο όπου το x βρίσκεται σε άξονα ταχύτερης κίνησης Άρα πρέπει να επιλέξουμε το pixel (x i +1, y i ) ή το (x i +1, y i -1) Ο Bresenham έδειξε ότι μια ικανοποιητική μεταβλητή απόφασης για την επιλογή του pixel είναι η e i =d 1 -d 2 όπου d 1 =y i2 -y 2 και d 2 =y 2 -(y i -1) 2 Αν e>=0 τότε επιλέγουμε το 2 ο σημείο (x i +1, y i -1), διαφορετικά το 1 ο (x i +1, y i )

Αλγόριθμος σχεδίασης κύκλου (4)

Αλγόριθμος σχεδίασης κύκλου (5) Για x=x i +1 ισχύει y 2 =r 2 -(x i +1) 2 e i =2(x i +1) 2 + y i 2 + (y i -1) 2 2r 2 (1) Η τιμή του e i+1 υπολογίζεται επαναληπτικά: e i+1 =2(x i+1 +1) 2 + y i+1 2 + (y i+1-1) 2 2r 2 = e i + 4x i + 6 + 2(y i+1 2 y i2 ) 2(y i+1 y i ) Και για τον υπολογισμό του e i+1 κάνουμε το εξής τέχνασμα Αν e i <0: y i+1 =y i δηλαδή e i+1 =e i + 4(x i +1) + 6 Αν e i >=0: y i+1 =y i -1 δηλαδή e i+1 =e i + 4(x i +1) + 2 4(y i - 1)

Αλγόριθμος σχεδίασης κύκλου (6) Θεωρούμε σαν πρώτο σημείο του (x,y) = (0, r) και επομένως μπορούμε να υπολογίσουμε την αρχική τιμή της μεταβλητής απόφασης (με βάση τη σχέση e i =2(x i +1) 2 + y i 2 + (y i -1) 2 2r 2 ) Εάν το κέντρο του κύκλου δεν είναι το (0, 0) αλλά κάποιο σημείο (x o, y o ) circle_symmetry (x + x o, y + y o, colour)

Αλγόριθμος σχεδίασης κύκλου (7) int r, colour; circle (r, colour){ x = 0; y = r; e = 3-2*r; while (x<=y){ circle_symmetric (x, y, colour); x++; if (e>=0){ y--; e = e - 4*y; } e = e + 4*x + 2; } }

Αλγόριθμοι Σχεδίασης Κωνικών Τομών (1) Κωνικές Τομές = Έλλειψη, Υπερβολή, Παραβολή Η μεθοδολογία των Αγάθου-Θεοχάρη-Μπεμ ακολουθεί το σκεπτικό του Bresenham στον κύκλο Γρήγορος, μικρή απαίτηση ακρίβειας ακεραίων, σωστή μετάβαση περιοχής, εύκολα επιδέχεται αντιταύτιση

Αλγόριθμοι Σχεδίασης Κωνικών Τομών (2) Η έλλειψη έχει εξίσωση: x 2 /a 2 + y 2 /b 2 = 1

Αλγόριθμοι Σχεδίασης Κωνικών Τομών (3) Υπάρχει 4πλη συμμετρία Δημιουργούμε μόνο 2 περιοχές Αυτές χωρίζονται από το σημείο όπου dx/dy = -1 Στην 1 η περιοχή ο βασικός άξονας κίνησης είναι ο x ενώ στην δεύτερη είναι ο y Άρα αρκεί να βρούμε Επαναληπτικές εκφράσεις για τον υπολογισμό των μεταβλητών απόφασης στις 2 περιοχές Τις αρχικές τιμές των μεταβλητών απόφασης Μία συνθήκη που να σηματοδοτεί την μετάβαση από την περιοχή 1 στην περιοχή 2

Μεταβλητή Απόφασης Περιοχής 1 (1) Άξονας κύριας κίνησης ο x Εκκίνηση από (0, b) Τέλος περιοχής όταν dx/dy = -1 Σύμφωνα με Bresenham, η τιμή του x θα αυξάνεται κατά 1 και θα πρέπει να αποφασίζουμε αν η τιμή του y θα παραμένει ίδια ή θα μειώνεται κατά 1

Μεταβλητή Απόφασης Περιοχής 1 (2) Α(x i, y i ) Β (x i +1, y i ) C (x i, y i -1) D (x i +1, y i -1)

Μεταβλητή Απόφασης Περιοχής 1 (3) Ορίζουμε d 1 = (y i 2 y 2 ) d 2 = y 2 - (y i 2 1) Και θέτουμε: d = d 1 d 2 Το αποτέλεσμα της σύγκρισης της d με το 0 καθορίζει την επιλογή μεταξύ του Β και του D (όπως στον κύκλο) Για τον υπολογισμό της μεταβλητής απόφασης με την εξίσωση της έλλειψης, θέτουμε e = y i y μεταβάλλοντας την απόφαση σε d(e) = -2e 2 + 4y i e + 1 2y i

Μεταβλητή Απόφασης Περιοχής 1 (4) Για e = ½ έχουμε τιμή απόφασης d(1/2) = ½ Αν d<=1/2 επιλέγουμε το pixel B Αν d>1/2 επιλέγουμε το pixel D

Μεταβλητή Απόφασης Περιοχής 1 (5) Οι αυξητικοί υπολογισμοί διευκολύνονται περαιτέρω αν αρχικά πάρουμε d = a 2 (d 1 d 2 ) (Η μεταβλητή απόφασης στο βήμα i της περιοχής 1) Οπότε η συνάρτηση απόφασης γίνεται d(e) = -2 a 2 e 2 + 4 a 2 y i e + a 2 2 a 2 y i Αν d<= a 2 /2 επιλέγουμε το pixel B Αν d> a 2 /2 επιλέγουμε το pixel D

Μεταβλητή Απόφασης Περιοχής 1 (6) Στον αλγόριθμο που χρησιμοποιεί αποκλειστικά ακέραιες μεταβλητές η διαίρεση με το 2 υλοποιείται με ολίσθηση Όμως από την εξίσωση της έλλειψης για το σημείο (x i +1, y i ) έχουμε: a 2 y 2 = a 2 b 2 - b 2 (x i +1) 2 οπότε: d 1,i = -2 a 2 b 2 + 2 b 2 (x i +1) 2 + a 2 y 2 + 2 a 2 (y i -1) 2 Αν d 1,i <= a 2 /2 τότε y i+1 = y i -1 Αν d 1,i > a 2 /2 τότε y i+1 = y i Η αρχική τιμή d 1,0 βρίσκεται αντικαθιστώντας τις συντεταγμένες του 1 ου pixel της περιοχής 1 (0, b) για τα (x i, y i )

Μετάβαση από την περιοχή 1 στην περιοχή 2 (1) Λόγω 4πλης συμμετρίας χρειάζεται να σχεδιάσουμε το 1 τεταρτημόριο (τα υπόλοιπα υπολογίζονται με συμμετρία) Χρειαζόμαστε ένα κριτήριο μετάβασης από την μία περιοχή στην άλλη (όπου αλλάζει και ο άξονας κύριας κατεύθυνσης) Αυτό το κριτήριο στηρίζεται στην τιμή του d για το σημείο (x i +1, y i -3/2) Αν η έλλειψη περνά κάτω από το σημείο αυτό τότε απαιτείται αλλαγή περιοχής

Μετάβαση από την περιοχή 1 στην περιοχή 2 (1) Για e = 3/2 έχουμε τιμή απόφασης: d(3/2) = -2 a 2 (3/2) 2 + 4 a 2 y i (3/2) + a 2 2 a 2 y i Αν d<=d (3/2) τότε παραμένουμε στην περιοχή 1 Αν d>d (3/2) τότε μεταβαίνουμε στην περιοχή 2 Παρόμοια βρίσκουμε την μεταβλητή απόφασης περιοχής 2d 2,i

Μεταβλητή απόφασης Περιοχής 2 Ορίζουμε d 1 = (x i 2 + 1) - x 2 d 2 = x 2 - x i 2 Και θέτουμε: d = d 1 d 2 Με επιλογή του pixel Α στην γραμμή i, η d = b 2 (d 1 d 2 ) καθορίζει την επιλογή στην επόμενη γραμμή μεταξύ των C και D Αν d<=b 2 /2 τότε επιλέγουμε το pixel D Αν d>b 2 /2 τότε επιλέγουμε το pixel C

Χρωματισμός Πολυγώνων (1) Για πλεγματικές οθόνες Μέθοδοι γεμίσματος που στηρίζονται στη συνάφεια των pixels του εσωτερικού αντικειμένου Γέμισμα με βάση την περίμετρο Γέμισμα με βάση το υπάρχον χρώμα Μέθοδοι σάρωσης που στηρίζονται στην γεωμετρική περιγραφή της περιμέτρου ενός αντικειμένου Σάρωση πολυγώνου (ΥΧ) - Αλγόριθμος Υ-Χ - Αλγόριθμος Αλγόριθμος κρίσιμων σημείων

Χρωματισμός Πολυγώνων (2) Γέμισμα με βάση την περίμετρο Είσοδος: Ένα εσωτερικό σημείο (x, y) Το χρώμα της περιμέτρου Το χρώμα που θέλουμε να χρωματίσουμε το πολύγωνο Εκμεταλλευόμαστε τη συνάφεια των 4 ή 8 πλησιέστερων γειτονικών Αναδρομική εφαρμογή του αλγορίθμου Έξοδος όταν φτάσουμε σε pixel που έχει το χρώμα της περιμέτρου (ή το χρώμα που θέλουμε)

Χρωματισμός Πολυγώνων (3) Γέμισμα με βάση το υπάρχον χρώμα Είσοδος: ένα εσωτερικό σημείο (x, y) Το χρώμα το υπάρχον (το εσωτερικό του πολυγώνου) Το χρώμα που θέλουμε να χρωματίσουμε το πολύγωνο Εκμεταλλευόμαστε τη συνάφεια των 4 ή 8 πλησιέστερων γειτονικών Αναδρομική εφαρμογή του αλγορίθμου Έξοδος όταν φτάσουμε σε pixel που δεν έχει το χρώμα το εσωτερικό της εκκίνησης

Ταύτιση (Aliasing) (1)

Ταύτιση (Aliasing) (2) Τα παριστάμενα αντικείμενα είναι συνεχή σήματα ενώ αντίθετα η οθόνη στην οποία απεικονίζονται αποτελείται από διακριτά σημεία (pixels) Θεωρούμε τα pixels σημεία δειγματοληψίας (sampling points) για την ψηφιακή αντιπαράσταση της συνεχούς εικόνας Θεώρημα Nyquist: Η πιστή αναπαραγωγή ενός σήματος ή συχνότητα δειγματοληψίας πρέπει να είναι υπερδιπλάσια της μεγαλύτερης f s > 2 f max Διαφορετικά: παρατηρείται το φαινόμενο της ταύτισης

Ταύτιση (Aliasing) (3) Αποτελέσματα ταύτισης Εμφάνιση τεθλασμένων ευθύγραμμων τμημάτων και ακμών πολυγώνων Λανθασμένη εμφάνιση επαναλαμβανόμενων λεπτομερειών αντικειμένων (π.χ. ίδια αντικείμενα σε απόσταση μικρή το ένα από το άλλο) Λανθασμένη εμφάνιση μικρών αντικειμένων (π.χ. αντικείμενο με συνεχείς εμφανίσεις και εξαφανίσεις ανάλογα με την θέση του)

Αντιταύτιση (Antialiasing) (1) Αλγόριθμος Pitteway & Watkinson - παραλλαγή του αλγορίθμου Bresenham Λύνει το πρόβλημα για μία πλευρά πολυγώνου κι όχι για 2 και περισσότερες Σωστή απόχρωση οριακών pixel Μέθοδος αντιταύτισης με Μεταφιλτράρισμα (post filtering) Λειτουργεί με αύξηση του αριθμού των δειγμάτων Δημιουργεί μία εικόνα με περισσότερα σημεία Βρίσκει το χρωματικό μέσο όρο των σημείων που αντιστοιχούν σε κάθε πραγματικό pixel Μέθοδος αντιταύτισης με Προφιλτράρισμα (pre filtering) Εξαγωγή από το σήμα συχνοτήτων μεγαλύτερων ή ίσων με το μισό της συχνότητας δειγματοληψίας πριν την εκτέλεσή της

Post Filtering

Αντιταύτιση (Antialiasing) (2) Μέθοδος Αντιταύτισης με Μεταφιλτραρίσμα Μειονεκτεί στο ότι δεν λαμβάνει υπόψη τα περιεχόμενα της εικόνας-είδωλο Ενεργεί σε ένα ήδη ψηφιοποιημένο περιβάλλον με προκαθορισμένη συχνότητα δειγματοληψίας

Αντιταύτιση (Antialiasing) (3) Μέθοδος Αντιταύτισης με Προφιλτραρίσμα Αλγόριθμος αντιταύτισης Catmull: δεν λαμβάνει υπόψη τη σταδιακή μεταβολή της τιμής φωτισμού κάθε πολυγώνου αλλά θεωρεί ότι κάθε πολύγωνο έχει σταθερή χρωματική απόχρωση σε όλη του την επιφάνεια Αντιταύτιση A-buffer: Παρουσιάζει αδυναμία επεξεργασίας πολυγώνων που τέμνονται εντός του pixel καθώς δεν είναι δυνατόν να ταξινομηθούν ως προς το βάθος (Ζ)

RasterOp (1) Πλεγματικές Οθόνες: το χρώμα φυλάσσεται σε μία ειδική μνήμη (frame buffer) Πολλές λειτουργίες υλοποιούνται με μετακινήσεις ή/και συνδυασμούς στην μνήμη οθόνης Π.χ. Επεξεργαστής κειμένου, παραθυρικές εφαρμογές

RasterOp (2)

RasterOp (3) Διαπιστώθηκε ότι μεγάλος αριθμός των μετακινήσεων/συνδυασμών αφορούσε ορθογώνιες παραλληλόγραμμες ομάδες pixel RasterOp: Γενική ρουτίνα μετακίνησης/συνδυασμού ορθογώνιων παραλληλόγραμμων τμημάτων εικόνας, ταχέως υλοποιημένη Συνδυάζει παραμετρικά pixel προς pixel 2 ισομεγέθη ορθογώνια παραλληλόγραμμα τμήματα της μνήμης, τα source και destination και γράφει το αποτέλεσμα στο destination

RasterOp (4)

RasterOp (5)

RasterOp (6) Ασπρόμαυρες οθόνες: η function είναι κάποια από τις 16 δυαδικές λογικές συναρτήσεις XOR: ιδιαίτερα χρήσιμη για την αντιμετώπιση των source και destination χωρίς τη χρήση βοηθητικού χώρου

RasterOp (7) Η exchange είναι χρήσιμη για τις διαδοχικές μετακινήσεις κάποιου αντικειμένου Η περιοχή που εκάστοτε καλύπτεται από το αντικείμενο φυλάσσεται στο back

RasterOp (8)

Αρχές 3Δ προγραμματισμού 3Δ - Σύστημα συντεταγμένων 3Δ 2Δ Projection-προβολή Ορθοκανονική προβολή Προβολή προοπτικής Α Α Προβολείς Κέντρο προβολής Α Β Παράθυρ ο Β Προβολείς Κ Α Β Κέντρο προβολής Β Παράθ υρο y στο άπειρο y y x z y z y Παράλληλη Προβολή z y Προβολή Προοπτικής

OpenGL (1) a software interface to graphics hardware OpenGL API C, C++, Java, Python GLSL OpenGL Shading Language Programs use OpenGL API OpenGL Software Implementations Mesa3D OpenGL Hardware Implementations: nvidia, ATI Apple, etc OpenGL Implementation = graphic card + driver OpenGL extensions (SGI_, ATI_, AMD_, )

OpenGL (2) OpenGL 3.x 3.0 Deprecated functionalities 3.1 GL_ARB_compatibility 3.2 core profile - compatibility profile Using OpenGL Procedural API Δεν περιγράφει απλώς την σκηνή Περιγραφή των βημάτων για την κατασκευή (draw primitives, texture mapping, blending, transparence, animation) Windows management, user interaction, file i/o GLUT

OpenGL (3) GLEW extension libraries GLTools math lib, geometric objects Data Types: Glboolean,Glubyte, Glchar, Glint Errors: glgeterror(), GL_INVALID_VALUE, GL_INVALID_OPERATION Version: const Glubyte * glgetstring(glenum name);

OpenGL (4) OpenGL state machine - set of variable void glenable(glenum capability); void gldisable(glenum capability); glenable(gl_depth_test); //gldisable Glboolean GLIsEnabled(Glenum capability);

OpenGL (5) Χειρίζεται ένα σύνολο από αντικείμενα (σημεία, γραμμές, πολύγωνα) και εικόνες (images, bitmaps) και τα μετατρέπει σε εικονοστοιχεία Low-level, procedural API: δημιουργία και βήματα απόδοσης σκηνής (Δεν μπορούμε απλώς να περιγράψουμε την σκηνή!) καλή γνώση της διασωλήνωσης των γραφικών, δυνατότητα προγραμματισμού νέων αλγόριθμων απόδοσης σκηνών

OpenGL (6) Evaluator: έλεγχος των μοντέλων Vertex Operations: μετασχηματισμοί και φωτισμός ανάλογα με την υφή. Αποκοπή μη ορατών μερών για την παραγωγή του όγκου που φαίνεται Rasterisation: απόδοση της πληροφορίας σε εικονοστοιχεία (απόδοση πολυγώνων με χρώμα με χρήση παρεμβολής, απόδοση υφής κλπ) Per Fragment Operations: ανανέωση τιμών (βάθους, χρώματος κλπ) ήδη υπαρχόντων τμημάτων

OpenGL (7) Games: Counter Strike, Doom 3, Call of Duty, Unreal, Second Life, Quake, Deus Ex, Applications: Blender, 3d Studio Max, Celestia, Google Earth,

Related APIs AGL, GLX, WGL Σύνδεση της OpenGL με παραθυρικά συστήματα GLU (OpenGL Utility Library) Μέρος της OpenGL NURBS, tessellators, quadric shapes, etc. GLUT (OpenGL Utility Toolkit) Portable windowing API (creation, handling, monitoring keyboard, mouse) Δεν είναι μέρος της OpenGL

OpenGL και σχετικά APIs application program OpenGL Motif widget or similar GLUT GLX, AGL or WGL GLU X, Win32, Mac O/S GL software and/or hardware

Direct3D (1) DirectX API: MS windows, Xbox Rendering 3d graphics: hardware acceleration z-buffer, antialiasing, blending, visual effects texture mapping, μετασχηματισμοί, αποκοπή, φωτισμός, depth buffering

Direct3D (2) Input Assembler: είσοδος κόμβων Vertex shader: μετασχηματισμοί, αποκοπή, σκίαση Geometry shader: επεξεργασία αντικειμένων Rasterizer: αντικείμενα σε εικονοστοιχεία, αποκοπή, παρεμβολή μεταξύ κόμβων Pixel Shader: χρωματισμός εικονοστοιχείων και βάθος αντικειμένου

OpenGL vs. Direct3D (1) Portability OpenGL: Windows, Unix Based, MacOS, OpenSolaris, Playstation 3, Nintendo GameCube, Wii, Nintendo DS, PSP, Iphone, Android, Symbian Os Direct3D: Windows, Xbox, Sega Dreamcast, WINE (unix based OS) Χρηστικότητα OpenGL: C, C++,VB, Ada, Delphi, Python Direct3D: Microsoft COM, MS C++, Delphi, C#, VB.NET OpenGL 3d rendering που μπορεί να επιταχυνθεί από το υλικό Direct3D 3d hardware interface

OpenGL vs. Direct3D (2) OpenGL 3d rendering που μπορεί να επιταχυνθεί από το υλικό Η υλοποίηση της βιβλιοθήκης διαχειρίζεται τους πόρους του υλικού δύσκολη υλοποίηση driver Direct3D 3d hardware interface, χαρακτηριστικά από το υλικό Η εφαρμογή διαχειρίζεται τους πόρους του υλικού, πιο σύνθετη υλοποίηση εφαρμογής, βελτιστοποίηση της χρήσης του υλικού

OpenGL vs. Direct3D (3) Απόδοση OpenGL: user-mode part, kernel-mode part driver Direct3D: kernel mode drivers (D3D 10) Professional Graphics OpenGL: SGI, SoftIMAGE, Alias PowerANimator, Direct3D: παιχνίδια

Εισαγωγικά Headers Files #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> Libraries Enumerated Types OpenGL defines numerous types for compatibility GLfloat, GLint, GLenum, etc. http://www.opengl.org/documentation/specs/glut/spec3/spec3.html

GLUT Basics Δομή Εφαρμογής Παραμετροποίησε και άνοιξε το παράθυρο Αρχικοποίησε την κατάσταση της OpenGL Κατέγραψε τις συναρτήσεις χειρισμού εισόδου (input callback functions) Render Resize Input: keyboard, mouse, etc. Όρισε τον βρόγχο χειρισμού γεγονότων

Παράδειγμα void main( int argc, char** argv ) { int mode = GLUT_RGB GLUT_DOUBLE; glutinitdisplaymode( mode ); glutcreatewindow( argv[0] ); init(); glutdisplayfunc( display ); glutreshapefunc( resize ); glutkeyboardfunc( key ); glutidlefunc( idle ); glutmainloop(); }

OpenGL Initialization Όρισε τι κατάσταση πρόκειται να χρησιμοποιηθεί void init( void ) { glclearcolor( 0.0, 0.0, 0.0, 1.0 ); glcleardepth( 1.0 ); } glenable( GL_LIGHT0 ); glenable( GL_LIGHTING ); glenable( GL_DEPTH_TEST );

GLUT Callback Functions Διαδικασίες που καλούνται όταν κάτι συμβαίνει Window resize or redraw User input Animation Καταχώρισε callbacks with GLUT glutdisplayfunc( display ); glutidlefunc( idle ); glutkeyboardfunc( keyboard );

Rendering Callback glutdisplayfunc( display ); void display( void ) { glclear( GL_COLOR_BUFFER_BIT ); glbegin( GL_TRIANGLE_STRIP ); glvertex3fv( v[0] ); glvertex3fv( v[1] ); glvertex3fv( v[2] ); glvertex3fv( v[3] ); glend(); glutswapbuffers(); }

Idle Callbacks Animation void idle( void ) { t += dt; glutpostredisplay(); } glutidlefunc( idle );

User Input Callbacks Process user input glutkeyboardfunc( keyboard ); void keyboard( unsigned char key, int x, int y ) { switch( key ) { case q : case Q : exit( EXIT_SUCCESS ); break; case r : case R : rotate = GL_TRUE; glutpostredisplay(); break; } } -lglut32 -lglu32 -lopengl32 -lwinmm -lgdi32

OpenGL Geometric Primitives Γεωμετρικά Βασικά Στοιχεία GL_LINE_STRIP GL_LINE_LOOP GL_POINTS GL_LINES GL_POLYGON GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP

Παράδειγμα void drawrhombus( GLfloat color[] ) { glbegin( GL_QUADS ); glcolor3fv( color ); glvertex2f( 0.0, 0.0 ); glvertex2f( 1.0, 0.0 ); glvertex2f( 1.5, 1.118 ); glvertex2f( 0.5, 1.118 ); glend(); }

OpenGL Command Formats glvertex3fv( v ) Number of components 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w) Data Type b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double Vector omit v for scalar form glvertex2f( x, y )

Ορισμός Γεωμετρικών Αντικειμένων Ορισμός glbegin( primtype ); glend(); primtype ορίζει πως οι κορυφές συνδυάζονται GLfloat red, green, blue; Glfloat coords[3]; glbegin( primtype ); for ( i = 0; i < nverts; ++i ) { glcolor3f( red, green, blue ); glvertex3fv( coords ); } glend();

OpenGL Color Models CPU Poly. DL Per Vertex Texture Raster Frag FB RGBA or Color Index Pixel color index mode Red Green Blue 1 2 4 8 16 0 1 2 3 24 25 26 123 219 74 Display RGBA mode

OpenGL