La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Infografía I RecortadoRecortado.  2002 J.C.Dürsteler - UPF- IUA Introducción ObjetivoObjetivo –Asegurar que solo se representan los puntos válidos.

Presentaciones similares


Presentación del tema: "Infografía I RecortadoRecortado.  2002 J.C.Dürsteler - UPF- IUA Introducción ObjetivoObjetivo –Asegurar que solo se representan los puntos válidos."— Transcripción de la presentación:

1 Infografía I RecortadoRecortado

2  2002 J.C.Dürsteler - UPF- IUA Introducción ObjetivoObjetivo –Asegurar que solo se representan los puntos válidos

3  2002 J.C.Dürsteler - UPF- IUA Introducción (2D) El cálculo de las direcciones de memoria de los píxeles que caen fuera de la pantalla puede ocasionarEl cálculo de las direcciones de memoria de los píxeles que caen fuera de la pantalla puede ocasionar –Leer fuera del mapa de memoria. –Escribir fuera del mapa de memoria. El direccionamiento incorrecto puedeEl direccionamiento incorrecto puede –Colgar el ordenador –Sobreescribir direcciones de memoria del propio u otro programa. –Causar errores intermitentes difíciles de localizar.

4  2002 J.C.Dürsteler - UPF- IUA Introducción (3D) Puede ocurrir que objetos situados detrás del observador y que no debieran verse aparezcanPuede ocurrir que objetos situados detrás del observador y que no debieran verse aparezcan –La escena se puede volver confusa. –Según donde esté el observador puede no verse nada. –La transformación perspectiva utiliza el inverso de la distancia, lo que puede dar lugar a valores infinitos. El recortado es imprescindible en el proceso de trazado (rendering)El recortado es imprescindible en el proceso de trazado (rendering)

5  2002 J.C.Dürsteler - UPF- IUA Estrategias 2D Hay tres formas de realizar el recortadoHay tres formas de realizar el recortado –Pre-cortado. Recortar antes de la fase de muestreo. Interesante para primitivas sencillas –Recortar durante el muestreo. Para figuras más complejas –Post-cortado. Recortar después del muestreo. Para geometrías muy complejas. Se muestrea el área contra una ventana rectangular más grande.Se muestrea el área contra una ventana rectangular más grande. Creando una memoria tampón rectangularCreando una memoria tampón rectangular La selección depende del coste computacionalLa selección depende del coste computacional Estudiaremos el pre-cortado básicamenteEstudiaremos el pre-cortado básicamente

6  2002 J.C.Dürsteler - UPF- IUA Recortado de puntos Basta considerar si las coordenadas del punto son interiores al rectángulo de recorteBasta considerar si las coordenadas del punto son interiores al rectángulo de recorte x min, y min x max, y max

7  2002 J.C.Dürsteler - UPF- IUA Recortado de líneas Recortar segmentos => calcular la intersección con el rectángulo de recorte.Recortar segmentos => calcular la intersección con el rectángulo de recorte. Cual es el punto de intersección bueno. Puede haber más de uno.Cual es el punto de intersección bueno. Puede haber más de uno. Hay circunstancias en las que no es necesario calcular la intersección.Hay circunstancias en las que no es necesario calcular la intersección.

8  2002 J.C.Dürsteler - UPF- IUA Algoritmo de Cohen- Sutherland Procede en dos fases:Procede en dos fases: –Eliminación de los casos triviales en los que no hay que recortar segmentos completamente dentro.segmentos completamente dentro. segmentos completamente fuera.segmentos completamente fuera. –Partición iterativa para encontrar los puntos de intersección.

9  2002 J.C.Dürsteler - UPF- IUA Cohen Sutherland Casos triviales Primer bit a 1: el punto está encima del límite superior. Si y>y maxPrimer bit a 1: el punto está encima del límite superior. Si y>y max Segundo bit a 1: el punto está por debajo del limite inferior. Si y<y minSegundo bit a 1: el punto está por debajo del limite inferior. Si y<y min Tercer bit a 1: el punto esta a la derecha de la frontera derecha. Si x>x maxTercer bit a 1: el punto esta a la derecha de la frontera derecha. Si x>x max Cuarto bit a 1: el punto está a la izquierda de la frontera izquierda. Si x<x minCuarto bit a 1: el punto está a la izquierda de la frontera izquierda. Si x<x min Al contrario si están a 0Al contrario si están a 0

10  2002 J.C.Dürsteler - UPF- IUA Cohen Sutherland Casos triviales Nótese queNótese que –El bit 1 es el bit del signo de y max - y –El bit 2 es el bit del signo de y - y min –El bit 3 es el bit del signo de x max - x –El bit 2 es el bit del signo de x - x min Si los códigos de bits de ambos puntos son 0000 –La recta esta entera dentro del área de recorte. Si ambos puntos tienen el bit a 1 de un mismo semiplano son rechazables –Operando con el AND lógico sus códigos Si da 1 Podemos rechazar la recta. Si da 0 la recta está dentro o corta el área

11  2002 J.C.Dürsteler - UPF- IUA Cohen Sutherland Intersección Buscamos uno de los puntos que cae fuera de la zona de recorte.Buscamos uno de los puntos que cae fuera de la zona de recorte. Miramos el código binario de este punto para descubrir cuál o cuáles ejes intersecta.Miramos el código binario de este punto para descubrir cuál o cuáles ejes intersecta. Buscamos la intersección con cada uno de los ejes que corta, simplemente sustituyendo en la ecuación de la rectaBuscamos la intersección con cada uno de los ejes que corta, simplemente sustituyendo en la ecuación de la recta el valor xmin, xmax, ymin ó ymax que corresponda al eje que cruzamos, y calculamos su código binario.

12  2002 J.C.Dürsteler - UPF- IUA Cohen Sutherland Intersección Si el código binario no es 0000 el punto correspondía a otra intersección. Procedemos de igual forma con la siguiente intersección.Si el código binario no es 0000 el punto correspondía a otra intersección. Procedemos de igual forma con la siguiente intersección. En caso contrario ya hemos encontrado la intersección correcta.En caso contrario ya hemos encontrado la intersección correcta. Si el otro punto del segmento queda fuera le aplicamos el mismo algoritmo hasta que ambos puntos tengan código 0000 (o descartemos todos los segmentos de la recta).Si el otro punto del segmento queda fuera le aplicamos el mismo algoritmo hasta que ambos puntos tengan código 0000 (o descartemos todos los segmentos de la recta).

13  2002 J.C.Dürsteler - UPF- IUA Polígonos Dificultad : multiplicidad de casos posibles.Dificultad : multiplicidad de casos posibles. –Cada lado del polígono se ha de comprobar contra cada lado del área de recortado. Reducirlo a múltiples casos de recortado no conserva la información de qué líneas pertenecen a que polígono.Reducirlo a múltiples casos de recortado no conserva la información de qué líneas pertenecen a que polígono.

14  2002 J.C.Dürsteler - UPF- IUA Algoritmo de Sutherland Hodgman Resuelve el problema general de recortar un polígono cualquiera contra cualquier otro polígono convexoResuelve el problema general de recortar un polígono cualquiera contra cualquier otro polígono convexo Estrategia reducir el problema general a una sucesión de problemas elementalesEstrategia reducir el problema general a una sucesión de problemas elementales –recortado del polígono respecto a una sola línea infinita Entrada: serie de vértices del polígono v1, v2,..., vn y recta del polígono de recorte. Salida: serie de vértices transformados del polígono. La lista se realimenta en el propio algoritmo contra la siguiente línea

15  2002 J.C.Dürsteler - UPF- IUA Algoritmo de Sutherland Hodgman 1) Antes de recortar 2) recortado contra la línea 1 … 5) Recortado contra la línea 4

16  2002 J.C.Dürsteler - UPF- IUA Algoritmo de Sutherland Hodgman En el cálculo de las intersecciones de cada lado del polígono con la arista de recorte se añaden 0, 1 ó 2 vértices a la lista. Vamos del punto i(nicio) al f(inal). Como ambos están fuera no añadimos ningún punto a la lista de vértices. Cruzamos la frontera. añadimos el punto de intersección p1 y el f. (2 puntos) Tanto i como f están dentro, pero i lo hemos añadido en el caso anterior. Añadimos sólo f. (1 punto) De nuevo cortamos. El punto i lo añadimos antes. Ahora añadimos p2. (1 punto)

17  2002 J.C.Dürsteler - UPF- IUA Algoritmo Función dentro(x,y, arista)Función dentro(x,y, arista) –devuelve 1 si el vértice está dentro del área de recortado y 0 si no –“dentro” significa a la izquierda de la frontera yendo del primer al segundo vértice Corresponde a una numeración de vértices en sentido antihorarioCorresponde a una numeración de vértices en sentido antihorario –Si es un rectángulo basta mirar el signo de la distancia en vertical u horizontal hasta la frontera –Si no, se puede consultar el signo del producto vectorial de la normal a la frontera con la arista del polígono

18  2002 J.C.Dürsteler - UPF- IUA Algoritmo Subrutina intersecta()Subrutina intersecta() –Calcula la intersección de la arista que va del vértice i al vértice f con la frontera –La frontera está definida por dos vértices. Subrutina salida()Subrutina salida() –Añade los vértices nuevos al vector que contiene el polígono –Actualiza el numero de entradas del mismo.

19  2002 J.C.Dürsteler - UPF- IUA Algoritmo Atención éste no es un algoritmo operativo, consideradlo seudocódigoAtención éste no es un algoritmo operativo, consideradlo seudocódigo SutherlandHodgman(VerticesIn, longIn, VerticesOut){SutherlandHodgman(VerticesIn, longIn, VerticesOut){ int longOut=0; int j; vertice, i, ini, fin;/* Estructura i.x e i.y */ ini=VerticesIn(longIn);/*Empezamos por el final */ for j=0; j<longIn;j++){ fin=VerticesIn(j); fin=VerticesIn(j); if (dentro(fin, frontera)){/* Casos 2 y 3 */ if (dentro(fin, frontera)){/* Casos 2 y 3 */ if (dentro(ini,frontera)) salida(fin,longOut,VerticesOut); /* 3 */ if (dentro(ini,frontera)) salida(fin,longOut,VerticesOut); /* 3 */ else{/* 2 */ else{/* 2 */ Intersecta (ini, fin, frontera, i); Intersecta (ini, fin, frontera, i); salida(i,longOut,VerticesOut); salida(i,longOut,VerticesOut);salida(fin,longOut,VerticesOut) }

20  2002 J.C.Dürsteler - UPF- IUA Algoritmo Atención este no es un algoritmo operativo, considerarlo seudocódigoAtención este no es un algoritmo operativo, considerarlo seudocódigo else {/* 4 y 1 */ if (dentro(ini,frontera)) {/* 4 */ Intersecta (ini, fin, frontera, i); Intersecta (ini, fin, frontera, i); salida(ini,longOut,VerticesOut); salida(ini,longOut,VerticesOut); }/* 1 nada */ ini=fin } /* fin del for */ }

21  2002 J.C.Dürsteler - UPF- IUA Cohen Sutherland El algoritmo de Cohen Sutherland es válido para recortar polígonos cóncavos o convexos contra cualquier área de recortado poligonal convexa.El algoritmo de Cohen Sutherland es válido para recortar polígonos cóncavos o convexos contra cualquier área de recortado poligonal convexa. Se puede extender a 3D y permite recortar contra volúmenes poliédricos convexos cuyas caras sean planas.Se puede extender a 3D y permite recortar contra volúmenes poliédricos convexos cuyas caras sean planas.


Descargar ppt "Infografía I RecortadoRecortado.  2002 J.C.Dürsteler - UPF- IUA Introducción ObjetivoObjetivo –Asegurar que solo se representan los puntos válidos."

Presentaciones similares


Anuncios Google