E N D
1. Grficas Interactivas Isaac Rudomn (Instructor)
rudomin@itesm.mx
Erik Milln (asistente)
emillan@itesm.mx
2. Rasterizacin
Aliasing
Recorte
3. Rasterizacin Lneas
Tringulos
Polgonos
4. Rasterizacin: Que es? Como ir de los nmeros reales de las coordenadas de los vrtices de las primitivas a las coordenadas enteras de los pixeles en pantalla
Primitivas geomtricas
Puntos: redondear locacin del vrtice en coordenadas de pantalla
Lneas: OK para puntos extremos, pero que hacemos en medio?
Polgonos: Como lleno rea acotada por aristas?
5. Rasterizando lneas: metas Dibuja pixeles tan cerca como sea posible de la lnea ideal
Usand el mnimu nmero de pixeles sin dejar huecos
Hacerlo eficientemente
Extras
Diferentes estilos de lneas
Anchura
Punteado
Estilos de uniones para lneas conectadas
Minimizar aliasing (escalerillas)
6. Dibujo de lneas mediante DDA DDA significa Digital Differential Analyzer, que es el nombre de unos plotters que existan antiguamente
Forma pendiente-interseccin de la lnea:
y = mx + b
m = dy/dx
b es donde la lnea intersecta al eje Y
La idea bsica del DDA: Si incrementamos la coordenada x por 1 pixel en cada paso, la pendiente de la lnea nos dice cuanto incrementar y por paso
Es decir m = dy/dx, por lo que para
dx = 1, dy = m
Esto solo funciona si m <1 sino hay huecos
Solucin: intercambia los ejes y avanza en direccin Y pues entonces dy = 1, obtenemos dx = 1/m
7. Dibujo de lneas mediante DDA DDA significa Digital Differential Analyzer, que es el nombre de unos plotters que existan antiguamente
Forma pendiente-interseccin de la lnea:
y = mx + b
m = dy/dx
b es donde la lnea intersecta al eje Y
La idea bsica del DDA: Si incrementamos la coordenada x por 1 pixel en cada paso, la pendiente de la lnea nos dice cuanto incrementar y por paso
Es decir m = dy/dx, por lo que para
dx = 1, dy = m
Esto solo funciona si m <1 sino hay huecos
Solucin: intercambia los ejes y avanza en direccin Y pues entonces dy = 1, obtenemos dx = 1/m
8. DDA: Algoritmo Dados puntos extremos (x0, y0), (x1, y1)
Coordenadas enteras: Redondea si los endpoints fueron originalmente de valor real
Supon (x0, y0) a la izquierda de (x1, y1): Intercambia en caso contrario
Entonces calculamos pendientes no negativas:
m = dy/dx = (y1 y0) / (x1 x0)
Itera
If m <= 1: Itera entero x de x0 a x1, incrementando por 1 cada paso
Inicializa real y = y0
Agregale m a y en cada paso y dibuja punto (x, round(y))
Si m > 1: Itera entero y desde y0 a y1, incrementando por 1
Inicializa real x = x0
Agregale 1/m a x en cada paso y dibuja punto (round(x), y)
9. DDA: Notas Pendientes negativas por simetra
Es decir, rota 90 grados a favor del reloj para iterar:
(x, y) ! (y, x)
Trata como caso normal
Rota de vuelta para dibujar
DDA es lento
Clculo de punto flotante y redondeo son relativamente caros
10. Algoritmo de punto medio Midpoint (Bresenham) para dibujar lneas Idea bsica: Evita redondear, hacer todo con aritmtica de enteros para velocidad
Supon pendiente entre 0 y 1
Otra vez usar simetra para lneas con otras pendientes
11. Dibujando lneas con punto medio: la ecuacin La forma de pendiente-interseccin de la ecuacin de la lnea es y = (dy/dx)x + b
Multiplicando por dx, queda:
F(x, y) = dy x - dx y + dx b = 0
F es:
Cero para puntos en la lnea
Positiva para puntos bajo la lnea (a la derecha si pendiente > 1)
Negativa para puntos sobre la lnea (izquierda si pendiente > 1)
Ejemplos: (0, 1), (1, 0), etc.
12. Dibujando lneas con punto medio: la decisin Dadas nuestras suposiciones sobre la pendiente, despus de dibujar (x, y) el siguiente pixel puede ser
o bin el superior U = (x + 1, y + 1)
o bin el inferior L = (x + 1, y)
13. Dibujando lneas con punto medio: la decisin Despues de dibujar (x, y), para escoger el siguiente pixel a dibujar consideramos el punto medio M = (x + 1, y + 0.5)
Si est en la lnea, U y L son equidistantes de la lnea
Si est bajo la lnea, U es mas cercano a la lnea que L
Si est sobre la lnea, L es mas cercano que U.
14. Dibujando lneas con punto medio: la decisin entonces F es una funcin de decisin acerca de que pixel dibujar:
Si F (M ) = F (x + 1, y + 0.5 ) > 0 (M bajo la lnea), escogemos U
Si F (M ) = F (x + 1, y + 0.5 ) <= 0 (M sobre o en la l[inea), escogemos L
15. Dibujando lneas con punto medio: implementacin Por eficiencia: F no necesariamente debe ser evaluada por completo en cada paso
Si evaluamos por completo y obtenemos F(x + 1, y + 0.5)
Si escogemos L, el prximo punto medio, M0 est en F(x + 2, y + 0.5)
Si escogemos U, el prximo punto medio, M00 est en F(x + 2, y + 1.5)
16. Dibujando lneas con punto medio: implementacin Por eficiencia: F no necesariamente debe ser evaluada por completo en cada paso
Si evaluamos por completo y obtenemos F(x + 1, y + 0.5)
Si escogemos L, el prximo punto medio, M0 est en F(x + 2, y + 0.5)
Si escogemos U, el prximo punto medio, M00 est en F(x + 2, y + 1.5)
17. Dibujando lneas con punto medio: implementacin Por eficiencia: F no necesariamente debe ser evaluada por completo en cada paso
Si evaluamos por completo y obtenemos F(x + 1, y + 0.5)
Si escogemos L, el prximo punto medio, M0 est en F(x + 2, y + 0.5)
Si escogemos U, el prximo punto medio, M00 est en F(x + 2, y + 1.5)
18. Dibujando lneas con punto medio: implementacin Expandiendo esto utilizando using F(x, y) = dy x - dx y + dx b :
FM = F(x + 1, y + 0.5) = dy(x + 1) - dx(y + 0.5) + dx b
FM0 = F(x + 2, y + 0.5) = dy(x + 2) - dx(y + 0.5) + dx b
FM00 = F(x + 2, y + 1.5) = dy(x + 2) - dx(y + 1.5) + dx b
Nota que FM0 FM = dy y FM00 FM = dy - dx
Asi que dependiendo si escogemos L o U, solo debemos agregar dy o dy - dx, respectivemente, al viejo valor de F para obtener el nuevo valor
19. Dibujando lneas con punto medio: algoritmo Para inicializar, calculamos F en el primer punto medio junto al punto extremo izquierdo:
F(x0 + 1, y0 + 0.5) = dy(x0 + 1) - dx(y0 + 0.5) + dx b
= dy x0 - dx y0 + dx b + dy - 0.5 dx
= F(x0, y0) + dy - 0.5 dx
pero F(x0, y0) = 0 pues est sobre la lnea, asi que la primera F =dy-0.5 dx
Solo importa el signo para la decisi, asi que para que sea un valor entero, multiplicamos por 2 y obtenemos 2F = 2 dy - dx
Para actualizar, se requiere conocer el valor actual para x y y y un valor parar F:
Si escojo L: F += 2dy y x++
Si escojo U: F += 2(dy - dx) y x++ , y++
20. Velocidad de dibujo de lneas 100,000 lneas al azar en ventana 500 x 500
DDA: 6.8 segundos
Midpoint: 2.5 segundos
OpenGL usando GL_LINES (en software): 1.6 segundos
21. Rasterizando Polgonos En grficas interactivas, los polgonos dominan
Dos razonesTwo main reasons:
Mnimo denominador comn
Pueden representar o aproximar cualquier superficie
Simplicidad matemtica que permite algoritmos sencillos y regulares, que pueden ser implementados en hardware
22. Rasterizando Tringulos El tringulo es polgono mnimo
Todos los polgonos pueden descomponerse en tringulos
Convexos, concavos, complejos
Los tringulos son siempre:
Planos
Convexos
Que es ser convexo?
23. Formas Convexas Una forma bidimensional es convexa si y solo si cualquier segmento conectando dos puntos en la frontera est contenido por completo en la forma.
24. Formas Convexas Porque queremos formas convexas para rasterizar?
Una respuesta: porque cualquier lnea de scan est garantizada a contener a lo mas un segmento o span de un tringulo
25. Decomponer Polis a Tris Cualquier polgono convexo se descompone trivialmente en tringulos
Los polgonos concavos o complejos tambin, aunque no es trivial
26. Rasterizar tringulos Caso especial de polgonos
Exactamente dos aristas activas en cualquier momento
Un mtodo:
Llena tabla de la lnea de scan entre vrtice superior e inferior usando los algoritmos DDA o punto medio para seguir las aristas
Hacer travesa de la tabla lnea de scan por lnea de scan, llenando de izquierda a derecha
27. Rasterizar tringulos Hardware para grficas interactivas usa comnmente las tcnicas de edge walking o edge equation
Hay otras tcnicas:
Subdivisin recursiva de primitivas a micropolgonos (REYES, Renderman)
Subdivisin recursiva de pantalla (Warnock)
28. Subdivisin recursiva de tringulos
29. Subdivisin recursiva de pantalla
30. Seguimiento de aristas Basicamente:
Dibuja aristas verticalmente
LLena spans horizontales para cada lnea de scan
Interpola colores a lo largo de las aristas
En cada lnea de scan, interpola colores de arista a travs del span
Notas:
Muy rpido
Tiene algunos problemas con casos especiales
Puede haber huecos entre aristas adyacentes
31. Ecuaciones de aristas (edge equations) Un edge equation es simplemente la ecuacin de la lnea que contiene esa arista
Edge equations definen dos medios espacios:
32. Edge Equations Un tringulo puede definirse como la interseccin de tres medios espacios positivos:
33. Edge Equations Basta encenderlos pixeles para los cuales todas las edge equations evalan a > 0:
34. Uso de Edge Equations Como hacer esto en hardware?
Como lo haras en software?
35. Uso de Edge Equations Que pixeles?: calcula caja acotante min,max (fcil)
Edge equations: calcla a partir de vrtices, con rea positiva
Problemas numricos (aqu lo dejamos)
36. Edge Equations: Cdigo Basic amente:
Setup: calcular edge equations, bounding box
(loop externo) Para cada lnea de scan en BB
(loop interno) checa cada pixel en lnea de scan, evaluando las ecuaciones y dibujando el pixel si las tres son positivas
37. Optimiza esto! findBoundingBox(&xmin, &xmax, &ymin, &ymax);
setupEdges (&a0,&b0,&c0,&a1,&b1,&c1,&a2,&b2,&c2);
/* Optimize this: */
for (int y = yMin; y <= yMax; y++) {
for (int x = xMin; x <= xMax; x++) {
float e0 = a0*x + b0*y + c0;
float e1 = a1*x + b1*y + c1;
float e2 = a2*x + b2*y + c2;
if (e0 > 0 && e1 > 0 && e2 > 0) setPixel(x,y);
}
}
38. Rasterizacin de polgonos Dado un conjunto de vrtices, rellenar el interior
Bsicamente:
Itera sobre lneas de scan entre vrtice superior e inferior
Para cada lnea de scan, encuentra todas las intersecciones con aristas de polgonos
Ordena intersecciones por valor en x y llena de pixeles entre pares de intersecciones non y par
39. Rasterizacin de polgonos: Notas Refinnamientos
Mantener paridad correcta descartando intersecciones con puntos extremos superiores de cualquier arista
Evita dibujar doblemente las fronteras de polgonos adyacentes (es malo si hay blending o XOR) siguiendo la regla de pertenencia izquierda-abajo:
Dibuja pixel en arista izquierda pero no en derecha
Descarta intersecciones con aristas horizontales
40. Rasterizacin de polgonos Bsicamente: usar prueba de paridad
for each scanline
edgeCnt = 0;
for each pixel on scanline (l to r)
if (oldpixel->newpixel crosses edge)
edgeCnt ++;
// draw the pixel if edgeCnt odd
if (edgeCnt % 2)
setPixel(pixel);
41. Tabla de aristas activas Idea:
Aristas que intersectan una lnea de scan, probablemente intersectan la prxima
Entre lneas de scan consecutivas, el rden de las intersecciones con aristas probablemente no cambie mucho
42. Tabla de aristas activas Algoritmo:
Sort de aristas por coordenada y mnima
Comenzando abajo, agrega aristas con Ymin= 0 a la tabla
Para cada lnea de scan:
Sort de aristas en tabla por interseccin x
Ve de izquierda a derecha, dibujando pixeles segn regla de paridad
Incrementa lnea de scan
Quita aristas con Ymax < Y
Agrega aristas con Ymin > Y
Recalcula intersecciones de aristas y vuelve a ordenar (como hacerlo eficientemente?)
Para cuando Y > Ymax para las ltimas aristas
43. Aliasing y anti Aliasing
44. Aliasing y Antialiasing Aliasing: trmino de procesamiento de seales con significado preciso
Aliasing: trmino en grficas computacionales para cualquier artefacto visual no deseado
Antialiasing: trmino en grficas computacioneales para el combate a los artefactos no deseados
Veremos estos en rden
45. Procesamiento de seales Dispositivo Raster: muestras regulares de una funcin continua
Piensa en una funcin 1-D:
46. Procesamiento de seales Muestra de funcin 1-D:
47. Procesamiento de seales Muestra de funcin 1-D:
48. Procesamiento de seales Muestra de funcin 1-D:
Que notas?
49. Procesamiento de seales Muestra de funcin 1-D:
Que notas?
No es suave
50. Procesamiento de seales Muestra de funcin 1-D:
Que notas?
No es suave
Pierde informacin!
51. Procesamiento de seales Muestra de funcin 1-D:
Que notas?
No es suave
Pierde informacin!
Que podemos hacer?
Reconstruccin de mayor rden
Usar mas muestras
Cuantas muestras mas?
52. El teorema de muestreo Obviamente, entre mas muestras, mejor aproximamos la funcin inicial
El teorema:
Una funcin continua limitada en banda, puede ser completamente representada por un conjunto de muestras regulares, si estas ocurren a ms del doble de la frecuencia, del componente de mxima frecuencia de la funcin.
53. El teorema de muestreo En otras palabras, para representar adecuadamente una funcin cuya mxima frecuencia es F, debemos muestrear a la frecuencia N = 2F.
N se llama lmite de Nyquist.
54. El teorema de muestreo Ejemplo: sinusoidales
55. El teorema de muestreo Ejemplo: sinusoidales
56. Teora de Fourier Los ejemplos usan sinusoidales, porque?
La teora de Fourier nos permite descomponer cualquier seal en una suma de (posiblemente un nmero infinito de) ondas senoidales
57. Prefiltrado Elimina las altas frecuencias antes de muestrear
Convertir I(x) a F(u)
Applica filtro pasa bajos (e.g., multiplica F(u) por funcin caja)
Entonces muestrea. Resultado: no hay aliasing!
Entonces que problema hay?
Problema: los algoritmos de render generan directamente una funcin como muestras
e.g., Z-buffer, ray tracing
58. Supersampling La forma mas sencilla para reducir artefactos de aliasing es el supersampling
Incrementa la resolucin de las muestras
Promedia
A veces se llama postfiltrado
Crea imagen virtual a mas alta resolucin que la imagen final
Aplica filtro pasa bajos
Remuestrea imagen filtrada
59. Supersampling: Limitaciones Almacenamiento crece cuadrticamente
No elimina el aliasing, solo sube el lmite de Nyquist
Peor caso tablero de ajedrez recediendo al infinito
De todas maneras se utiliza. Como hacerlo bien?
60. Supersampling El proceso:
Crea imagen virtual a mas alta resolucin que la imagen final (fcil)
Aplica filtro pasa bajos
Convierte a dominio de frecuencia
Multiplica por funcin caja
Caro!!! Pero recuerda que multiplicacin en dominio de frecuencia equivale a convolucin en el espacio, por lo que:
basta hacer la convolucin de la imagen con la transformada de Fourier de la funcin caja
Remuestrea imagen filtrada
En la prctica si combinamos los pasos 2 y 3 solo debemos crear la imagen filtrada en los nuevos puntos muestra, es decir solo hay que hacer la convolucin con el filtro en los nuevos puntos, lo cual involucra solo multiplicar y sumar valores
61. Supersampling:Convolucin digital
62. Supersampling Para multiplicar por una funcin caja en la frecuencia, en el espacio debemos usar la funcin sinc que es (sin(x) / x)
Es dificil pues Sinc tiene soporte infinito y lbulos negativos
Comunmente se usa
Sinc truncado
Caja (muy malo)
Tringulo
Gaussiano (bueno, entre mas ancho el filtro, mejor; usualmente 3x3, 5x5 o a lo mas 7x7)
63. Antialiasing en el dominio continuo A pesar de los problemas del prefiltrado, a veces se trata de aproximar el efecto de la convolucin en el dominio continuo
64. Antialiasing en el dominio continuo
65. Antialiasing en el dominio continuo Lo bueno
Puedo evaluar de manera exacta la cobertura de poligono del kernel del filtro
Que implica?
Recorte
Determinar superficies visibles
Lo malo
Determinar cobertura es muy caro
La variacin de intensidad puede no ser pareja
66. Algoritmo de Catmull Encuentra area de fragmentos
Multiplica por color de fragmentos
Suma para determinar color final del pixel
67. Algoritmo de Catmull Primer intento para filtrar en dominio continuo
Muy caro
Recorta poligonos a fragmentos
Ordena fragmentos de poligono por profundidad
Es un filtro de caja
68. El A-Buffer Idea: approximar filtrado continuo por muestreo a nivel subpixel
Sumar areas se vuelve sencillo
69. El A-Buffer Ventajas:
Incorporar a scanline renderer reduces costos de almacenamiento dramticamente
Procesamiento por pixel depende solo del nmero de fragmentos visibles
Puede implementarse eficientemente con operaciones de lgicas de bits sobre mscaras a nivel subpixel
Desventajas
Bsicamente sigue siendo supersampling
No es amigable para el hardware
70. Muestreo estadstico El muestreo irregular da ruido en vez de aliasing, lo que molesta menos al sistema visual.
Integrar el muestreo estadstico a
Ray tracing (sencillo)
Z-buffer (posible, ver REYES) o simular con jitter de imagen
A-buffer (no)
Como es bueno distribuir las muestras?
Poisson (agregar al azar hasta llenar; es uniforme)
Disco de Poisson (distancia minima; muy pareja)
Jittered (perturba malla regular al azar; granular)
71. Recorte
72. Recorte Hemos estado suponiendo que todas las primitivas (lneas, tringulos, polgonos), estn completamente dentro del viewport
En general, esto no es cierto:
73. Recorte Se pueden calcular analticamente las partes de las primitivas dentro del viewport
74. Porque recortar? Es mala idea rasterizar fuera de los lmites del framebuffer
No queremos desperdiciar tiempo rasterizando pixeles fuera de la ventana
75. Recorte Mtodo ingenuo:
for each line segment
for each edge of viewport
find intersection points
pick nearest point
if anything is left, draw it
Que es mas cercano?
Como optimizar?
76. Aceptacin y Rechazo Trivial Si los dos extremos estan dentro aceptacin trivial
Si los dos extremos estn del mismo lado de la misma lnea, rechazo trivial
77. Recorte de Lneas Cohen-Sutherland Divide plano de vista en regiones definidas por aristas
Asigna a cada regin un cdigo de 4 bits:
78. Recorte de Lneas Cohen-Sutherland Define bits con pruebas sencillas
x > xmax y < ymin etc.
Asigna un cdigo a cada vrtice de la lnea
Si ambos cdigos = 0, aceptacin trivial
haz AND bit por bit de cdigos de los vrtices
Si resultado ? 0, rechazo trivial
79. Recorte de Lneas Cohen-Sutherland Si lnea no puede ser aceptada o rechazada trivialmente, subdivide para poder descartar uno o ambos segmentos
Escoge arista que la lnea cruza (como?)
Intersecta lnea con arista (como?)
Descarta porcin en lado incorrecto de arista y asignale cdigo al nuevo vrtice
Aplica pruebas de aceptacin y rechazo trivial; repite si es necesario
80. Recorte de Lneas Cohen-Sutherland Pruebas de cdigo e intersecciones son rpidas
Algunas lneas requieren varias iteraciones
Otros algoritmos son mas eficientes (checar):
Cyrus-Beck usa lneas paramtrica
Liang-Barsky optimiza esto para volumenes verticales
81. Recorte de Polgonos Recortar polgonos es mas complejo que recortar cada lnea que lo forma
Entrada: polgono
Salida: polgono, o nada
Hay aceptacin o rechazo trivial del polgono en vez de los segmentos que lo forman?
82. Que le pasa al tringulo al recortar? Cuantos lados tiene al final? Por que es dificil el recorte?
83. Caso dificil. Resultan varios polgonos: Por que es dificil el recorte??
84. Recorte Sutherland-Hodgman Basicamente:
Considera cada arista del viewport individualmente
Recorta el polgono contra la ecuacin de esa arista
Al terminar con todas, hemos terminado
85. Sutherland-Hodgman Clipping
86. Sutherland-Hodgman Clipping
87. Sutherland-Hodgman Clipping
88. Sutherland-Hodgman Clipping
89. Sutherland-Hodgman Clipping
90. Sutherland-Hodgman Clipping
91. Sutherland-Hodgman Clipping
92. Sutherland-Hodgman Clipping
93. Sutherland-Hodgman Clipping
94. Sutherland-Hodgman Clipping Rutina bsica:
Ve alrededor del polgonoun vrtice a la vez
El vrtice actual tiene una posicin p
El vrtice previo tuvo posicin s, y se agrego a la salida si era apropiado
95. Sutherland-Hodgman Clipping Cuatro casos para arista de s a p:
96. Prueba punto plano Una prueba generalpara determinar si un punto p est dentro de un plano P, definido por q y n:
(p - q) n < 0: p dentro P
(p - q) n = 0: p sobre P
(p - q) n > 0: p fuera de P
97. Interseccin Lnea-Plano Usar definicin paramtrica de arista:
E(t) = s + t(p - s)
Si t = 0 entonces E(t) = s
Si t = 1 entonces E(t) = p
Si no, E(t) est entre s y p
98. Interseccin Lnea-Plano La arista intersecta al plano P donde E(t) est sobre P
q es un punto en P
n es normal a P
(E(t) - q) n = 0
t = [(q - s) n] / [(p - s) n]
El punto de interseccin i = E(t)
para este valor de t
99. Interseccin Lnea-Plano Note que la longitud de n no afecta el resultado:
t = [(q - s) n] / [(p - s) n]
Otra vez, oportunidad para optimizar
100. Recorte 3-D Antes de dibujar debemos recortar
Podemos transformar a coordenadas de pantalla primero y recortar en 2-D?
Correccin: no dibujar cosas atras del ojo
101. Recorte con perspectiva Problema: despues de multiplicar por matriz de perspectiva y hacer la divisin homogenea, un punto en (-8, -2, -10) se ve igual que uno en (8, 2, 10).
Solucin A: recorta antes de multiplicar el punto por la matriz de proyeccin
I.e., recorta en coordenadas de cmara
Solucin B: recorta despues de aplicar la matriz pero antes de dividir
I.e., recorta en coordenadas homogeneas de pantalla
102. Recorte con perspectiva Solucin A:
103. Recap: Proyeccin de perspectiva El volumen de vista tpico es un frustum o pirmide truncada
104. Proyeccin de Perspectiva El fustrum consiste de 6 planos
Sutherland-Hodgeman algorithm (recortar poligonos a una regin plano por plano) generaliza a 3-D
Recorta poligonos contra los 6 planos del frustum
Cual es el problema?
Recortar un segmento contra un plano arbitrario es caro pues requiere productos punto
105. Proyeccin de Perspectiva De hecho, por simplicidad se prefiere utilizar un fustrum cannico:
106. Proyeccin de Perspectiva De hecho, por simplicidad se prefiere utilizar un frustum cannico:
107. Recorte con perspectiva Hay que refinar nuestro modelo de pipeline:
Note que esto nos obliga a separar las transformaciones de proyeccin de las de modelado y vista
108. Recorte en coordenadas homogeneas Otra opcin es recortar directamente en coordenadas homogeneas.
Esto permite recortar despus de la proyeccin de perspectiva:
Que ventaja tiene?
109. Recorte en coordenadas homogeneas Otras ventajas:
Podemos transformar la vista cannica para perspectiva en la vista cannica de proyecciones paralelas
Recortar en esta ltima
Permite implementar en hardware
Habr primitivas con w ? 1
Por ejemplo, polgonos que resultan de subdividir splines
Si no se recorta en coordenadas homogeneas, hay que dividir dos veces en esas primitivas
110. Recorte en coordenadas homogeneas Pero como se recorta en coordenadas homogeneas?
Brevemente, as:
Recuerda que hemos aplicado una transformacin a device coordinates
x, y ? [-1, 1]
z ? [0, 1]
Al recortar digamos al lado derecho de la pantalla (x = 1), recorta mejor a (x = w)