Computacion Grafica 2

47
COMPUTACION GRAFICA II COMPUTACION GRAFICA II (7050160100642)->M (7050160100642)->M (7050150100642)->E (7050150100642)->E Prof.: Arq.Iván Burgos, Prof.: Arq.Iván Burgos, Mg.Sc. Mg.Sc. (Ing.Luz-1989) (Ing.Luz-1989) Julio, 1999 Julio, 1999 omp.Grafica II, I.Burgos-Julio/1999 omp.Grafica II, I.Burgos-Julio/1999

description

principios basicos de computacion grafica tridimensional usando open gl

Transcript of Computacion Grafica 2

Page 1: Computacion Grafica 2

COMPUTACION GRAFICA IICOMPUTACION GRAFICA II(7050160100642)->M(7050160100642)->M(7050150100642)->E(7050150100642)->E

Prof.: Arq.Iván Burgos, Mg.Sc.Prof.: Arq.Iván Burgos, Mg.Sc.(Ing.Luz-1989)(Ing.Luz-1989)

Julio, 1999Julio, 1999

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Page 2: Computacion Grafica 2

BIBLIOGRAFIA :

Principles of Interactive Computer Graphics. W.Neumann & R.Sproull. Ed.McGraw-Hill, Inc. 1979.

Interactive Microcomputer Graphics. Chan S. Park. Ed.Addison Wesley, Inc. 1985. Graficacion Por Computador con Pascal. Marc Berger. Ed.Addison-Wesley

Iberoamericana, 1991. Computer Graphics. D.Hearn & P.Baker. Ed.Prentice Hall, 1986. Programming with C++. John Hubbard. Ed.MacGraw Hill, Shaum’s Outline Series , 1996. C++. Ivor Horton. Wrox Press Ltd.,1998. Your First C/ C++ Program. Alan Neibauer. Ed.Sybex, Inc. , 1994. C++. Ivor Horton. Wrox Press Ltd.,1998. OpenGL Programming Guide. M.Woo, J.Neider & T.Davis. Ed.Addison-Wesley Developer

Press, 1997. OpenGL Programming for Windows 95 & Windows NT. Ron Fosner. Ed.Addison-Wesley

Developer Press, 1998 Algorithms, Data Structures and problem solving with C++. Mark Allen Weiss. Ed.Addison-

Wesley Publisher, 1995.

COMPUTACION GRAFICA IICOMPUTACION GRAFICA II

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Page 3: Computacion Grafica 2

Representación Gráfica TridimensionalRepresentación Gráfica Tridimensional

P1P1

x1x1y1y1

Representación Representación matricialmatricialdel Punto P1:del Punto P1:

x1 x1 y1 y1 z1 z1

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

z1z1

NOTA: Observese el sentido positivo del eje Z,NOTA: Observese el sentido positivo del eje Z,es Mano Derecha.es Mano Derecha.

Page 4: Computacion Grafica 2

Representación Gráfica TridimensionalRepresentación Gráfica Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Sentido Mano DerechaSentido Mano Derecha(usado por el OpenGL)(usado por el OpenGL)

Sentido Mano IzquierdaSentido Mano Izquierda(Según Monitor)(Según Monitor)

Page 5: Computacion Grafica 2

Representación Gráfica TridimensionalRepresentación Gráfica Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Objetos Transparentes (Wire Frame)Objetos Transparentes (Wire Frame)

Objetos SolidosObjetos Solidos

Page 6: Computacion Grafica 2

Técnicas Tridimensionales de Técnicas Tridimensionales de RepresentaciónRepresentación

Proyecciones Paralelas:Proyecciones Paralelas:

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

P1P1

P2P2

P1’P1’

P2´P2´

Plano de ProyeccionPlano de Proyeccion

Centro de Proyeccion en Centro de Proyeccion en

Page 7: Computacion Grafica 2

Técnicas Tridimensionales de Técnicas Tridimensionales de RepresentaciónRepresentación

Proyecciones Perspectivas:Proyecciones Perspectivas:

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

P1P1

P2P2

P1’P1’

P2´P2´

Plano de ProyeccionPlano de Proyeccion

Centro de ProyeccionCentro de Proyeccion

Page 8: Computacion Grafica 2

Criterios de Representación Criterios de Representación TridimensionalTridimensional

Siempre Objetos ConvexosSiempre Objetos Convexos. Los cuales son representados a . Los cuales son representados a su vez por conjuntos de planos o poligonos.su vez por conjuntos de planos o poligonos.Lo usual es almacenar la informacion en tres arreglos: Lo usual es almacenar la informacion en tres arreglos: Vertices, Bordes o Lineas y Poligonos o Superficies.Vertices, Bordes o Lineas y Poligonos o Superficies.

v1v1 x1x1 y1y1 z1z1 E1E1 v1v1 v2v2v2v2 x2x2 y2y2 z2z2 E2E2 v2v2 v3v3v3v3 x3x3 y3y3 z3z3 E3E3 v3v3 v1v1v4v4 x4x4 y4y4 z4z4 E4E4 v3v3 v4v4v5v5 x5x5 y5y5 z5z5 E5E5 v4v4 v5v5

E6E6 v5v5 v2v2

s1s1 e1e1 e2e2 e3e3s2s2 e2e2 e4e4 e5e5

e6e6

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

v1v1

v2v2

v3v3v4v4

v5v5s1s1 s2s2e1e1

e2e2

e3e3

e6e6

e5e5e4e4

Page 9: Computacion Grafica 2

ECUACIONES VARIAS.-ECUACIONES VARIAS.-La orientacion de un plano se determina por el Vector La orientacion de un plano se determina por el Vector Normal (DN) a ese plano.Normal (DN) a ese plano.

Comp.Grafica I, I.Burgos-Julio/1999Comp.Grafica I, I.Burgos-Julio/1999

Criterios de Representación Criterios de Representación TridimensionalTridimensional

xx

yy

zz

DxN,DyN,DzNDxN,DyN,DzNAsi, si el punto esta en el plano,Asi, si el punto esta en el plano,satisface la igualdad:satisface la igualdad:Ax+By+Cz+D=0;Ax+By+Cz+D=0;de donde cualquier punto fuera del de donde cualquier punto fuera del plano cumple la siguiente desigualdadplano cumple la siguiente desigualdadAx+By+Cz+D<>0;Ax+By+Cz+D<>0;Cualquier punto del lado dentro Cualquier punto del lado dentro del plano produce un valor negativodel plano produce un valor negativopara Ax+By+Cz+D; y en casopara Ax+By+Cz+D; y en casocontrario produce valor positivo.contrario produce valor positivo.

xP,yP,zPxP,yP,zP

Page 10: Computacion Grafica 2

ECUACIONES VARIAS.-ECUACIONES VARIAS.-Productos Vectoriales.Productos Vectoriales.

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Criterios de Representación Criterios de Representación TridimensionalTridimensional

Sean Sean v1v1=(x1,y1,z1) y =(x1,y1,z1) y v2v2=(x2,y2,z2), =(x2,y2,z2), el producto punto viene dado por:el producto punto viene dado por:v1.v2=x1x2+y1y2+z1z2v1.v2=x1x2+y1y2+z1z2, el producto , el producto punto no es vector sino un numero realpunto no es vector sino un numero real(escalar), por lo que en forma vectorial :(escalar), por lo que en forma vectorial :v1.v2=|v1| |v2| x cos θv1.v2=|v1| |v2| x cos θ,,de donde si v1 y v2 forman un angulo de donde si v1 y v2 forman un angulo recto entonces el producto punto =0recto entonces el producto punto =0

El El Producto CruzadoProducto Cruzado de los vectores de los vectores v1v1 y y v2v2 es otro es otrovector:vector:v1 x v2 = (y1z2-z1y2,z1x2-x1z2,x1y2-y1x2)v1 x v2 = (y1z2-z1y2,z1x2-x1z2,x1y2-y1x2)el producto cruzado de dos vectores no paralelos es un vector perpendicular a ambosel producto cruzado de dos vectores no paralelos es un vector perpendicular a ambos

θθ

v2v2

v1v1

Page 11: Computacion Grafica 2

Matrices y TransformacionesMatrices y TransformacionesPara la representacion matricial tridimensional, se utiliza el Para la representacion matricial tridimensional, se utiliza el mismo criterio de la bidimensional: [ x y z ] => [x y z 1]mismo criterio de la bidimensional: [ x y z ] => [x y z 1]

de donde la matriz general de 4 x 4 de transformaciones de donde la matriz general de 4 x 4 de transformaciones tridimensionales es:tridimensionales es: a b c p a b c p 3 x33 x3 3x1 3x1

d e f g d e f g Transf.LinealesTransf.Lineales Proy.PerspectivasProy.Perspectivas

h i j n h i j n 1x31x3 1x11x1

l m n s l m n s TraslacionTraslacionEscalam.GeneralEscalam.General

Esto nos brinda la posibilidad de multiples combinacionesEsto nos brinda la posibilidad de multiples combinaciones

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Page 12: Computacion Grafica 2

Matrices y TransformacionesMatrices y TransformacionesTraslacion:Traslacion:

x’=x+lx’=x+ly’=y+my’=y+mz’=z+nz’=z+n

matriz de transformacion de traslacion:matriz de transformacion de traslacion:

1 0 0 0 1 0 0 0 0 1 0 00 1 0 00 0 1 0 0 0 1 0 l m n l m n 11

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Rotacion:Rotacion:en X:en X: en Y:en Y: en Z:en Z:1 0 0 01 0 0 0 cos(φ) 0 -sen(φ) 0 cos(φ) 0 -sen(φ) 0 cos(ψ) sen(ψ) 0 0 cos(ψ) sen(ψ) 0 00 cos(0 cos() sen() sen() 0 ) 0 0 0 1 0 0 1 0 0 -sen(ψ) cos(ψ) 0 0 -sen(ψ) cos(ψ) 0 00 -sen(0 -sen() cos() cos() 0) 0 sen(φ) 0 cos(φ) 0 sen(φ) 0 cos(φ) 0 0 0 0 1 0 0 1 0 0 0 0 10 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1

Page 13: Computacion Grafica 2

Matrices y TransformacionesMatrices y TransformacionesEscalamiento Local:Escalamiento Local:x’=x*Sxx’=x*Sxy’=y*Syy’=y*Syz´=z*Szz´=z*Szsi Sx=Sy=Sz>1 aumentasi Sx=Sy=Sz>1 aumentasi Sx=Sy=Sz<1 disminuyesi Sx=Sy=Sz<1 disminuye

matriz escalamiento local:matriz escalamiento local:Sx 0 0 0Sx 0 0 00 Sy 0 00 Sy 0 00 0 Sz 00 0 Sz 00 0 0 10 0 0 1

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Escalamiento General:Escalamiento General:matriz escalamiento General:matriz escalamiento General:1 0 0 01 0 0 00 1 0 00 1 0 00 0 1 00 0 1 00 0 0 S0 0 0 S

Al establecer esta operación se debeAl establecer esta operación se debenormalizar la matriz resultante:normalizar la matriz resultante:x/s, y/s, z/s, s/sx/s, y/s, z/s, s/s

Page 14: Computacion Grafica 2

Matrices y TransformacionesMatrices y TransformacionesReflexiones:Reflexiones:Matriz Reflexion en XY:Matriz Reflexion en XY: 1 0 0 01 0 0 0

0 1 0 00 1 0 00 0 -1 00 0 -1 00 0 0 10 0 0 1

en YZ:en YZ: -1 0 0 0-1 0 0 0 0 1 0 00 1 0 0 0 0 1 00 0 1 0 0 0 0 10 0 0 1

en XZ: en XZ: 1 0 0 0 1 0 0 0 0 -1 0 00 -1 0 0 0 0 1 00 0 1 0 0 0 0 10 0 0 1

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Page 15: Computacion Grafica 2

Matrices y TransformacionesMatrices y TransformacionesRotacion en Pivote Arbitrario:Rotacion en Pivote Arbitrario:

Concatenacion de matrices (recordar el PushMatrix y Concatenacion de matrices (recordar el PushMatrix y PopMatrix del OpenGL), PopMatrix del OpenGL), Se sigue el mismo procedimiento de 2Dim.Se sigue el mismo procedimiento de 2Dim. Rota (ψ)= Mtrasl*RotaX*RotaY*RotaZ*RotaYRota (ψ)= Mtrasl*RotaX*RotaY*RotaZ*RotaY-1-1*RotaX*RotaX-1-1*Mtrasl*Mtrasl-1-1

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Escalamiento en Pivote Arbitrario:Escalamiento en Pivote Arbitrario:Se sigue el mismo procedimiento de 2DimSe sigue el mismo procedimiento de 2Dim Matriz Concatenada:Matriz Concatenada:

sX 0 0 0sX 0 0 00 sY 0 00 sY 0 00 0 sZ 00 0 sZ 0(1-sX)*l (1-sY)*m (1-sZ)*n 1(1-sX)*l (1-sY)*m (1-sZ)*n 1

Page 16: Computacion Grafica 2

Ocultamiento de SuperficiesOcultamiento de Superficies

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Existen varios algoritmos que tratan el problema del Existen varios algoritmos que tratan el problema del ocultamiento de superficies,ocultamiento de superficies, el tratado en este punto es el mas basico y elemental. Los el tratado en este punto es el mas basico y elemental. Los objetos estudiados objetos estudiados deben ser de tipo convexo. Para tratar un objeto concavo debe deben ser de tipo convexo. Para tratar un objeto concavo debe subdividirse en subdividirse en varios menores de tipo convexo.varios menores de tipo convexo.El criterio primario para ocultar superficies es determinar la El criterio primario para ocultar superficies es determinar la normal al plano en estudiocon respecto al vector constituido normal al plano en estudiocon respecto al vector constituido por el observadorLa operación esta dada por el producto por el observadorLa operación esta dada por el producto cruzado de los dos vectores que determinan un tercero.cruzado de los dos vectores que determinan un tercero.Con los lados o bordes del plano se conocen dos vectores del Con los lados o bordes del plano se conocen dos vectores del plano y con la operación entre ellos se determina el normal el plano y con la operación entre ellos se determina el normal el cual a su vez se compara con el vector observador y cual a su vez se compara con el vector observador y dependiendo de su angulo (- 0 +) se establece que superficie o dependiendo de su angulo (- 0 +) se establece que superficie o cara se ve y cual no. cara se ve y cual no.

Page 17: Computacion Grafica 2

Ocultamiento de SuperficiesOcultamiento de Superficies

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

qq

pp

R (Vector Normal al plano)R (Vector Normal al plano)

Con los bordes se determinan los Con los bordes se determinan los dos vectores en el plano (p y q)dos vectores en el plano (p y q)R=¦p¦ ¦q¦ *sen(θ)=pxqR=¦p¦ ¦q¦ *sen(θ)=pxq[Rx,Ry,Rz]=[px,py,pz]x[qx,qy,qz][Rx,Ry,Rz]=[px,py,pz]x[qx,qy,qz]Rx=pyqz-pzqyRx=pyqz-pzqyRy=pzqx-pxqzRy=pzqx-pxqzRz=pxqy-pyqxRz=pxqy-pyqx

El proximo paso es El proximo paso es comparar el angulo comparar el angulo formado por el vector formado por el vector observador y la observador y la normal al plano, si el normal al plano, si el valor es negativo la valor es negativo la cara no se ve, caso cara no se ve, caso contrario se vecontrario se ve

OBSERVADOROBSERVADOR(Obx,Oby,Obz)(Obx,Oby,Obz)

NORMAL AL NORMAL AL PLANO (R)PLANO (R)

aaa=R.OBSERVADOR;a=R.OBSERVADOR;a=RxObx+RyOby+RzObza=RxObx+RyOby+RzObzel vector OBSERVADOR se determina el vector OBSERVADOR se determina por las coordenadas del OBSERVADOR por las coordenadas del OBSERVADOR y un punto cualquiera del plano. y un punto cualquiera del plano. Ejemplo:un verticeEjemplo:un vertice

Page 18: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Basicamente repite el esquema 2D pero con la sensacion de Basicamente repite el esquema 2D pero con la sensacion de profundidad, es por ello importante el valor de la coordenada Z. profundidad, es por ello importante el valor de la coordenada Z. Para Proyecciones Axonometricas el asunto es sencillo pues es Para Proyecciones Axonometricas el asunto es sencillo pues es la coordenada Z, la que marca la pauta.la coordenada Z, la que marca la pauta.

objetoobjeto

ZV (plano clip)ZV (plano clip)

zob1zob1 zob2zob2

Lineas proyeccionLineas proyeccionYY

ZZXX

Zob1>ZVZob1>ZV

objetoobjeto

ZV (plano clip)ZV (plano clip)

zob1zob1 zob2zob2

YY

ZZXX

anterioranterior posteriposterioror

Zob1<ZVZob1<ZV

Page 19: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Para Perspectivas se proyectan los rayos del C.P. Pasando a Para Perspectivas se proyectan los rayos del C.P. Pasando a traves de una ventana que forma la piramide de base cuadrada traves de una ventana que forma la piramide de base cuadrada (o rectangular), generando asi un volumen de clipping, dentro (o rectangular), generando asi un volumen de clipping, dentro del cual los objetos se ven total o parcialmente o no se vendel cual los objetos se ven total o parcialmente o no se ven

ventanaventanaVolumen de clippingVolumen de clipping

FondoFondoFrenteFrente

C.P.C.P.

Page 20: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Proyecciones Paralelas:Proyecciones Paralelas:

xx zz

yy

yvmaxyvmax

yvminyvmin

PCT(tope)PCT(tope)

PCB(base)PCB(base)

Direccion del vector : ylp/zlpDireccion del vector : ylp/zlp

Cualquier punto (x,y,z)en esa linea inclinada cumple que:Cualquier punto (x,y,z)en esa linea inclinada cumple que:y/z=ylp/zlp,y/z=ylp/zlp,la ecuacion de la recta del punto con la inclinacion sera:la ecuacion de la recta del punto con la inclinacion sera:yytt=ylp/zlp (z)+yvmax; que es la ecuacion del plano=ylp/zlp (z)+yvmax; que es la ecuacion del plano

Page 21: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Proyecciones Paralelas:Proyecciones Paralelas:

xx zz

yy

yvmaxyvmax

yvminyvmin

PCT(tope)PCT(tope)

PCB(base)PCB(base)

Direccion del vector : ylp/zlpDireccion del vector : ylp/zlp

yybb=ylp/zlp (z)+yvmin; =ylp/zlp (z)+yvmin; xxdd=xlp/zlp (z)+xvmax;=xlp/zlp (z)+xvmax;xxii=xp/zlp (z)+xvmin;=xp/zlp (z)+xvmin;

Page 22: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Proyecciones Paralelas:Proyecciones Paralelas:

ym=ylp/zlp ; ym=ylp/zlp ; xm=xlp/zlp ;xm=xlp/zlp ;entonces :entonces :yt=ym(z)+yvmax ;yt=ym(z)+yvmax ;yb=ym(z)+yvmin;yb=ym(z)+yvmin;xd=xm(z)+xvmax;xd=xm(z)+xvmax;xi=xm(z)+xvmin.xi=xm(z)+xvmin.

Page 23: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Proyecciones Perspectivas:Proyecciones Perspectivas:

xx zz

yy

yy xx

zz

PCBPCB

PCTPCT

PCFPCF(ZF)(ZF)

PCPPCP(ZP)(ZP)

yvminyvmin

yvmaxyvmax

C.P.C.P.(yc,zc)(yc,zc)

PCIPCI PCDPCD

PCFPCF(ZF)(ZF)

PCPPCP(ZP)(ZP)

xvmaxxvmaxxvminxvmin

C.P.C.P.(xc,zc)(xc,zc)

Cualquier punto (p) para, por ejemplo, la linea (plano)PCT cumple (y,z)=(yvmax,0), unido con C.P.(centro Cualquier punto (p) para, por ejemplo, la linea (plano)PCT cumple (y,z)=(yvmax,0), unido con C.P.(centro proyeccion)proyeccion)(y,z)=(yc,zc), igualando ambas ecuaciones en la ecuacion de la recta se tiene: (y,z)=(yc,zc), igualando ambas ecuaciones en la ecuacion de la recta se tiene: yt=(yc-yvmax/zc)*z+yvmax ; asi para la base se tiene:yt=(yc-yvmax/zc)*z+yvmax ; asi para la base se tiene:yb=(yc-yvmin/zc)*z+yvmin ; para el lado derecho:yb=(yc-yvmin/zc)*z+yvmin ; para el lado derecho:xd=(xc-xvmax/zc)*z+xvmax ; para el lado izquierdo:xd=(xc-xvmax/zc)*z+xvmax ; para el lado izquierdo:xi=(xc-xvmin/zc)*z+xvminxi=(xc-xvmin/zc)*z+xvminsimplificando la pendiente del plano respectivo:simplificando la pendiente del plano respectivo:ytM=(yc-yvmax/zc) ; ybM=(yc-yvmin/zc) ; xdM=(xc-xvmax/zc) ; xiM =(xc-xvmin/zc) ;ytM=(yc-yvmax/zc) ; ybM=(yc-yvmin/zc) ; xdM=(xc-xvmax/zc) ; xiM =(xc-xvmin/zc) ;que a su vez son las pendientes de los planos PCT,PCB,PCD,PCI respectivamente.que a su vez son las pendientes de los planos PCT,PCB,PCD,PCI respectivamente.

Page 24: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Proyecciones Perspectivas:Proyecciones Perspectivas:

xx zz

yy

yy xx

zz

PCBPCB

PCTPCT

PCFPCF(ZF)(ZF)

PCPPCP(ZP)(ZP)

yvminyvmin

yvmaxyvmax

C.P.C.P.(yc,zc)(yc,zc)

PCIPCI PCDPCD

PCFPCF(ZF)(ZF)

PCPPCP(ZP)(ZP)

xvmaxxvmaxxvminxvmin

C.P.C.P.(xc,zc)(xc,zc)

Para que el punto p1(x1,y1,z1) sea visible debe estar ubicado entre PCT y PCB, entre PCI y PCD y ademas Para que el punto p1(x1,y1,z1) sea visible debe estar ubicado entre PCT y PCB, entre PCI y PCD y ademas entre PCF(ZF) y PCP(ZP) por lo que el chequeo y su codificacion es una extension del algoritmo de Cohen-entre PCF(ZF) y PCP(ZP) por lo que el chequeo y su codificacion es una extension del algoritmo de Cohen-Sutherland para recorte 2D.Sutherland para recorte 2D.x1<=xdM(z1)+xvmax y x1>=xiM(z1)+xvmin;x1<=xdM(z1)+xvmax y x1>=xiM(z1)+xvmin;y1<=ytM(z1)+yvmax y y1>=ybM(z1)+yvmin;y1<=ytM(z1)+yvmax y y1>=ybM(z1)+yvmin;z1<=ZP y z1 >=ZF.z1<=ZP y z1 >=ZF.Asi la secuencia del codigo de region es :Asi la secuencia del codigo de region es :F P T B R LF P T B R L

Page 25: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Programa Clipping en Pascal:Programa Clipping en Pascal:Program Clip3d; uses crt; Label Return; Type edge=(left,right,bottom,top,back,front); outcode=set of edge; Var YTM,YBM,XDM,XIM,Xc,Yc,Zc, X1,Y1,Z1,BackZ,FrontZ,X,Y,Z,X2,Y2,Z2, Yvmax,Yvmin,Xvmax,Xvmin, minX,maxX,minY,maxY:real; NumberOne,bandera:boolean; c,c1,c2:outcode; carent:char; Procedure CalcPend; Begin write('Ingresa coordenadas del centro de proyeccion ? - (Xc,Yc,Zc) '); readln(Xc,Yc,Zc); write('Ingresa coordenadas de P1 ? - (X1,Y1,Z1) '); readln(X1,Y1,Z1); write('Ingresa coordenadas de P2 ? - (X2,Y2,Z2) '); readln(X2,Y2,Z2); write('Ingresa valores minimos y maximos de ventana ? - (Xvmin,Xvmax,Yvmin,Yvmax) '); readln(Xvmin,Xvmax,Yvmin,Yvmax); write('Ingresa coordenadas "Z" de plano frontal y plano posterior ? '); readln(FrontZ,BackZ);

(continua….)

Page 26: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Programa Clipping en Pascal:Programa Clipping en Pascal:(viene ….)XIM:=(Xc-Xvmin)/Zc; XDM:=(Xc-Xvmax)/Zc; YBM:=(Yc-Yvmin)/Zc; YTM:=(Yc-Yvmax)/Zc; End;{CalcPend} Procedure ValCheq (zeta:real;var Xmin,Xmax,Ymin,Ymax:real); Begin Xmin:=(XIM*zeta)+Xvmin; Xmax:=(XDM*zeta)+Xvmax; Ymin:=(YBM*zeta)+Yvmin; Ymax:=(YTM*zeta)+Yvmax; End;{ValCheq} Procedure Code (x,y,z:real;var c:outcode); var i:byte; opcion:set of edge; Begin c:=[]; if x<minX then c:=[left] else if x>maxX then c:=[right]; if y<minY then c:=c+[bottom] else if y>maxY then c:=c+[top]; if z>BackZ then c:=c+[back] else if z<FrontZ then c:=c+[front]; End;{Code}

Function ClippedZ (a1,z1,a2,z2,m,b:real):real; Begin ClippedZ:=((a2-a1)*z1+(b-a1)*(z2-z1))/((a2-a1)-m*(z2-z1)); End;{ClippedZ}(continua….)

Page 27: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Programa Clipping en Pascal:Programa Clipping en Pascal: Function ClippedXorY (a1,b1,z1,a2,b2,z2,aclip,zclip:real):real; Begin if z2-z1<> 0.00 then ClippedXorY :=((b2-b1)/(z2-z1))*(zclip-z1)+b1 else if a2-a1<> 0.00 then ClippedXorY:=((b2-b1)/(a2-a1))*(aclip-a1)+b1 else ClippedXorY:=b1; End;{ClippedXorY}

Procedure CheqBandera (var x,y,z,xant,yant,zant:real); Begin if not bandera then begin x:=X1; y:=Y1; z:=Z1; xant:=X2; yant:=Y2; zant:=Z2; end {ifnotbandera} else if NumberOne then begin xant:=X1; yant:=Y1; zant:=Z1; end {ifnumberone} else begin xant:=X2; yant:=Y2; zant:=Z2; end;{else} End;{CheqBandera} (continua….)

Page 28: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Programa Clipping en Pascal:Programa Clipping en Pascal:Procedure CalcLeft (var x,y,z:real); var xclip,yclip,zclip, xant,yant,zant:real; Begin CheqBandera (x,y,z,xant,yant,zant); zclip:= ClippedZ(x,z,xant,zant,XIM,Xvmin); xclip:= (XIM*zclip)+Xvmin; yclip:= ClippedXorY (X1,Y1,Z1,X2,Y2,Z2,xclip,zclip); bandera:=true; x:=xclip; y:=yclip; z:=zclip End;{CalcLeft} Procedure CalcRight (var x,y,z:real); var xclip,yclip,zclip, xant,yant,zant:real; Begin CheqBandera (x,y,z,xant,yant,zant); zclip:= ClippedZ(x,z,xant,zant,XDM,Xvmax); xclip:= (XDM*zclip)+Xvmax; yclip:= ClippedXorY (X1,Y1,Z1,X2,Y2,Z2,xclip,zclip); bandera:=true; x:=xclip; y:=yclip; z:=zclip End;{CalcRight}

Procedure CalcBottom (var x,y,z:real); var xclip,yclip,zclip, xant,yant,zant:real; Begin CheqBandera (x,y,z,xant,yant,zant); zclip:= ClippedZ(y,z,yant,zant,YBM,Yvmin); yclip:= (YBM*zclip)+Yvmin;(continua….)

Page 29: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Programa Clipping en Pascal:Programa Clipping en Pascal: xclip:= ClippedXorY (y,x,z,yant,xant,zant,yclip,zclip); bandera:=true; x:=xclip; y:=yclip; z:=zclip End;{CalcBottom} Procedure CalcTop (var x,y,z:real); var xclip,yclip,zclip, xant,yant,zant:real; Begin CheqBandera (x,y,z,xant,yant,zant); zclip:= ClippedZ(y,z,yant,zant,YTM,Yvmax); yclip:= (YTM*zclip)+Yvmax; xclip:= ClippedXorY (y,x,z,yant,xant,zant,yclip,zclip); bandera:=true; x:=xclip; y:=yclip; z:=zclip End;{CalcTop}

Procedure CalcBacK (var x,y,z:real); var xclip,yclip,zclip, xant,yant,zant,zchange:real; Begin CheqBandera (x,y,z,xant,yant,zant); zchange:= (BackZ-z)/(z-zant); xclip:= ((x-xant)*(zchange))+x; yclip:= ((y-yant)*(zchange))+y; Zclip:=BackZ; bandera:=true; x:=xclip; y:=yclip; z:=zclip End;{CalcBack} (Continua….)

Page 30: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Programa Clipping en Pascal:Programa Clipping en Pascal: Procedure CalcFront (var x,y,z:real); var xclip,yclip,zclip, xant,yant,zant,zchange:real; Begin CheqBandera (x,y,z,xant,yant,zant); zchange:= (FrontZ-z)/(z-zant); xclip:= ((x-xant)*(zchange))+x; yclip:= ((y-yant)*(zchange))+y; Zclip:=FrontZ; bandera:=true; x:=xclip; y:=yclip; z:=zclip End;{CalcFront} Begin {Prog.Principal} clrscr; CalcPend; ValCheq (z1,minX,maxX,minY,maxY); Code (X1,Y1,Z1,c1); NumberOne:=true; bandera:=false; ValCheq (z2,minX,maxX,minY,maxY); Code (X2,Y2,Z2,c2); NumberOne:=false; bandera:=false; while (c1<>[]) or (c2<>[]) do begin if (c1*c2)<>[] then goto return; c:=c1; if c=[] then c:=c2;

(Continua….)

Page 31: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Programa Clipping en Pascal:Programa Clipping en Pascal: if left in c then CalcLeft (x,y,z) else if right in c then CalcRight(x,y,z) else if bottom in c then CalcBottom(x,y,z) else if top in c then CalcTop(x,y,z) else if back in c then CalcBack(x,y,z) else if front in c then CalcFront(x,y,z); if c=c1 then begin X1:=x; Y1:=y; Z1:=z; ValCheq (z1,minX,maxX,minY,maxY); Code(x,y,z,c1); bandera:=false; NumberOne:=true; end {if c=c1} else

(Continua….)

Page 32: Computacion Grafica 2

Recorte (Clipping) TridimensionalRecorte (Clipping) Tridimensional

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Programa Clipping en Pascal:Programa Clipping en Pascal:

begin X2:=x;Y2:=y; Z2:=z; ValCheq (z2,minX,maxX,minY,maxY); Code(x,y,z,c2); bandera:= false; NumberOne:=false; end {else} end;{while c1 or c2} writeln ('x1= ',X1:10:2,' y1= ',Y1:10:2,' z1= ',Z1:10:2); Writeln ('x2= ',X2:10:2,' y2= ',Y2:10:2,' z2= ',Z2:10:2); writeln(' Presiona cualquier tecla para Seguir....'); carent:=readkey; return:End. {prog.Principal}

Page 33: Computacion Grafica 2

OpenGLOpenGL

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

Analogía de la cámara para la visualización en OpenGL:

La comparacion de los procesos ilustra cada uno de los pasos a seguir en una visualizacion en OpenGL, la figura 3-1, emula la camara y la preparacion del ambiente de trabajo en OGL.La figura 3-2 nos indica que se debe contemplar dentro del OGL para tratar la visualizacion 3Dimensional en el orden adecuado.El proceso Modelview Matrix, contempla el viewing y modeling de la figura 3-1, los procesos posteriores siguen la misma secuencia.Figura 3-1

Page 34: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGLPrograma para generar un cubo.

#include <los_programas_headers_que_se_necesiten para windows.h>#include <GL/gl.h>#include <GL/glu.h>#include <GL/glut.h> // este se puede sustituir por el glaux.h

void init(void) { glClearColor(0.0,0.0,0.0); glShadeModel(GL_FLAT); }

void display (void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); glLoadIdentity(); // aclara la matriz /* viewing */ gluLookAt (0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0); glScalef (1.0,2.0,1.0); // modeling glutWireCube(1.0); // se puede sustituir por la funcion correspondiente del glaux glFlush(); }(continua…..)

Page 35: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL(viene…...)

Programa para generar un cubo.

void reshape (int w, int h) { glViewport(0,0,(GLsizei) w,(GLsizei) h ); glMatrixMode (GL_PROJECTION); glLoadIdentity(); // aclara la matriz glFrustum(-1.0,1.0,-1.0, 1.0,1.5,20.0); glMatrixMode (GL_MODELVIEW); }

main() { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(100,100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }

Page 36: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

void gluLookAt(Gldouble eyex, Gldouble eyey, Gldouble eyez, Gldouble centerx, Gldouble centery, Gldouble centerz, Gldouble upx, Gldouble upy, Gldouble upz);Los argumentos eye* indican la posicion de la camara, center* hacia donde la camara enfoca y up* la orientacion de la camara.

Comandos Utiles:Comandos Utiles:

Page 37: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

void glFrustum(Gldouble left, Gldouble right, Gldouble bottom, Gldouble top, Gldouble near, Gldouble far);Los parametros de esta funcion estan muy relacionados con el volumen de recorte (clipping) tratados con anterioridad.

Comandos Utiles:Comandos Utiles:

Page 38: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

void gluPerspective(Gldouble fovy, Gldouble aspect, Gldouble near, Gldouble far);Esta funcion es exactamente igual a glFrustum(); pero con parametros si se quiere mas intuitivos, vease el grafico para identificar dichos argumentos. La unica acotacion es que el valor de fovy debe estar entre 0 y 180 grados.

Comandos Utiles:Comandos Utiles:

Page 39: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

void glOrtho(Gldouble left, Gldouble right, Gldouble bottom, Gldouble top, Gldouble near, Gldouble far);Esta funcion grafica imágenes en proyecciones paralelas, ej: cortes, fachadas, etc.void glOrtho2D(Gldouble left, Gldouble right, Gldouble bottom, Gldouble top);Solo funciona para graficas bidimensionales.

Comandos Utiles:Comandos Utiles:

Page 40: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

void glViewport(Glint x, Glint y, Glsizei width, Glsizei height);Especifica las dimensiones de la ventana de vision, los valores por defecto son los de la resolucion inicial de la pantalla. X y Y son los valores del punto abajo-izquierdo.

Comandos Utiles:Comandos Utiles:

Page 41: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGLEn la figura 3-17; notamos en el lado izquierdo, una proyección que relaciona una imagen cuadrada en una ventana cuadrada tambien usando las rutinas :gluPerspective (fovy,1.0,near,far);glViewport(0,0,400,400);En el lado derecho, la ventana ha sido redimensionada a una ventana rectangular, pero la proyección no se ha modificado. La imagen aparece comprimida a lo largo del eje Y :gluPerspective (fovy,1.0,near,far);glViewport(0,0,400,200);Para evitar distorsiones, es mejor modificar el aspect ratio de la proyección para coincidir con la ventana de proyección :gluPerspective (fovy,2.0,near,far);glViewport(0,0,400,200);

Page 42: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

Es usado en los casos de modelos jerárquicos y complicados, por ejemplo si se quiere dibujar un auto y sus cuatro ruedas, cada una de las cuales posee a su vez cinco tuercas, y se dispone de una simple rutina para dibujar cada rueda y sus tuercas. Lo que se hace es llamar a la misma rutina cuatro veces cambiando únicamente las diferentes transformaciones que en cada posición toman efecto. En seudocódigo sería :

dibuja_auto ( ) ;recordar_posicion ( ) ;trasladar (rueda1) ;dibuja_rueda ( ) ;elimina_ultima_traslacion ( ) ; // por lo que la actual posición regresa al origen del autorecordar_posicion ( ) ;trasladar (rueda2) ;dibuja_rueda ( ) ;elimina_ultima_traslacion ( ) ; // por lo que la actual posición regresa al origen del auto…..Similarmente para cada rueda, se dibuja la rueda, se recuerda el lugar y se traslada a cada posición las tuercas dibujadas, eliminado así, las transformaciones luego que cada tuerca es dibujada…Ya que cada transformación es almacenada como matrices, el stack provee el mecanismo ideal para hacer las sucesivas operaciones, trasladando y eliminando. Todas las operaciones antes descritas como glLoadMatrix(); glMultMatrix(); glLoadIdentity(); trabajan como la matriz actual, es decir, como la matriz del tope del stack, el control de todo esto se ejecuta con glPushMatrix() y con glPopMatrix(); la primera función coloca la matriz actual en el tope del stack y la segunda función la elimina del tope.

Stacks de Matrices.-Stacks de Matrices.-

Page 43: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

De hecho glPushMatrix() significa “recordar_posicion” y glPopMatrix() significa “elimina_ultima_traslacion ” En el siguiente ejemplo se asume la existencia de rutinas de dibujo del auto, ruedas y tuercas :

dibuja_rueda_tuerca( ) { long i; dibuja_rueda( );

for(i=0 ; i<5 ; i++){ glPushMatrix( );

glRotatef(72.0*I,0.0,0.0,1.0);glTranslatef(3.0,0.0,0.0)dibuja_tuerca( );

glPopMatrix( );}

}dibuja_auto_rueda_tuerca( ) {

dibuja_auto( );glPushMatrix( );

glTranslatef(40,0,30); // hacia la primera ruedadibuja_rueda_tuerca( );

glPopMatrix( );

(continua…..)

Stacks de Matrices.-Stacks de Matrices.-

Page 44: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

(viene…..)glPushMatrix( );

glTranslatef(40,0,-30); // hacia la segunda ruedadibuja_rueda_tuerca( );

glPopMatrix( );…… // y asi con el resto de las ruedas…..

}

este código asume que los ejes de las ruedas y tuercas son coincidentes con el eje Z, que las tuercas estan espaciadas 72 grados y 3 unidades desde el centro de la rueda y que las ruedas frontales estan a 40 unidades al frente y 30 unidades a la derecha e izquierda del origen del auto.Por lo general el stack de modelaje (glMatrixMode(GL_MODELVIEW)) acumula hasta 32 matrices de 4x4 y el stack de proyecciones (glMatrixMode(GL_PROJECTION)) acumula tan sólo 2 matrices de 4x4.En el primer caso por defecto la primera matriz en el stack es la matriz identidad (glLoadIdentity ( )), por lo cual no es necesaria cargarla al iniciar cualquier proceso, en el segundo caso por la limitación existente de acumulación a dos matrices, es recomendable siempre usar glLoadIdentity ( ); antes de iniciar cualquier operación.

……………. glShadeModel (Glenum mode) ;Los parámetros son GL_SMOOTH y GL_FLAT. Para el primer caso los colores de cada vértice del objeto pueden ser tratados de manera independiente permitiendo a su vez la gradación cromática. Para el segundo caso el tratamiento del color de un vértice en particular se repite en el resto de los vértices.

Stacks de Matrices.-Stacks de Matrices.-

Page 45: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGL

CONCEPTOS.- Tipos de Iluminacion:Iluminacion Ambiente: es la luz que proviene de diversas partes dl ambiente y es imposiblde determinar de cual fuente especifica se genera, por lo que se dice parte de todas direcciones.Iluminacion Difusa: es la luz que viene en una sola direccion, es la mas brillante. Sin embargo, luego de refleljarse sobre alguna superficie, produce un efecto parecido al anterior.Iluminacion Especular: Es la que viene de una direccion particular y refleja en una direccion tambien particular. Se puede pensar en especular como brillantez. Por ejemplo: los plasticos y metales tiene un alto componente especular, por otro lado, las tizas y carpetas tiene ninguna.Iluminacion emisiva: Es aquella que se genera según las caracteristicas del material de la superficie, que recibe las iluminaciones anteriores.Ver ejemplos de esfera y esfera2.

glLight{ifv}(Glenum light, Glenum pname, TYPE param);Crea la luz por light,puede ser GL_LIGHT0,.....GL_LIGHT7 (8 en total), las caracteristicas de la luz se defiene por pname (ver tabla), y param indica los valores.

glColorMaterial (Glenum face, Glenum mode);Crea las propiedades del material de la superficie, especificada por mode, . Los parametros face son GL_FRONT, GL_BACK, GL_FRONT_AND_BACK (por defecto). Los parametros mode pueden ser GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_GL_DIFFUSE(defecto), GL_SPECULAR, GL_EMISSION

Iluminación Iluminación

Page 46: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGLIluminación Iluminación

Page 47: Computacion Grafica 2

Comp.Grafica II, I.Burgos-Julio/1999Comp.Grafica II, I.Burgos-Julio/1999

OpenGLOpenGLIluminación Iluminación