Grafics amb computador

Hardware: pantalla. {API} de sortida. Representació d'objectes. Visualitzación 3D. Visibilitat. Culling. Il·luminació. ZBuffer. Parts amagades

5 downloads 234 Views 192KB Size

Recommend Stories


MANTENIMIENTO PREVENTIVO DEL COMPUTADOR
MANTENIMIENTO PREVENTIVO DEL COMPUTADOR 1. 2. 3. El mantenimiento preventivo Herramientas para el mantenimiento Mantenimiento de la unidad central.

240AR015 - Visión por Computador
Última modificación: 20-05-2016 240AR015 - Visión por Computador Unidad responsable: 240 - ETSEIB - Escuela Técnica Superior de Ingeniería Industria

Estructura del Computador
ARQ. DE COMPUTADORAS • • • • • Arquitectura de Computadoras Ing. Carlos Bacalla Villalobos Universidad Peruana Union Filial Tarapoto Semana 02.2 Ing

Story Transcript

GRAFICS AMB COMPUTADOR TEMA 1.− PERSPECTIVA GENERAL SOBRE ELS GRÀFICS TEMA 1.− PERSPECTIVA GENERAL SOBRE ELS GRÀFICS Requeriments generals d'una aplicació gràfica Pels requeriments que necessitem hem de mirar l'estructura d'una aplicació gràfica, que treballa sobre un o diversos models que representem a pantalla (visualitzar), tembé poden haber models que entren informació gràfica i que es pugui modificar aquesta informació. El requeriments d'una apliació gràfic són els següents: • Tenir un model gràfic. Un model gràfic consisteix en estructures de dades que representen els nostres objectes gràfics. L'obejcte gràfic serà una estructura amb informació gràfica, que es pot presentar en pantalla. Segons el nombre d'objectes gràfics en una imatge podem distingir dos nivells: · Representació d'un objecte: model d'objecte. Per representar un model d'objecte necessitem tres informacions: la geometria de l'objecte (coordenades dels punts), la topologia (relacions d'adjacència entre els components d'un objecte, com podria ser l'existència d'una aresta entre dos vèrtexs. Si només hi ha una possibiltat d'unir els vèrtexs llavos parlem de topologia implicita) i les propietats o atributs (nomes ens interessaran les propietats gràfiques com podria ser el color, la transparencia, la textura, etc.) · Representació d'un conjunt d'objectes: base de dades gràfiques. En aquest cas necessitem la representació de cada objecte i les relacions topologiques que hi hagin entre els diferents objectes que composem la base de dades. • S'ha de poder visualitzar, es a dir, poder tenir una representació per pantalla. La visualització s'ha de poder realitzar en perifèrics de sortida, com podria ser els següents: · Pantalles raster: pantalla formada per una matriu de pixels. · Impresores, plotters... L'aplicació al final el que fa és asignar un color a cada pixel. En el cas d'objectes tridimensionals l'aplicació ha de realitzar una projecció. model 3D _! analogic _! (real)

projecció

_!

pantalla raster 2D raster discreta

rasterització _! (pixel)

Les impresores les considerarem com dispositius raster, per tant, per dibuixar podem utilitzar els mateixos algorismes per a la visualització de l'objecte per pantalla. Els plotters, en canvi, son dispositius vectorials on es piten directament linees i no pixels com als dispositius raster.

1

• S'ha de poder interactuar amb la peça gràfica. S'ha de permetre a l'usuari seleccionar informació gràfica sobre la visualització (presentació). La selecció gràfica s'ha de poder fer amb els perifèrics d'entrada, tals com un ratolí, el teclat, un llapis òptic, o fins i tot amb un joystick. Elements de Hardware: La Pantalla Nosaltres treballem amb pantalles de tecnologia CRT (Tub de Raigs Catodics). Aquestes pantalles tenen un recobriment de fosfor, i el tub dispara electrons que fa que el fosfor s'il.lumini. L'excitació del fosfor nomes dur un cert temps concret per tant necessitem un refresc en temps discret a una freqüencia donada, que fa que l'excitació dels pixels es mantengui. Aquesta freqüència és l'anomenada de refresc que actualment es de 60 Hz, la freqüència s'ha adaptar a l'ull humà per evitar així l'efecte de pampalluga (flickering). No només hi ha un recobriment de fosfor, sino que n'hi ha tres: un verd, un blau i un vermell. Cada capa s'excita a una velocitat donada i per tant es necessiten 3 pistoles d'electrons. Un pixel (unitat de pantalla) esta format per tres petits pigments, un de cada color que pertanyen a cadascuna de les capes (pigments RGB). La combinació d'aquests pigments dona qualsevol tipus de color. Per asegurar que cada pistola excita el seu pigment tenim la mascara de metall que seria com una colador que deixa passar el raig adequat a cada pigment. un subconjunt de les pantalles amb tecnologia CRT són les pantalles RASTER. Pantalles Raster En aquestes pantalles, les unitats de pantalla (pixel) tenen una representació en memòria. Així al fer el refresc es fa consultant aquesta memòria (mirem el color de cada pixel). Aquesta memòria associada s'anomena Frame Buffer que es declara com: taula [max resolució X .. max resolució Y] de colors La dimensió de la taula ens indica el nombre de pixels de la pantalla. En una cel.la d'aquesta taula trobem la representació lògica del color del pixel. Quan surt algun objecte a pantalla (pintat) el que es fa és un recorregut exhaustiu del frame buffer (FB). El recorregut (o escombrat per files, barrido) es fa per fies. Una fila del framebuffer constitueix una scan_line. Color La informació més smple és que el color sigui un sol bit. Si el FB esta format per un bit per pixel tindrem un pla de color on només podrem escollir entre dos colors, es a dir, només tindrem dos colors simultanis en la pantalla. Si volem més colors afegirem plans de color, en cada pla nou només tindrem un bit, però per cada pixel tindrem tantsbits com plans hi hagin. El color es codifica en un nombre determinat de bits. El coor del FB son n bits per pixel, on n és el nombre de plans de color.

2

El nombre total de colors que es poden representar son: 2n on n és el nombre de plans/bits. Les pistoles d'electrons permeten generar els colors fisicament possibles amb 2w possibilitats. Tambe tenim un FB al hardware que permet codificar els 2n color simultanis. En aquest cas sempre tindrem menys colors simultanis dels que pot generar la pistola d'electrons (w " n) Exemple teoric: w=3 ! 8 colors fisicament possibles: Pantalla: B (black), W (white), Y (yellow), G (green), Bl (blue), R (red), M (magenta), C (cyan) n=2 ! 4 colors simultanis Depenent de l'aplicació es poden escollir les combinacions que es vulguin de colors simultanis. (Y, G, Bl, R) (B, W, R, G)... Quan n=w podem tenir simultaneament tots els colors fisicament possibles, en aquest cas la paleta serà innecessaria teoricament, però en la realitat existeix una paleta amb 2n=2w entrades. El que es guarda al frame buffer és una adreça de la paleta (o taula de colors) i no un color. Un cas especial de pantalles són les true color on es poden tenir 224 colors simulatnis (mes de 16 milions de colors) Elements de software gràfic Estructura d'una aplicació gràfica En una apliació gràfica tenim un model gràfic, amb el qual aquesta aplicació treballa. Entre l'apliació i la pantalla trobem el frame buffer el qual es modificat mitjançant una interficie o API (Aplication Program Interface) que s'encarrega de la comunicació entre l'aplicació i el FB (API de sortida) i entre el FB i l'aplicació (API d'entrada). API de Sortida Els requeriments minims que es demanen als API son els dos següents: • Assignar un color a un pixel. • Consultar el valor d'un pixel. A més d'aquest requeriments els API ofereixen la possibilitat de visualitzar un objecte en una pantalla raster, es a dir, realitzen automaticament la rasterització (un exemple d'API fins a aquest nivel podria ser les Xlib de Xwindow) Hi ha altres llibreries anomenades API's d'alt nivell que permeten realitzar les operacions minimes, la rasterització i a més realitzen la projecció de l'objecte a dos dimensions. Un exemple d'aquestes llibreries són les OpenGL. Estructura interna d'una aplicació gràfica

3

Proces de control i gestió d'interacions En una aplicació tenim diferents modes d'entrada i tipus d'entrada. Els diferents modes d'entrada són: • Sincrona: sabem en quin moment l'usuari entra informació. Les entrades de l'usuari estan previstes seqüencialment al llarg del temps (entrada REQUEST). L'aplicació s'atura fins que l'usuari entri la dada. • Asincrona: l'usuari introdueix les dades en qualsevol moment (mode EVENT). Aquest mode està associat a una interface interactiva que ofereix diferents possibilitats a l'usuari. L'aplicació va consultant una cua d'events i amb un distribuidor de funcions decideix quina funció s'ha d'executar. Es realitza una funció o una altra depenen del tipus d'entrada i de les circumstancies en que es produeix l'entrada. Exemple: Circumstancia EDICIÓ: (definim un segment) Pitjem el butó 1 ! punt inicial. Deixem el butó 1 ! punt final. Circumstancia PAN: (movem la imatge) Pitjem el butó 1 ! inici PAN. Alliberar el butó 1 ! fi del PAN. Per capturar els events necessitem l'estructura d' Event Loop: inicialitzacions mentre no fi fer esperar_event distribuir tasques segons event fmentre Les API d'entrada de molt baix nivel només gestionen la cua d'events, proporcionen consultes a la cua i és la propia aplicació qui ha d'implementar el distribuidor o dispatcher Les API de més alt nivel (TCL−TK) proporcionen a més de la gestió de la cua el distribuidor. Els diferents tipus d'entrada són: • choice: opció dins d'un conjunt discret. • string: texte • valuator: valor numeric. 4

• locator: un punt, en concret les coordenades del cursor. Modelatge Un model computacional és un conjunt d'estructures de dades que representen un objecte gràfic. El model també s'anomena esquema de representació. Sobre un model hauriem de poder realitzar les següents funcions: • Consulta: geometria, adjacencia, atributs, colors, etc. • Creació i modificació. • Visualització o representació a pantalla. Les API de modelatge són llibreries amb definicions d'esquemes de representació, mes els procediments per poder modificarles. Aquestes API es coneixen com nuclis geomètrics. Hi ha poques llibreries d'aquest estil i amés són cares. Les primitives bàsiques (cub, esfera, etc.), a més de poder−les trobar en les API de modelatge, també les podem trobar en algunes API de sortida. Visualització La visualització consisteix en la presentació en pantalla del(s) model(s) gràfics. Per visualitzar un objecte en tres dimensions primer s'ha de fer la seva projecció i després visualitzar−lo, amb elements bidimensionals només ens cal fer la seva visualització, no cal la projecció. Nosaltres distibgirem entre dos tipus de visualització (segons els gra de realisme): • Visualització de filferros: només veiem la projecció de les arestes dels objectes poligonal i si l'objecte no és poligonal es visualitza la seva silueta. • Visualització amb complert: en aquest cas omplim l'espai definit per les arestes amb color, per tant s'han d'el.liminar les parts amagades. En aquesta visualització haurem de tenir en compte la il.luminació. Aquesta il.luminació pot ser local (es te en compte l'influencia del focus en l'objecte i no dels objectes) o global (es te en compte els intercanvis de llum entre els objectes). TEMA 2.− ESTRUCTURACIÓ DE LA INFORMACIÓ GRÀFICA Objectes gràfics Els nostres models són objectes gràfics. Els objectes gràfics poden ser: • entitats primitives • objectes 3D • objectes 2D • objectes raster. Entitats geometriques elementals Les entitats geometriques elementals son: • El punt: en 2D i 3D. El punt és l'element més petit amb ques espot treballar. Els punts es representen 5

amb les sves coordenades, ja siguin cartesianes o polars. • El segment/ linia: en 2D i 3D • Els plans: només en 3D NOTA: El sentit del angles es positiu si es va en una direcció contraria a les manetes dels rellotges vist des del més infinit de cada eix: Objectes 3D Els diferents tipus d'objectes tridimensionals son: • Punt. • Recta • Pla: en el pla es poden realitzar objectes bidimensionals com poden ser poligons i corbes. • Objectes tridimensionals: poliedres (objectes tancats amb una frontera de cares planes finita i tancada − qualsevol prisma, piramide, etc − ) , poliedres amb forats, superficies corbes tridimensionals (hèlix) • Volums, medi participatiu, objectes difusos: els objectes difusos son objectes que no tenen un frontera ben definida (per exemple un núvol no sabem on, realment comença, i on acava), aquests objectes també són coneguts com objectes Fuzzy. Un exemple de medi participatiu podria ser l'atmosfera, aquesta es un medi que envolta l'objecte, realment els objectes de medi particpatiu tenen una frontera no tancada pero nosaltres li posem uns limits arbitraris. • Objectes molt complexos de frontera finita: un exemple podria ser dibuixar la jespa d'un jardi o els cabells d'una persona. Un cabell o un bri d'herba es pot representar amb una corba, pero per representar l'efecte d'una jespa o el cap d'una persona necessitariem guarda molta informació i per tant seria molt complex. Per representar aquests objectes tenim els models procedimentals no explicits, es a dir, intentar representar aquests objectes sense necessitat de tenir una fórmula per cada cabell o bri d'herba. Objectes 2D Els objectes bidimensionals estan definits en un pla, i els objectes són: • Punts. • Corbes. • Poligons: aquests poden ser regulars (el.lipses, cercles, paralelipipedes, etc.) o no egulars. Objectes Raster Els objectes raster estan definits per punts amb coordenades x, y on x, y són enters positius que estan limitats per baix i per dalt. Existeixen cinc tipus d'entitats raster: • Punt dispositiu: mes coneguta com pixel. • Recta de dispositiu, raster o discretes: conjunt de pixels que s'alinien per representar una direcció. • Poligons raster o discrets. • Blocs de pixels: conjunt rectangular de pixels. Per exemple un cursor o ina icona. • Imatges: bloc de pixels molt mes grans que l'anterior. Aquest tipus equival al FrameBuffer o ImageBuffer. El ractament i processament d'imatge consisteix en que podem modificar l'imatge, es a dir, modificar els aspectes gràfics dels pixels. En canvi, nosaltres realitzem la sintesi d'imatges, es a dir, que donat un objecte 6

d'una base de dades grafica, visualitzem l'objecte o objectes. Representació d'objectes Geometria, topologia i atributs A l'hora de representar un objecte s'han de representar els elements següents: • Geometria: coordenades de punts, equacions de rectes/plans, vectors normals. Permet ubicar un objecte en l'espai. • Topologia: relacions entre les entitats que composen l'objecte (per una aresta dir quins vertexs te, etc.) a:{u} a ! una aresta {u} ! els seus vertexs • Atributs: caracteristiques visuals de l'objecte, resposta o comportament d'un objecte a la llum, aquesta resposta és el que s'anomena propietats òptiques. Tipus de representació Hi ha tres tipus de representacions: • Explicita: tenim en la memoria de forma exhaustiva tota la informació geometrica, més les relacions topologiques necessaries. • Constructives: es guarda el proces de construcció de l'objecte. Aquesta construcció es fa amb operacions d'objectes bàsics. • Implicita o procedimental: tenim una instancia per cada objecte, tenim un procedimenta que ens explicita (explicitació) l'objecte i així poder visualitzr−lo. La instancia vol aconseguir haver de guardar la informació mínima per permetre l'explicitació. Exemple: Cercle Representació explicita • {vertexs ordenats de forma circular} • {arestes} • {arestes: punters als vertexs que la formen} Representació implicita o procedimental • Donar el centre i el radi. Cercle: centre, radi. • Procediment: accio explicitació (ent: c:cercle, nv: enters) nv: nombre de vertexs ang:=0; dang:=360/nv; per i en [1..nv] fer 7

p.x:=c.r*cos(ang); p.y:=c.r*sin(ang); pintapunt(p); ang:=ang+dang; fper faccio Poligon regular Representació explicita: llista de vèrtexs + topologia ({a}:{u}) Representació procedimental: Alçada principal: H Alçada petita: h Amplada total: A Amplada petitat: a Punt de referencia: p0 Angle d'orientació: Procediment: v[1]:=(0,0); v[2]:=(0,h); v[3]:=(a,H); v[4]:=(a,h); v[5]:=(A,h); v[6]:=(A,0); CreaMatTranslacio (p0,M); CreaMatRotacio (, A); ConcatenarMat (M,A); per i en [1..6] fer v[i]:=TG2D (v[i],M);

8

fper Constructiva: suma de dos paralelipipedes. P1

L=P1"P2

P1

P2 P2

L=P1 − P2

En aquesta representació s'han de guardar les operacions i els operands (poligons de construcció que seran poligons coneguts i prefixats). Els operands tenen una ubicació, l'un respecte de l'altre. Aquests operands poden estar amb una representació procedimental o explicita. Model de fronteres Un sòlid és un objecte que en principi és rígid (indeformable), que està plé en el seu interior, i que suposem que el seu interior . Com que està plé en el interior i és homogeni nosaltres només representarem la seva superficie externa (frontera). L'ambit dels sòlids a representar són els poliedres, ja siguin simples o amb forats. • Poliedres simples • Poliedres amb forats El Solid Modeling és el modelatge de sòlids, és el camp que estudia/investiga la representació dels sòlids. El model matemàtic és la representació abstracta de les propietats de l'objecte físic. Les interrogacions que demanem al model matemàtic que sigui capaç de respondre són: • ¿És P intern a l'objecte?. • ¿Està P sobre la superfície?. Al model matemàtic li demanem que: • sigui no ambigu. • que sigui exacte. • que el seu domini (nombre d'objectes que pot representar) sigui el més ampli possible. L'esquema de representació són les estructures de dades computacionals que representen l'objecte. Seria l'implementació del model matemàtic. Aquest esquema es correspon amb el tipus de representació, per tant pot ser constructiu, procedimental o explícit. Aquest esquema es pot obtenir amb les equacions d'Euler. A l'esquema de representació li demanen que: • sigui finit. • sigui concis. • eficient (ràpid). Model matemàtic del poliedre Els elements que defineixen un poliedre son les cares, les arestes i els vèrtexs. Els poliedres poden estar formats per un sol component o per diversos components. Aquests poliedres poden tenir forats, aquests forats poden ser de dos tipus: • Passants: forats en cares. 9

• No passants: forats que només apareixen en una cara. Tot poliedre representable ha de cumplir l'equació d'Euler: V= # vèrtexs E= # areste (Edge) Equació d'Euler:

F= # cares (Faces)

V−E+F−H = 2·(C−G)

H= # forats enc ares (Hole) C= # components G= # forats passants

Pels poliedres sense forats la fórmula es simplifica: V−E+F= 2 Exemple: cub ! 6 cares, 12 arestes, 8 vèrtexs 8−12+6= 2 prisma amb un forat passant ! V=8+8, F=10, E=12+12, C=1, G=1, H=2 Esquema de representació dels sòlids Existeixen tres tipus d'esquemes: • Constructius: CSG (Constructive Solid Geometry), contenen l'arbre d'operacions i les primitives que formen l'objecte, que en aquest cas són sòlids. • Procedimentals: instanciació de primitives, no hi ha operacions sino que l'objecte es una llista de primitives. • Explictis: B−Rep (Bounding Representation), representació explicita de la frontera. EL MODEL B_REP Amb aquest model representem de forma explicita la frontera de l'objecte (sòlid). La geometria associada a aquest model és: • Cares: equació del pla de suport de la cara. • Arestes: equació de la recta. • Vèrtexs: coordenades. Respecte a la topologia existeixen nou possibles relacions: − c:{c} − e:{c} − v:{c} − c:{e} − e:{e} − v:{e} − c:{v} − e:{v} − v:{v} Relació: e:{v} ! donada una aresta, els vèrtexs que la composen. v:{c} ! donat un vèrtex, les cares que els comparteixen. 10

c:{v} ! donada una cara, els vèrtexs que té. En el model B_Rep necessitem almenys dues relacions topologiques mes la geometria per poder representar els objectes. Un esquema de representació necessita com a mínim dues relacions topologiques no redundants més les coordenades dels vèrtexs. Exemple Principal esquema de representació explicits. Existeixen dos esquemes de representació importants: • Model c:{e} i e:{v}. Aquest es elmodel utiltzat a les practiques. • Model ninged−edgeds e:{v}, e:{c} Existeixen variants que a més de guardar les relacions topologiques principals, guarden relacions redundants. Les relacions topologiques han de tpermetre les següents operacions: • ObtPrimEleEle() • ObtSegEleEle() • ObtNEleEle() El primer Ele seria l'equivalent al que hi ha entre claus ({})i el segon Ele al primer element de la relació(O:). MODEL NINGED−EDGES Aquesta relació es basa en la informació de les arestes (e:{v}, e:{c}) Per realitzar la implementació s'han fet servir els següents elements: • llista de vèrtexs • llista d'arestes: on cada aresta es un punter als vèrtexs que la composen, la cara positiva, la cara negativa a les qual és adjacent l'aresta i les arestes anterior positiva, anterior negativa, posterior positiva, posterior negativa. • llista de cares: on es guarda una de les arestes positives que composen la cara. TEMA 3.− VISUALITZACIÓ 3D Proces 2D/Proces 3D Per visualitzar un model necessitem l'area de visualització (VIEWPORT) que es troba dins d'una finestra. L'area de visualització es raster (conjunt de pixels) i l'objecte es tridimensional per tant hi ha d'haver alguna transformació. Per visualitzar un objecte, aquest s'ha de transformar en pixels i dels pixels necessitem la seva posició i el seu color. Per tant ham de fer la projecció de l'objecte 3D en una superficie 2D. Per tant el proces de visualització te dues passes: • Projecció d'un model 3D a 2D (proces de visualització 3D): consisteix en fer una projecció (del mdel 3D a un model 2D) més la selecció de la informació 3D a projectar (Retallat). 11

• Transformació del model 2D a raster (proces de visualització 2D): consisteix en passar d'un model 2D a un model raster (Rasterització) i aqui també tindrem el retallat 2D. Es habitual considerar que tot el proces de visualització s'anomeni visualització 2D. Projecció rojecció: equivalencia a fer una foto d'un objecte tridimensional, es a dir, veiem l'objecte en un pla de projecció. El punt projectat s'anomena VRP (View Reference Point) que seria el centre de referencia de visió, es a dir, el punt cap on mira l'observador. Obs indica la direcció on es troba l'observador visual, que defineix la posició de la camara. La direcció de visió ve donada per: Direcció de visió:

El pla de projecció es perpendicular a la direcció de visió i ha de contenir al punt VRP. Aquest tipus de projecció és la més utilitzada en gràfics, ja que és el mes semblant almodel fotogràfic, però hi han d'altres tipus de projecció: • Oblicua: te un pla de projecció i una direcció de projecció arbitraries (no necessariament perpendicular). Projectar un punt vol dir que tenim la representació d'un punt original en un pla determinat (imaginari) que també es troba a l'escena 3D. Normalment el que ens interessa es projectar l'objecte sobre un pla que es tractara amb només dues components. P(x,y,z) ! projecció P' P' " pla de projecció P' esta en el pla de projecció " Recta (p, ) o és la direcció de projecció. Direcció de projecció Tenim dos tipus de projeccions: • Paral.lela: l'observador es troba a l'infinit de la direcció de visió, per tant ø es constant per tots els punts (ø=øv) • Perspectiva: l'observador esta en una posició donada i a una distancia determinada (d) de VRP. Ara les direccions de projeccions estan definides pels punts de l'objecte i l'observador. Definició d'una projecció Per definir una projecció cal: • Pla de projecció: amb un observador i el punto VRP. • La direcció de projecció:aquesta direcció es diferent segons quina sigui la projecció desitjada paralela

12

(només hi ha una direcció.

) o perspectiva (hi han tantes direccions com punts diferents de l'objecte.

) Calcul de la projecció Un punt P ve definit en el sistema de coordenades de l'escena que nosaltres anomenarem sistema de coordenades del món. I nosaltres volem el punt P' que és la projecció del punt en un pla. Aquesta projecció tindra les seves coordenades respecte elsistema de coordenades del món P'(x', y', z')mon. El que ens interessa coneixer són les coordenades de P' en el sistema d coordenades local del window, es a dir, les coordenades 2D respecte al rectangle que visualtzarem. P(x, y, z)mon ! P'(x', y', z')mon ! P''(x'', y'', z'')obs ! (x'', y'', 0) Les coordenades que nes interessen son x'' i y'' que representen les coordenades 2D de la projecció de l'objecte incial. Per tenir només dos coordenades dem que l'eix z sigui paralel a la direcció de l'observador i per tant aquesta component tindrà un valor nul i d'aquesta forma obtenim les dues coordenades que ens interessen. Les condicions del sistema de coordenades de l'observador son: • xobs, yobs han d'estar en el pla de projecció i ha de definir l'orentació del ecangle que volem visualitzar (window). • zobs ha de ser perpendicular al pla de projecció. xobs i yobs defineixen l'orientació del window o rectangle del pla de projecció, centrada en el VRP que defineixen l'abast de la visualització. La component xobs serà sempre perpendicular a la component yobs. P' − projecció paralela P P'' − projecció perspectiva P P ! (x, y, z)mon ! P(x0, y0, z0)obs P'(x0, y0, 0) en la projecció paralela

; p''( ) en laprojecció perspectiva Projecció

13

Amb la projecció el que busquem en posar les coordenades d'un objecte en funció del sistema de coordenades de l'observador. • P(x, y, z)mon ! P(x0, y0, z0)obs: canvi de sistema de coordenades. • Projecció: paralela (x0, y0) Perspectiva ( ) Implementació matricial Donat un punt p(x, y, z) obtenir la seva projecció a través d'operacions sobre matrius, això es el que es vol obtenir amb l'implementació matricial. Es desitja l'implementació matricial, ja que es la més fàcil implementar a través de hardware. Per realitzar el canvi de sistema de coordenades es necessitan quatre canvis o transformacions geometriques (canvi d'origen més e canvi de cada un dels eixos). Les transformcions geometriques venen definides per unamatriu de 4x4. Per nosaltres una transformació serà extendre les coordenades fins a la quarta component y realiitza les operacions amb lamatriu M, definida anteriorment. A1 B1 C1 D1 A2 B2 C2 A3 B3 C3 (x, y, z, 1.0)*M = (x', y', z', h) ! (x'/h, y'/h, z'/h)

M= A4 B4 C4

x' =a1x+ a2y+ a3z+ a4 D2 D3 y'= b1x+ b2y+ b3z+ b4 z'= c1x+ c2y+ c3z+ c4 D4 h = d1x+ d2y+ d3z+ d4

El canvi d'origen consisteix en que el punt VRP amb coordenades VRP.x, VRP.y, VRP.z passa a tenir coordenades 0, 0, 0 en el nou sistema de coordenades. Per tant això es una traslació de: T=( −VRP.x, −VRP.y, −VRP.z)

T= 1 0 0 −VRP.x

0 1 0 −VRP.y

0 0 1 −VRP.z

0 0 0 1

Per realitza els girs s'han de seguir les següents passes: • Rotació de respecte l'eix y • Rotació de −" respecte l'eix x • Rotació de angz respecte z. Amb les passes 1 i 2 aconseguim definir l'eix zobs, i amb la passa 3 realitzem l'orientació de la camara.

14

La matriu d'escalat de la deformació perspectiva és la següent: 1 MDP=

0 0 0 0 1 0 0 0 1

(x, y, z, 1)*MDP = (x, y, z, −(z/d)+1) 0 −1/d s'=−(z/d)+1

0 0 0

=(x/s', y/s', z/s')

1

Retallat/Selecció Alhora de visualitzar una base de dades gràfiques, tenim dues possibilitats: • Visualitzar tota l'escena. • Visualitzar només una part, en aquest cas es pot visualitzar només un objecte o un tros de l'escena. El tros que es vol visualitzarve definit pel prisma o piràmide de visió. El prisma correspondria a una projecció paral.lela, i la piràmide a la projecció perspectiva. El prisme i piràmide esta definits en el sistema de coordenades de l'observador. La intersecció entre el prisme o piràmide i elpla de projecció defineix el tros d'escena que volem visualitzar (window). Per definir el prisme/piràmide cal: • windows: rectangle del pla de projeció que es vol visualitzar. • i els plans de retallat anterior i posterior. • i l'observador si fem la projecció perspectiva. Els plans de retallat són paral.lels al pla de projecció i per tant només cal dir la distancia dels plans de retallat al pla de projecció. L'efecte del retallat vol dir que els objectes que es troben abans del pla anterior i després del pla posterior, i els objectes que es troben a l'exterior dels marges delwindows, no es visualitzin. Existeixen dos tipus de retallat: • Total: si un objecte s'elimina totalment o es dibuixa totalment quan aquest està intersecat pel pla, o quan esta almenys parcialment dins de la piràmide. Es a dir no es tallen els objectes. • Parcial: aquest tipus talla els objectes. en aquest cas es dibuixa només la part que hi ha dins de la piràmide i per tant quedaria l'objecte incomplet. A i B estan parcialment dintre de la piramide. amb el retallat total o es mostren o no es mostren els objectes A i B, en canvi amb el retallat parcial es mostraria només la part de l'objecte que es troba dins del prisma o piràmide. Retallat total Els punts interiors al prisma són els punts que compleixen: zpost " z " zant

15

Eliminariem els objectes si tots els vèrtexs no cumpleixen la condició. Un punt P està dins dels límits laterals si: wd.pmin.x " x " wd.pmin.x + wd.a wd.pmin.y " y " wd.pmin.y + wd.h Retallat parcial Requereix fer tests de secció d'objectes per plans. Aquest retallat pot caviar la topologia dels objectes (el que era un cub ara podria ser una piràmide, etc.) i augmentar o disminuir el nombre d'objectes. Aquest retallat en la pràctica es redueix a la problematica del retallat 3D a 2D. Model de càmera El model de càmera és el conjunt de paràmetres que defineix la visualització. Existeixen diverses maneres de definir−los però tots tenen operacions de conversió (convertir els paràmetres d'un model de càmera a un altre model de càmera diferent). Exemple: ! Sistema de visualització: · VRP en coordenades de mon. (0,0,0) en coordenadesde l'observador) · Angles de càmera: (øv vector de visió o VRP i obs en coordenades de món, i el VUP, vector de la verticalitat de la càmera). ! Piràmide de projecció: · Tipus de projecció (PARAL.LELA o PERSPECTIVA). · Distancia de l'observador. · Plans de retallat respecte l'observador. · Angles d'obertura de la càmera. ! Window. ! Viewport. Visualització amb OpenGL En OpenGL l'usuari programador només ha d'especificar la geometria i la càmera de visualizació dels objectes. Geometria OpenGL pot pintar poligons, els quals han de ser convexes i sense forats. També admet esferes, cilindres, NURBS (tipus de corbes), etc. però OpenGL converteix tots aquests objectes a poligons.

16

Per definir el Poligon hem de definir els vèrtexs amb: glVertex3f(paràmetres) Camera Per definir la càmera hi ha tres etapes: • Especificar el sistema de visualització: gluLookAt (VRP, obs, VUP) · VRP i obs s'especifican en coordenades del món, i defineixen l'eix z de l'observador, i el pla de projecció. obs := VRP+øv·d on øv és el vector de visió ang x = −arcsin vy/||v|| · VUP defineix el gir respecte a l'ex z de l'observador. En 1º octant: VUP ! angz En els altres octants s'hauria d'afegir 90º o −180º segons el moviment de l'observador. • Piràmide de visió: · Per fer la projecció paralela tenim la funció: glOrtho (wd, dant, dpost) · Per fer la projecció perspectiva tenim: gluPerspective (, aspectratio, dant, dpost) • Viewport. TEMA 4.− PROCES DE VISUALITACIÓ 2D Etapes Les etapes són el conjunt de processos que calen realitzar per visualitzar una escena 2D. L'escena 2D pot ser una escena propiament dira 2D (el mon en que treballen és 2D) o podria ser una projecció d'un mon 3D en el pla de projecció. Transformació de mon a dispositiu Aquesta transformació també s'anomena transformació de windows a viewport. El món és un món 2D, i el dispositiu és el món raster on volem pintar (viewport). Alhora de visualitzar una escena 2D cal definir: • Window: rectangle de l'espai 2D que conté el tros d'escena a visualitzar. Són coordenades 2D reals. • Viewport: rectangle de l'area gràfica del dispositiu on es vol pintar. Són coordenades del dispositiu. Al vindre d'un mon 3D el centre del windows es a (0,0) en canvi , si venim d'una escena 2D el centre del window es defineix pel sistema de coordenades 2D i no té per que estar centrat al (0,0). 17

El món 3D projectat el wndows és: La transformació de món a dispositiu consisteix en un canvi de coordenades de windows 2D a viewport 2D (enteres). (1)

(2)

Això serveix pel sistema de OpenGL, en canvi amb les X−Lib l'eqüació 2 no serveix i s'ha de substituir per:

i = (enter)

j = (enter)

Per tant la transformació de món a dispositiu només es fa amb un escalat i una traslació: i = (enter) Sx · xw + Tx j = (enter) Sy · yw + Ty (enter) el que fa es passar d'un mon 2D continu a un món de dispositiu discret. Implementació matricial Es realitzaria un escalat mes una traslació com s'ha esmentat abans. La matriu de transformació de món a dispositiu és la següent: MTMD = Sx 0 0 0 Sy 0 Tx Ty 1 Sx = Tx = vp.pmin.x − Sx · wd.pmin.x Sy = Ty = vp.pmin.y − Sy · wd.pmin.y acció TransfMonDisp (p: pt2D, MTMD: mat3x3) ret ptDisp ptoDisp pix pw := TG2D (pw, MTMD); 18

pix.x := (enter) pw.x; pix.y := (enter) pw.y; retorna (pix) facció En OpenGL la MTMD és la mateixa matriu però és de 4x4 que es concatena amb les altres matrius de visualització i la matriu de deformació perspectiva. MTMD = Sx 0 0 Tx

0 Sy 0 Ty

0 0 1 0

0 0 0 1

Retallats En la visualització 3D teniem els retallats anterior, posterior i laterals. En la visualització 2D també es fa el retallat però en 2D, com és lògic. El retallat 2D vol dir seleccionar els objectes que estan dins del windows i si cal retallar els objectes parcialment inclosos. Aqui també es diferencia entre: • retallat parcial: només es selecciona els objectes a visualitzar. • retallat total: que fa la selecció, més el retallat propiament dit. En les etapes hem definit el retallat 1 i el retallat2, doncs el retallat 1 fa una selecció (retallat parcial), es a dir, agafa els objectes parcialment interiors, i el retllat 1 realitza el retalat total (aquest retallat es pot fer per hardware). Exemple: tenim 6 milions de triangles, i definim un windows que només agafa 2 triangles, per agafar aquests dos trinagles es fa el retallat que selecciona per només haver de tractar aquests dos triangles i no els els 6 milions. La selecció inicial és una manera de disminuir el cost del proces de visualització. Criteri de Selecció Per punt: agafem el punt si el punt cumpleix la següent condició: wd.pmin.x " x " wd.pmin.x+wd.a wd.pmin.y " y " wd.pmin.y+wd.h Per segment: amb la selecció hauriem de quedar−nos amb els segments A, C, D. Si hi ha almenys un vèrtex dins, llavors s'agafa (selecciona) el segment, però que els dos vèrtexs estiguin fora no vol dir que el segment estigui totalment fora (cas D). 19

tindrem una funció que ens indica si el segment està totalment inclos o parcialment inclos. la funció permet eliminar els que estan totalment fora: funció EsParcialTotalInterior (ent p1, p2: Pt2D; wd. capsa2D) ret booleà codi1:=codi(p1, wd) codi2:=codi(p2, wd) k:=1; mentre k " 4 " ((codi1[k]"codi2[k]) " (codi1[k]=0 " codi2[k]=0)) fer k:=k+1; fmentre ret (k>4); Per poligons: els poligons totalment interiors tenen tots els vèrtexs dins del windows. En aquest cas, de selecció per poligons, que ens trobem tots els vèrtexs exteriors no vol dir que no haguem de seleccionar aquest poligon (cas C, F). Retallat de segments Per realitzar el retallat de segments s'utilitza l'algorisme de Cohen i Sutherland, aquest algorisme divideix l'espai en 9 parts i li assigna un codi a cada zona. 1001 1010

1000

0010 0110

0000

y=wd.pmin.y+wd.h 0001 0101 y=wd.pmin.y

0100 x=wd.pmin.x

x=wd.pmin.x+wd.a

Calculem els codis dels dos vèrtexs del segment: • Si codi(p1)=codi(p2)=0 llavors tot és interior. Si existeix un bit que és 1 en dos caodis, llavors el segment es troba fora. • Si " k: 0 " k " 3: codi(p1)[k]=codi(p2)[k]=1 llavors el segment es totalment exterior • En qualsevol altre cas possible intersecció. El retallat només es fa amb les rectes fronteres respecte a les quals codi(p1)[k]=0 i codi(p2)[k]=1. Aqest algorisme: • facilita la selecció. 20

• i redueix el cost de l'intersecció, reduint el nombre d'interseccions als límits del windows necessaris. Una possible funció pel retallat real seria la següent: {[p1,p2] es parcalment o totalment interior} s1:=sumabits(codi1) s2:=sumabits(codi2) si s1=s2 ! {totalment interior} retallat:=fals; s1"s2 ! retallat:=cert; k:=1; mentre (retallat " k"4) fer si codi1[k]"codi2[k] llavors retallasegonsK(p1, p2, wd, k, retallat, codi1, codi2); sino codi1[k]=codi2[k] ! continuar; fsi fmentre fsi funció retallatsegonsK amb un exemple: recta: x=wd.pmin.x+ wd.a = xk a(xk)+b·yint+c = 0 yint=−c−a(xk)/b wd.pmin.y " yint " wd.pmin.y + wd.h · Modifcar p1 o p2 (un dels dos passa a ser el ppunt d'intersecció. · Calcular el nou codi i recalcular el retallat. Retallat per Poligons L'algorisme que s'utilitza és el de sutherland i Hogdman. L'algorisme fa un proes iteratiu amb el qual es retalla ell poligon amb les rectes del poligon, així es van obtenint nous poligons. La llista de vertexs del poligon es va modificant formant diferents poligons. Quan s'entrega els vertexs hem de 21

mirar que els punt no estiguin al límit del windows, perque si es axí tenim un nou poligon. (es a dir hem de reconstruir la topologia, seria el cas de que d'un sol poligon al fer el etallat ens surten més d'un poligon). La sortida de l'algorisme es: poligon := reconstruirtopologia(llista vèrtexs modificada). hem de mirar que la llista de vèrtexs no estigui buida, ja que si ho està voldrà dir que hem descartat el poligon sencer. Rasterització Consisteix en convertir la informació analogica a informació discreta. La informació anàlogica que tenim seràn poigons i segments de recta (encar que hi ha molts mes objectes, nosaltres només tractem aquests dos). Els punts ja tenen coordenades enteres, però la rasterització escolleix els millors pixels per representar millor (que més s'aproximen) al punt real. En els poligons les coordenades també són enteres, i el que fa la rasterització es escollir els pixels que més s'aproximarien a l'interior del poligon. Rasterització de segments • Es poden pintar el pixels per on passa la recta real (aquesta rasterització seria envovent). Pinta tots els pixels intersecats per la recta. La recta rasteritzada no te un gruix uniforme i per tant hi hauran zones mes brillants que d'altres. • Per aconseguir un gruix uniforme hem d'aconseguir que només hi hagues un pixel entre els diferents pixels de diferents columnes, es a dir, distingir pendents de la recta. Les rectes horitanotals , verticals i a 45º tenen una rasterització amb gruix uniforme. Per rasteritzar qualsevol recta escollim un dels pixels de la mateixa columna per on interseca la recta real. Aquesta ultima forma de rasteritzar és l'anomenada rasterització de Bresenham, la idea de la qual és il.luminar el mínim nombre de pixels. Es a dir, o tenim un pixel per columna o un pixel per fila. Aquest algorisme te la virtut e que és molt eficient ja que fa molt poques operacions. L'algorisme de Bresenham per deduir quin pixel s'il.lumina per representar la recta , es traça una recta entre els pixels i si la intersecció de la recta amb una columna o una fila de pixels esta sobre la recta que pasa entre els pixels, llavors s'il.lumina el pixel que queda per sobre i si està per sota s'il.lumina el d'abaix. · Si (xi+1, yi+0.5) " SE+ llavors la recta mitjana esta per damunt de la recta que volem dibuixar i per tant escollim el pixel yi. · Si (xi+1, yi+0.5) " SE− llavors la recta mitjana està per sota de la recta i s'escolleix yi+1. Aqui tndirem una porció del calcul de quin pixel hauriem d'il.luminar en funció de la recta mitjana. di= a(xi+1)+b(yi+0.5)+c si d>0 ! xi+1=xi+1; yi+1=yi;

22

d<0 ! xi+1=xi+1; yi+1=yi+1; fsi Pel pixel seüent tindriem que xi+2=xi+2; i hauriem de mirar el calcul de la coordenada y. si d>0 ! yi+2=yi " yi+1 /* depen de di+1=a(xi+2)+b(yi+0.5)+c=di+a d<0 ! yi+2= yi+1 " yi+2 /* depen de di+1= a(xi+2)+b(yi+1+0.5)+c=a+b fsi Primer hem de calcular el primer pixel i despres ja només tindrem que fer sumes i mirar els signes que ens surtin. El calcul del primer pixel és el següent: d1=a (x1+1) + b (y1+0.5) + c d1= ax1 + by1 + c + 0.5·b + a = 0.5·b + a però no podem utilitar aritmetica real (tenim la multiplicació per 0.5) i per tant multipliquem tot el producte per dos. L'algorisme final de Bresenham pel primer octant queda com segueix: acció Bresenham1oct (ent x1, y1, x2, y2: enter) var x, y, d: enter; /* inc1, inc2: enter dx, dy: enter; fvar x:=x1; y:=y1; dx:=x2−x1; dy:=y2−y1; d:=2·dy−dx; /* inc1:=2*dy; inc2:=2*(dy−dx) mentre x"x2 fer PintaPixel (x, y); si d>0 ! d:=d+2*dy; /* d:=d+inc1; d<0 ! y:=y+1; d:=d+2(dy−dx) /*d:=d+inc2; fsi

23

x:=x+1; fmentre facció Per cada pxel com a molt fem tres sumes enteres i una comparació. Omplert de poligons Mecanimes germe Tenim les coordenades raster dels vertexs que composen el poligon. Per tant el primer que es fa es pintar el contorn del poligon mitjançant l'algorisme de Bresenham que s'aplica a cada recta que forma part del poligon; d'aquesta forma pintem les rectes que delimiten el poligon. Ara donat un pixel hem de determinar si es interior al poligon (pixel germe), o podiem trobar directament els pixels interiors. Mirem un pixel i si es interior es dibuixa i després escollim un dels seus veïns. Aquest algorisme es recursiu a partir d'un pixel germe interior al poligon i va visitant veïns i determinant si són interiors o no. acció omplert (ent pol: Poli; xi, yi: enter) PintaPixel (xi, yi); per cada vei de (xi, yi) fer si (xi, yi) es interior ! omplert (pol, vei(xi, yi)); fsi fper facció En aquest algorisme encara no es veu com se sap la interioritat d'un pixel, ni com agafem els veïns (per evitar revisites). La interioritat consisteix en mirar que el pixel no sigui del contorn, per esbrinar això només cal mirar el color i si és el mateix del contorn llavors estem al límit. Hi han diferents veinatges possibles: 2x2

3x3

Si agafem un veinatge de 3x3 pot ser que ens surtim del contorn, això es veu millor amb un exemple: En aquest exemple podem veure que agafem un pixel que es troba fora del contorn del poligon i per tant seguiriem pintant la resta de la pantalla (pintar l'exterior com l'interior del poligon), per tant no podem escollir 24

un veinatge tan gran. Ara agafem el veinatge 2x2: El problema anterior es soluciona però en aquest poligon ens quedem sense pintar el poligon sencer, sino que només pintariem la part de dalt, ja que el veinatge escollit no ens permet de sortir del primer quadrilater. En aquest cas l'única solució es donar més d'un germe, es adir, utilitzariem un germe pe cada part que ens sortis. Aquesta técnica normalment s'utiltza quan és l'usuari qu dona aquest punt germe, som seria el cas de la majoria d'aplicacions gràfiques que existeixen. acció germe (ent x1, y1: enter, visitat[xres, yres] de booleà) PintaPixel (x1, y1); x:=x1+1; visitat[x1,y1]:=cert; si FB[x, y1]=FB[x1, y1] " ¬visitat[x, y1] ! germe (x, y1, vistat); fsi y:=y1+1; si FB[x1, y]=FB[x1, y1] " ¬visitat[x1, y] ! germe (x1, y, vistat); fsi x:=x1−1; si FB[x, y1]=FB[x1, y1] " ¬visitat[x, y1] ! germe (x, y1, vistat); fsi y:=y1−1; si FB[x1, y]=FB[x1, y1] " ¬visitat[x1, y] ! germe (x1, y, vistat); fsi facció FB = FrameBuffer Aquest algorisme només serveix per un marc interactiu. Omplert linia per linia Tambés es coneix com l'algorism d'escombrat linia per linia (Scan−Line conversion). L'area gràfica es divideix en linies d'escombrat que son files de pixels de l'area gràfica (biewport). S'aprofita 25

aquest escombrat per pintar els poligns i per tant es fa un omplert linia per linia. Per cada linia d'escombrat hem de determinar els pixels interns. Fem la intersecció del poligon amb la linia d'escombrat (pto intersecció), ordenar aquests punts per x creixent i per cada interval omplir els pixels interiors. La dificultat de l'algorisme es garantir que el nombre d'interseccions es parell, trobar les interseccions de la manera més eficient possible (per solucionarlo hauriem d'utiltzar la coherencia de la linia de la qual forma part l'últim pixel dibuixat). Per garantir que el nombre d'interseccions es correcte (mateix criteri del punt interior a poligon) es considear rectes semiobertes: (x1, y1), (x2, y2) " y2>y1 ! (x1, y1) " Aresta (x2, y2) " Aresta per cada linia escombrat fer esborrar arestes actives que ja no intersecten; afegir noves interseccions; modificar interseccions actuals; pintar punts interiors; fper TEMA 5.− ENTRADA I SELECCIÓ GRÀFICA Periferics i tipus d'entrada En el disseny d'una aplicació també hem de fer el disseny de l'interfície, es a dir, la relació entre els procediments, entrades i objectes. En les aplicacions gràfiques tenim una entrada asincrona (event lop) la qual es fa mitjançant events. Tenim 4 tipus d'entrades: • Texte (string). • Numeriques (valuator). • Enumeració d'un conjunt discret (choice) • Punts (locator). De totes aquestes entrades l'única que es propiament gràfica és l'entrada de punts. Entrada de punts El punt que s'escolleix es de l'area gràfica, en concret del viewport, per tant el punt és unaposició d'aquest viewport. Per ealitzar l'entrada d'aquests punts podem utilitzar algun dels següents perifèrics d'entrada física: • llapis óptic. • fletxes del teclat. • ratolí, etc. Selecció 26

Amb la selecció de punts es vol escollir un punt de la bade de dades gràfica i no del viewport, encara que fem la selecció en el viewport. Per tant volem aconseguir una selecció d'informació gràfica (entitat de la base de dades gràfica). Amb la selecciópodem agafar: • Punt 2D: base de dades 2D. • Punt 3D: base de dades 3D. • Poligon al que pertany el punt. • Cara a la que pertany el punt. • Objecte al que pertany el punt. • Conjunt d'objectes al que pertany el punt. Exemple: (1) Zoom en una visualització 2D: entrem dos punts de dispositiu i els hem de convertir a dos punts del windows (que no han de ser necessariament d'un objecte). (2) Definició del VRP: definició d'un punt 3D. (3) Seleccionar un poligon en una base de dades 2D. Selecció d'un poligon marcant un punt interior. (4) Selecció d'un objecte en una base de dades 3D. Selecció 2D Hem de pasar de coordenades del viewport a coordenades del window, per tant, hem de fer la transformació de dispositiu a món.

Per realitzar l'implementació matricial només ens caldria fer un escalat i després una traslació:

Tx= wd.pmin.x − Sx (real) vp.pmin.x Ty= wd.pmin.y − Sy (real) vp.pmin.y 27

MTDM = Sx 0 0 0 Sy 0 Tx Ty 1 funció TrDispMon (ent p:pixel, ent MTDM:mat3x3) retorna PtMon pt2D aux; aux.x := (real)pix.x; aux.y := (real)pix.y; p:=TG2D(aux, MTDM); retorna p ffunció TG2D fa les següents operacions: (x, y, h) = (aux.x, aux.y, 1.0) * Sx 0 0 0 Sy 0 Tx Ty 1 x = aux.x·Sx+Tx y = aux.y·Sy+Ty h=1 Selecció 3D Tenim el problema per asignar el punt desitjat a un objecte 3D ja quept ser que en un punt del viewport es representi més d'un punt de l'objecte 3D i per tant no sabem a qun punt es refereix la selecció. Per tant no hi ha prou en trobar el punt del window. Amb la informació que tenim no hi ha prou i per tant es necessari un criteri de selecció per discriminar el punt d'entre els infinits candidats que interessa. Normalment el criteri de selecció es agafar el punt més proper però hi han d'altres estrategies: Estrategia 1: calcular la semirecta que passa pel punt window i l'observador, intersecar la semirecta amb la base de dades gràfica i seleccionar el punt mé proper a l'observador. Estrategia 2: si guardem la projecció 2D d'una base de dades gràfiques 3D es molt més fàcil, ja que nomé cal agafar el punt del viewport, pasar−lo a window i després intersecar amb a base de dades projectada. Així sabem a que poligon 2D pertany el punt seleccionat i saber a que objecte 3D pertany el poligon es molt fàcil, ja que només hem de mirar la projecció del mon 3D. Estrategia 3: (amb OpenGL) OpenGl te un mecanisme d'etiquetatge dels objectes projectats en la piràmide de visió, d'aquesta forma es restringeix la selecció a objectes potencialment visibles. L'usuari−programador asigna una etiqueta als objectes que es podran seleccionar després: 1. Visualització normal

28

2. Posar−se en mode selecció. 3. Tornar a projectar etiquetant objectes. D'aquesta forma tenim una possible recuperació d'informació d'objectes etiquetats. L'informació recuperable pot ser l'etiqueta, la z més petita, la z més gran, etc. Un altre mecanisme que permet OpenGL és el de selcció per posició, aquest mecanisme permet reduir el windows a una area molt petita al voltant del cursor. Per tant la llista d'elements associats es redueix als polions projectats en el cursor. ! informació dels objectes etiquetats 3, 2, 4, 5. ! amb mecanisme de reducció els possible etiquetats son el 3. Si seleccionem un punt que no pertany a la base dades gràfica cap dels metodes anteriors ens serveix, i per tant necessitem informació adicional per dicidir el zobs, es a dir, informació que ens digui si el punt seleccionat intersecta amb algun objecte o no. TEMA 6.− VISIBILITAT La visualització en filferros es poc realista i la percepció 3D d'un objecte es pobre (poc realista perque els elements no tenen només arestes sino cares, per tant la visualització en filferros no permet l'omplert de les cares ni el calcul de la il.luminació). Per tenir una percepció 3D més realista podrriem pintar els poligons que formen part de l'objectem però hauriem de pintar els poligons en un ordre determinat (primer pintar el més llunyà a l'observador i l'últim el més proper), ja que sino podriem tenir una percepció equivocada. Si pintem les cares pot passar queno tinguem la percepció 3D, ja que no distingiriem les arestes i veuriem un sol poligon, per tant podriem pintar les arestes per augmentar la percepció 3D. Una altra possibilitat seria dibuixar només les arestes que veiem, però en aquest cas no tindriem il.luminació però en canvi la percepció 3D seria correcte. Visibilitat Volem un proces per detectar oclussions (determinar si es visble o no un determnat objecte). Per determinar si un objecte és visble hem de començar pels seus vèrtexs i per tant anem mirant de dos en dos vèrtexs. La visibilitat dels punts seria la fracció de llum que surt d'un punt p i arriba cap a un altre punt q. La visibiltat va des del 100% (no hi ha cap objecte entre la font de llum i el punt) al 0% (hi ha algun objecte opac entre la llum i el punt). Per nosaltres la visibilitat que hi ha entre aquests valors no la tractarem i per tant parlarem de visibilitat binaria. Quan realitzem una visualització aquesta es fa respecte a l'observador. L'el.limanció de part amagades (EPA) serà el càlcul de la visibilitat respecte de la base de dades. Hi han diferents tipus d'oclussions:

29

• Propies: quan tenim un objecte i ell mateix s'oculta parts (per exemple els poliedres). Tenim superficies de l'objecte que tapen altres superficies respecte a l'observador. • Entre objectes: tenim un objecte que tapa parcial o totalment un altre objecte. Culling El culling s'executa en el temps de pre−proces o en el proces de visualització un cop coneguda la posició de l'observador. El que permet el culling és el.liminar cares ocultes per oclusions propies. Cada carac te un vector ormal que surt cap a fora, i la posició de l'observador defineix un altre vector, pe tant si els vectors van en el mateix sentit llavors la cara es oculta, en canvi vectors en sentit contrari defineixen cares visibles. La cara defineix dos regions: una exterior i una altra interior a l'objecte que delimita. Si l'observador esta a la part exterior llavors veu la cara i si es troba en la part interior no veu la cara perque hi haurà una altra cara que la tapa. En concret les operaciones que cal fer amb els vectors son: øn ·øv < 0 ! cara potencialment visble øn ·øv " 0 ! cara invisible on øv és el vector que va des de l'observador al punt que analitzem. Projecció Paral.lela øv (vx, vy, vz) = ctn Coord mon øn (nx, ny, nz) øv (0, 0, −1) Coord obs

Projecció Perspectiva El vector øv no es constant. Quan fem la deformació perspectiva ja tindrem el øv constant i llavors hem de fer el test.

øn (nox, noy, noz) Culling en coords observador ønobs deformada ! nodef · z > només hem de mirar que: noz > 0 0 El culling no es efectiu quan hi han oclusions entre objectes i tampoc es fiable amb objectes solitaris, ja que no resolt les oclussions d'objectes concaus o amb objectes. El.liminació de parts amagades (EPA) Classificació Una possible classifiació de tots els algorismes que existeix es segons la precisió d'aquests: • Precisió objecte: intenten determinar les oclusions reals, idenpendentment de la rasterització. • Precisió imatge: calculen les oclussions tenint en compte la rasterització. Aquests algorismes no són exactes. • Hibrids: fan calculs en precisió imatge i calculs en precisió objecte. A) Precisió objecte: 30

• Són algorismes més antics. • Fan un text de la geometria d'un objecte contra la geometria d'un altre objecte, està basat en test d'intersecció entre arestes i cares. • La sortida són poligons visibles. • Son algorismes costossos ja que fan moltes interseccions. • Independents del dispositiu de sortida (inicialment concebuts per pantalles vectorials). • Altres utilitats: detecció de col.lisions però com EPA quasi no s'utilitzen. B) Precisió imatge: • Calculs mínims necessaris per una rasterització donada. • Només serveixen per dispositius rasters. • Menys costossos però no són exactes. • Dos principals algorismes: · ZBuffer (projectiu, backward): projectem poligons sobre la pantalla i calculem les oclussions a nvell de pixel. · Ray−tracing (fordward): es tira un raig desde l'observador i el primer punt que es troba serà el punt que representarà. • Càlcul d'oclussió es fa a nivell de pixel • La sortida és un conjunt de pixels visbles, no tenm ni geometria ni topologia. C) Hibrid: com a algorisme híbrid tenim el BSP (Binary Space partition). ZBuffer És un algorisme molt simple, facilment implementable per hardware i per tant és un algorisme molt ràpid. Per aquestes raons és el mètode més utilitzat en les API de sortida. Al FrameBuffer (FB) representem la imatge, però ara tenim un altra buffer el ZBuffer que es una còpia del FB. En el FB guardem el color, però en el z−buffer guardem valors Z (coordenades Z en el sistema de coordenades de l'observador) del punt projectat. FB [i, j] =c Indica que tenim un punt projetat ZB [i, j] amb color c i coordenades (x, y, z0) = z0 L'algorisme fa un recorregut de la Bdg i per cada poligon fa el proces de visualització fins fer la rasterització, en aquest moment es mira la coordenada Z i si es més propera que la que hi ha al z−buffer, s'actualitza el Z−buffer pels punts més propers. L'algorisme base seria el següent: IniBuffer (FBbuf, color fons); IniBuffer (Z−Buf, infinit); per cada poligon fer

31

pipeline; rasterització amb actualització del Z−Buffer. fper Això és una extensió de l'omplert linia per linia. El Z−Buffer nomès serveix per esecenes poligonals, per tant les primitives s'han de convertir a poligons (es a dir, convertir una esfera a poligons que mostrin una rodona, etc.) L'algorismes el que fa es: • Per cada poligon de la bdg i per cada vertex fer Transformar els vèrtexs a: • Sistema de coordenades de l'observador. • Deformar el vèrtex si hi ha deformació perspectiva • Transformar windows a viewport • Per últim fa l'omplert del poligon: es va omplint el poligon en cada linia d'escombrat on es càlcula els segments d'intersecció del poligon amb aquesta linia d'escombrat, i ompliriem l'interior dels segments. El segment d'intersecció es composa per la intersecció de la línia `escombrat que hi ha ammb dos arestes consecutives. Primer es calculen totes les interseccions i una vegada tenim els punts d'ntersecció els ordenenm per ientificar les diferents parelles. L'algorisme d'omplert és el següent: per i"[1..#interseccion] pas 2 x1:=X intersecció[inter(i)] x2:=X intersecció[inter(i+1)] per X en [x1..x2] fer pixel (x,y); fper fper Per a que aquest algorisme funcioni necessita que el nombre d'interseccions sigui parella, i per això hem de resoldre el problema de si un punt és interior a un poligon donat. La solució es que considerem les arestes semiobertes (només un dels vèrtexs pertany a les arestes, considerar que la y minima de l'aresta no pertany al poligon). També considerem que s'eliminen les arestes horitzontals, i si 2 arestes es rasteritzen en el mateix pixel llavors agafem l'aresta que tingui un x mínima o el.liminen les 32

dues. L'algorisme del Z−Buffer fa servir calculs incrementals per calcular els següents punts que s'ha de epresentar. Els calculs incrementals es poden utilitzar gràcies a la coherencia de la línia per línia. Els calculs incrementals són càlculs que ens estalvien fer sempre la intersecció de la línia d'escombrat amb l'aresta i d'aquesta forma nomès hem de fer una suma d'un desplaçament. b = real (−(x2−x1)) a = real (y2−y1) c = −a · real (x1) − b · real (y1) (xi, Y) = Recta " y=Y ! axi+bY+c=0 !

Suposant xi conegut, llavors quan val Recta " y=Y+1?? (càlcul de la intersecció de la recta amb la següent linia d'escombrat).

Actualitzar per tant es redueix a una operació aritmètica amb x (calculta en un preproces). Pel que fa al calcul de la següent z, també es pot utilitzar els calculs incrementals:

Aquest és el càlcul incremental en l'interior d'una línia d'escombrat per calcular la següent z del poligon. També tenim un càlcul incremental entre les línies d'escombrat per calcular la z de la següent linia d'escombrat.

TEMA 7.− IL−LUMINACIÓ Modelització de la llum La visualitzaciód'un objecte real es pot fer de dierents maneres: • filferros • ELO: el.liminació de linees ocultes • EPA (El.liminació de parts amagades) sense il.luminació. • EPA amb il.luminació, cada cara te un diferent color segons la seva situació. 33

El color d'un objecte és la llum que surt de l'objecte cap a l'observador. El color com es una ona te una certa longitud () i aquesta longitud és la que ens defineix el color. La llum que percebim dels objectes es una llum reflectida per l'objecte. El mecanisme de creació i de transport de llum en una superficie es la relexió i l'emissió (només en cas d'un focus). Sobre la superficie hi han entrades de llum (incidencia) i una reflexió d'aquestes incidencies. les incidencies provenen de fonts de lums (punts o superficies de volum que emeten llum) que seria una il.luminació directa i també rep llum d'altres superfícies (llum indirecta). Hi ha una emissió del focus i reflexions en les superfícies, però el que surt d'una superficie es constant al final, i en aquest cas parlem de que es produeix un equilibri energètic. Per tant en regim estable, mantenint fixos els objectes i focus, la llum que surt d'una superfície en una direcció donada és constant. Hi han tres tipus de mecanismes ideals de reflexió: • Reflexió difusa: arriba el raig incident i s'inserta en l'objecte i després surt en totes les direccions i sempre amb la mateixa quantitat de llum en qualsevol direcció. Reflexió constant en totes les direccions de la semiesfera. • Reflexió especular: els objectes es comporten com miralls, no deixa penetrar la llum en l'objecte. L'angle d'entrada del raig és el mateix que el del raig de sortida. • Reflexió glossy: es una mescla dels dos tipus de reflexions anteriors. El raig entra en l'objecte i surt en totes les direccions però no es constant la quantitat de llum que surt, hi ha més llum en la direcció especular. Tot això s'ha fet amb les següents hipotesis: • El medi de transmissió de la llum és el buit. • Els objectes són opacs (no es modelitzan transparencies). • No es mdelitza reflexió glossy. • Només modelitzarem la llum directa i no la indirecta, és a dir, estudiem models locals. • no tindrem ombres, efectes miralls, es a dir, cap il.luminació indirecta. Modelització de l'il.luminació d'un entorn en un model local La superfície dels objectes serà opaca i hi haurà reflexió difusa i especular. Aquestes característiques de l'objecte ens defineix les propietats d'il.luminació d'un objecte (propietats òptiques). Els focus seràn puntuals i o formaràn part de l'escena, només ajuden a visualitzar els altres objectes. El model d'il.luminació de l'escena el formen tots els focus que il.luminen la escena. Calcul de la il.luminació Premises: • Tenim el model local amb les hipotesis anteriors. • Farem una discretització de l'espectre de la llum que es contnu

34

Definirem el color amb tres components (R, G; B) i la suma ddels tre ens dona el color de l'objecte, i la seva intensitat. Intensitat percebuda en direcció v surtint del punt p. Aquest resultat es adimensional i estarà entre [0.0 a 1.0] I(p,øv) = (0.0, 0.5, 0.5) en el punt p veiem un color cyan (blau verd) en la direcció øv. El color serà la ponderació dels components R, G, B i la brillantó és la norma=

Reflexió difusa Focus ! posició (xf, yf, zf) intensitat IF(IFR, IFG, IFB) Intensitat reflectida en P i procedent del focus depen de: • IF és la intensitat que arriba. • Propietats d'il.luminació de l'objecte. • Orientació de la superfície. øN : vector normal de la superficie. øL: vector que uneix focus amb el punt P normalitzat:

Si øL es 0 vol dir que tenim els dos vector perpendiculars i per tant que tenim la mínma llum. En canvi si es 1 es que estàn en la mateixa direcció i que tenim la màxima llum. La fòrmula de la intensitat és:

on kd·Od defineixen les propietats d'il.luminació de l'objecte. • kd: és el coeficient de reflexió difusa i varia entre 0 i 1. Molt reflectant valor 1, pos reflectant 0. • Od: color difus de l'objecte (OdR, OdG, OdB) que indica el color de l'objecte. Aquest és el model de reflexió Lamberlià. La intensitat de la reflexió difusa ha de ser més petita o igual que la intensitat del focus. Reflexió especular No nomès veiem el raig simetric al d'entrada del raig de llum, sino que veiem un rang de raigs, per tant la formula es modifica de la sgúent forma:

35

On øV és el vector des del focus al punt de la superficie i øR és la raig que surt reflectit. La n és un enter i ens redueix l'angle de visió si l'augmentem. Aquesta n és l'exponent de reflexió especular. Terme Ambient Aquest terme ambient es refereix a la llum ambient la qual te la següent fórmula:

Això simula empiricament les interreflexions difuses de l'entorn i sense això només es veurien les cares o parts il.luminades pel focus. Eqüació de la il.luminació

Aquest és el model d'il.luminació Phong. El model de Lambert és el mateix que el de Phong pero sense la component especular. Referencia Software Gràfic (CPET) 1 GC − 3 Creació Aplicació model gràfic interrogació modificar visualització entrada objecte a visualitzar Recobriment de fosfor Pistola de electrons Sistema d'enfocació Reflector

36

R G B pixel pigment R 1 0 1 1 2

G 0 1 1 0 1

B 0 0 0 1 0

! ! ! ! !

vermell verd groc magenta taronja

representació lògica del color del pixel scan_line (FB) Frame Buffer objecte a visualitzar event entrada cua d'events

modificar interrogació model gràfic Aplicació API sortida API entrada Aplicació

37

Distribuidor de funcions P1 P2 P3 event 1 circumstancia 1 event 2 circumstancia 1 event 1 circumstancia 2 Creació model Conversió model Consultes Visualització Modificació arestes silueta (x, y) x y + − − +

38

+ − − + y x

r P(x, y) ! (r, ) r="(x2+y2) = arctg (y/x) (x, y, z) x y z z y x r

P(x, y, z) ! (r, , ) r="(x2+y2+z2) = arcsen (y/x) =arctg (z/x) z

39

y x + − − + − + v1 v2 vn v1 v2 v3 vn aresta aresta geometria ! coordenades topologia ! {a}:{v} implicta en l'ordenació dels vertexs. vini vfi e1 e2 e3 el conjunt de vertexs esta explicit geometria ! tots els vèrtexs topologia ! {a}:{v} Tenim informació duplicada (vertexs)

40

arestes

Punters vertexs En aquest cas no dupliquem la informació encara que ocupem mes memoria que en el primer cas

Sòlid p " p' " Esfera(p,r) tal que p' és interna al sòlid paral.lelipipede piramide prismes objecte Físic model matemàtic Esquema de representació passant forant en dos cares 6+4=10 cares No passant forant en una cara 6+4+1 =10 cares c:{e} e:{v} c:{v} Reconstrucció aresta

41

Equació recta: P= v1+ ·v1v2 v1 v2 Reconstrucció pla suport d'una cara u=v1v2 v=v2v3 w=u"v ! perpendicular al pla ax+by+cz+d=0 a=wx b=wy c=wz d= −a·(v1x)−b·(v1y)−c·(v1z) v3 v2 v1 vfi vini e F1 F2 Cara negativa Cara positiva Cara negativa Cara positiva vfi vini ean eap

42

epn epp x y z Proces de visualització 3D x' y' Proces de visualització 2D

Pla de projecció P(x,y,z) P' Direcció de projecció VRP z y x obs øv obs P(x,y,z) P' øv= vector de visió p'= rescta (p,øv) " pla de projecció VRP

43

z y x obs P'= r(p, obs) " pla =

øv P(x,y,z) P' VRP z y x Pla projecció VRP P' P P1 P2 P1' P2' P2' P1' P2 P1

44

P P' VRP Pla projecció obs VRPmon = (vrp.x, vrp.y, vrp.z) VRPobs = (0, 0, 0) Pla projecció en coordmon = ax+ by+ cz+ d=0 a=v.x; b=v.y, c=v.z d= −a·vrp.x − b·vrp.y − c.vrp.z Eqüació del pla en coordobs ! z= 0obs P' (x', y', z')mon ! (x'', y'', 0)obs Sist. Coord. Obs (xobs, yobs, zobs) o zobs Sist. Coord. Mon (0, x, y, z) yobs xobs z y viewport x window P(x,y,z)

45

P'

z y x zobs xobs Gir respecte l'eix z de l'observador yobs VRP yobs xobs VRP Pla de projecció yobs xobs obs d P P' P'' y0 y'' −z0 zobs

" 46

øv zmon y x prisma de visió La matriu final amb les rotacions és la següent: 1 0 0 0

0 Cos −sen 0

0 Sen Cos 0

0 0 0 1

P*(T*Ry*Rx*Rz) Aquesta és la matriu de canvi de sistema de coordenades angz VRP transformció mon−dispositiu retallat 1 3D projectat 2D VUP angz C B A yobs yobs 47

zobs zobs projecció perspectiva piràmide de visió projecció paral.lela retallat 2 rasterització (0,0) (−wd.a/2, −wd.h/2) P(i,j)

xvp yvp yw xw P (xw, yw) viewport (X−Lib) viewport (OpenGL) window A C D B A: totalment interior B: totalment exterior C, D : parcialment interior. 48

A C E D F B A: totalment interior B: totalment exterior C, D, E: parcialment interiors. F: englobant. ax+by+c=0 x=wd.pmin.x+wd.x (xk, yint)

1 pixel per columna 1 pixel per fila Tenim la recta (x1, y1) a (x2, y2), la recta rasteritzada serà: (x1, y1), (x1+1, y1 " y1+1), (x1+2, y1 " y1+1 " y1+2) Sempre augmentem en 1 la x i la y depen (o augmentem en 1 la y, o la deixem tal qual,, etc.) ax+by+c=0 ax+by+c>0 SubEspai positiu (SE+) ax+by+c<0 SubEspai negatiu (SE−) pixel recta mitjana (yi+0.5)

49

xi+1 xi yi yi+1 · ·

· · x ·

x − pixel en el que ens trobem · punts veïns. X

2 1 3 e1 v1 v2 e2 v2 v3 e3 v3 v1 vella actualitzar nova 3 2 4 5 6 1 cursor

50

filferros omplert de l'objecte sense diferenciar arestes omplert de l'objecte diferenciant arestes Només arestes que es veuen 1 2 3 4 5 6 Les cares 1, 2, 3 tapen a les cares 4, 5, 6 øn objecte exterior obs pla cara øv zobs (0,0,−1)obs øn pla projecció pla projecció øn obs zobs A

51

B Les cares A i B no es veuen senceres i el culling les admetriea 2 interseccions 1, 2, o 3 ! 2 interseccions 4 interseccions (l'horitzontal no la comptem) 0, 1 o 2 ! 0 interseccions (x2,y2) (x1,y1) y=Y+2 y=Y+1 y=Y xi+x xi+x+x ax+by+c=0 ! eqüació real de la recta en el sistema de coordenades de dispositiu. xi incidencia superficies reflexió B A C

I(p, øv) =R,G,B

52

0 si øv=øR

si øv=øR

53

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.