Loading

Alison's New App is now available on iOS and Android! Download Now

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Hola y bienvenidos a la conferencia número 25 en el curso Gráficos Informáticos. Actualmente estamos discutiendo el gasoducto 3D que consta de cinco etapas. Vamos a recapitular rápidamente las etapas.
Como puede ver en esta figura, la primera etapa es la representación del objeto, entonces tenemos la transformación del modelado, luego la iluminación o el color de los objetos, luego la visualización de la tubería, y la quinta etapa es la conversión de la exploración. Entre ellos, ya hemos discutido las primeras cuatro etapas, a saber, la representación de objetos, la transformación del modelado, la iluminación, y el conducto de visión.
Ahora vamos a discutir la quinta etapa que está renderizado o también conocida como conversión de escaneo. Entonces, ¿de qué se trata esta etapa?
Echemos un vistazo al problema tan básico que tratamos de abordar en esta quinta etapa.
Hasta ahora, todo lo que hemos aprendido que nos da alguna idea de una cosa en particular. A través de estas cuatro etapas que hemos discutido hasta ahora, podemos transformar una escena 3D a una descripción de puerto de vista 2D, que está en el sistema de coordenadas de dispositivos. Basta con echar un vistazo a cómo se hace como hemos aprendido en nuestras discusiones anteriores.
Así que primero, tenemos una escena 3D decir, por ejemplo, este cubo. Ahora, este cubo se define en su propio sistema de coordenadas o en la coordenada local, lo que hacemos en la primera etapa que es la representación de objetos. Entonces lo que hacemos, lo transferimos a un sistema de coordenadas mundial a través de la transformación del modelado.
Así que el objeto ahora está en coordinación mundial. Así que este es el escenario uno. Y en segunda etapa a través de la transformación del modelado, lo transferimos a la descripción de coordenadas del mundo que es la etapa dos.
A continuación, asignamos colores utilizando los modelos de iluminación y sombreado. Así que coloreamos el objeto en stage-3 y después de eso, realizamos la visualización de la transformación, que es la etapa cuatro en la que lo transferimos a una descripción del puerto de vista. Así que implica primero, transferir las coordenadas del mundo a un sistema de coordenadas de vista, luego desde la coordenada de vista, realizamos proyectos y la transformación y la transferencia para ver el plano, luego desde el plano de vista, realizamos una ventana a la cartografía del viewport para transferirla a este viewport, que está en el sistema de coordenadas del dispositivo.
Así que estas tres transformaciones tienen lugar en la etapa cuatro junto con, por supuesto, el recorte y la eliminación de la superficie oculta. Y después de eso lo que obtenemos es una representación 2D del objeto o escena en un viewport, que está en el sistema de coordenadas del dispositivo. Así se transforman las cosas de la definición de objeto a la descripción del puerto de vista.
Sin embargo, el sistema de coordenadas de dispositivos del que estamos hablando es un sistema continuo que significa que los valores de coordenadas de cualquier punto pueden ser cualquier número real. Así que podemos tener coordenadas como 2, 3, que son números enteros, mientras que, también podemos tener una coordenada como 2.5, 3.1, que son números reales. Así que todo tipo de coordenadas están permitidas en el sistema de coordenadas del dispositivo.
En contraste, cuando en realidad estamos tratando de mostrarlo en una pantalla, tenemos una rejilla de píxeles que significa que es un sistema de coordenadas discreto. Así que todas las coordenadas posibles no están permitidas, en su lugar, debemos tener algo donde sólo se definen coordenadas enteras. Así que todo lo que queramos mostrar en la cuadrícula de píxeles debe mostrarse en términos de coordenadas enteras, no podemos tener valores de coordenadas reales.
Entonces, ¿qué necesitamos? Es necesario que se correlacione desde la descripción del puerto de vista, que es un espacio de coordenadas continuo a una cuadrícula de píxeles, que es un espacio de coordenadas discreto. Así que esta es la correlación final que tenemos que hacer antes de que una escena se represente en una pantalla de visualización física. Ahora, estos algoritmos de mapeo o las técnicas que utilizamos para la cartografía se conocen colectivamente como renderización o más popularmente, se llaman conversión de escaneo o en algún momento rasterización, ya que en su mayoría estamos tratando con dispositivos de barrido de barrido. Por lo tanto, se utilizan estos tres términos, la representación, la conversión de exploración o la rasterización.
Entonces, ¿cuál puede ser el enfoque directo para hacer esto? Usted puede pensar que es bastante simple. Lo que podemos hacer es simplemente redondear las coordenadas reales a las coordenadas enteras más cercanas. Por ejemplo, si tenemos un valor de coordenadas como (2.3, 2.6), podemos redondearlo hasta (2, 3) que es el número entero más cercano a los valores de coordenadas.
Sin embargo, esto puede ser bueno para convertir puntos o puntos de mapeo de un espacio de coordenadas continuo a un espacio de coordenadas discreto, sin embargo, el mismo esquema puede no ser bueno para líneas, círculos u otras formas primitivas que son necesarias para representar una escena. Ahora, tratemos de entender cómo entonces podemos cuidar de la conversión de las líneas, círculos u otras formas primitivas.
Comencemos con la conversión de escaneo de líneas, cómo podemos mapear básicamente una línea definida en un espacio de coordenadas continua a una línea definida en un espacio de coordenadas discreto.
Comenzaremos con un enfoque muy sencillo e intuitivo y luego, trataremos de entender el problema con el enfoque intuitivo, y entonces, introduciremos mejores y mejores enfoques. Ahora, todos sabemos que podemos definir un segmento aligerado en cuanto a sus puntos finales. Así que para escanear convertir, ¿qué necesitamos? Tenemos que mapear primero los puntos finales en la línea a los píxeles apropiados y también los otros puntos que están en la línea a los píxeles apropiados.
Ahora, vamos a través de un enfoque muy simple, cómo podemos mapear los puntos que están en la línea a los píxeles más cercanos en la cuadrícula de píxeles.
Así que podemos seguir un enfoque de cuatro pasos. En el primer paso, correlacionamos los puntos finales con píxeles simplemente redondeando al entero más cercano. De esa manera, obtenemos los píxeles de inicio y final para el segmento de línea. Así que ahora sabemos qué píxeles están definiendo la línea. A continuación, en el segundo paso, tomamos un punto final que tiene los valores x y y más bajos como punto de partida. En el tercer paso, trabajamos el valor y para los valores x sucesivos.
Ahora, ya que estamos tratando con una cuadrícula de píxeles, sabemos que los píxeles están separados por distancias de unidad. Por lo tanto, los valores x sucesivos tendrán una diferencia de valor de 1, por lo que estos valores sucesivos diferirán por 1. En el cuarto paso, estos valores y calculados se correlacionan con el entero más cercano que nos da las coordenadas de pixel de ese punto en particular.
Así que primero convertimos los puntos finales a los pixeles más cercanos, entonces elegimos el punto final que tiene valores x e y más bajos como el punto de partida, y comenzando con ese punto, calculamos el valor y tomando como entrada el valor x, donde los valores x sucesivos difieren por 1 y continuamos esto hasta el otro punto final. Así que calculamos todos los valores y entre los píxeles de inicio y final. Y estos valores y calculados se correlacionan con los valores enteros más cercanos, dándonos las coordenadas de píxeles para esos puntos. Intentemos entender esto en términos de un ejemplo.
Supongamos que este es nuestro segmento de línea, como se muestra en esta figura. Así que este es un punto final, este es otro punto final. Inicialmente, la línea se definió por estos dos puntos finales, A y B. Como se puede ver, ambos son números reales. Así que tenemos que correlacionarlo con el píxel más cercano.
Para A, si hacemos el redondeo apagado, obtendremos este píxel como el píxel más cercano, y para B obtendrá este como el píxel más cercano si realizamos el redondeo apagado. Ahora, podemos ver que las coordenadas de A 'es menor que B'. Así que empezamos con A ', lo elegimos como nuestro píxel inicial. Así que empezamos con este píxel y continuamos encontrando los valores y hasta que alcancemos este otro píxel, otro punto final.
Ahora, nuestro objetivo es calcular los valores y para los valores x sucesivos. Para eso, requerimos la ecuación de línea que implica el cálculo de la pendiente m, que en nuestro caso resulta ser este.
Debido a que conocemos los dos puntos finales podemos calcular la pendiente y también, el valor de -intercept. Estamos asumiendo aquí que la línea se expresa en términos de esta ecuación, y = mx + b, donde m es la pendiente, y b es la interceptación. Dados los dos puntos finales, podemos resolver para m y b y encontrar que m es 3 por 5 y b es 4 por 5.
Entonces, ¿qué hacemos? Para cada x separado por distancia de unidad, a partir del píxel de extremo inferior que es x valor es 2, se computan los valores y utilizando la ecuación de línea hasta llegar al otro punto final. Y la ecuación de la línea se da aquí. Así que en esta ecuación, utilizamos los valores x para obtener los valores y.
Si lo hacemos, ¿qué vamos a encontrar? Así que para x =2, tenemos y= 2; cuando x es 3, así que el siguiente pixel, x coordenada, obtenemos y es 2.6; cuando x es 4, entonces tenemos y para ser 3.2; x= 5, y=3.8; x= 6, y=4.4. Así que obtenemos los cuatro píxeles intermedios y los valores y correspondientes calculados utilizando las ecuaciones de línea.
Así que los cuatro puntos son (3, 2.6), (4, 3.2), (5, 3.8), y (6, 4.4). Estos son los cuatro valores que calculamos utilizando la ecuación de línea. Ahora, correlacionamos estos valores y como se muestra aquí al entero más cercano para obtener las ubicaciones de píxeles. Así que si hacemos el redondeo, obtendremos los cuatro pixels para ser (3, 3) que está aquí; entonces (4, 3), que está aquí; (5, 4) aquí, y (6, 4) aquí. Así que estos son nuestros cuatro píxeles intermedios correspondientes a los puntos de la línea.
Ahora, con este enfoque, como se puede ver, la forma en que hemos calculado los valores y finalmente hemos encontrado los píxeles, hay dos problemas en general. Primer problema es que necesitamos realizar la multiplicación de m y x. Ahora, es probable que m sea un valor real, por lo que es una operación de coma flotante. En segundo lugar, tenemos que redondear los valores de coordenadas que también son operaciones de coma flotante. Juntas, estas operaciones de coma flotante son intensivas en cómputo.
Así que tenemos un enfoque computacionalmente caro para convertir una línea a los píxeles correspondientes. En realidad, necesitamos escanear convertir un número muy grande de líneas dentro de un tiempo muy pequeño. Ahora, si tenemos operaciones de coma flotante en juego, entonces este proceso se volverá lento y percibiremos parpadeos, lo que por supuesto es algo que no queremos. Entonces, ¿qué necesitamos, necesitamos algunas soluciones mejores? Echemos un vistazo a este enfoque un poco mejor.
Pero antes de eso, me gustaría señalar su atención hacia otro tema importante que es la consideración de la pendiente de una línea cuando estamos realizando esta conversión de exploración.
En nuestro ejemplo, lo que hicimos, calculamos los valores de coordenadas y para cada valor de coordenada x. Así que aumentamos x por 1 y los valores y correspondientes, calculamos usando la ecuación de la línea. Puede que se pregunten por qué lo hicimos, podríamos haberlo hecho de manera similar al revés. Podríamos haber aumentado y calculado los valores de x. Intentemos ver qué sucede si lo hacemos si calculamos x valores aumentando los valores y.
Ahora, tenemos estos dos píxeles de punto final y el píxel inferior es el punto de partida indicado por A '.
Esta vez estamos aumentando y por 1. Eso significa que nos estamos moviendo de esta manera. Anteriormente, estábamos avanzando en esta dirección, ahora estamos moviendo de esta manera de una línea de exploración a la siguiente. Y luego, calculamos la x basada en la ecuación. Ahora, necesitamos una ecuación modificada que se da aquí y ya conocemos b y m, la interceptación y la pendiente respectivamente. Así que simplemente reemplazamos el valor y para obtener el valor x.
Ahora, si lo hacemos, veremos que tenemos sólo dos valores y valores sucesivos, este y éste entre y= 2 y y=5. Así que antes, calculamos cuatro valores x, esta vez requerimos calcular sólo dos valores porque sólo tenemos dos aumentos de y entre los puntos finales. Así que estamos obligados a calcular dos valores x. Así que cuando y= 3, entonces la x resulta ser 3.7 usando la ecuación, y cuando y= 4, x es 5.3.
Entonces, ¿qué hemos calculado entre los dos puntos finales? Dos nuevos puntos, (3.7, 3) y (5.3, 4). Si lo redondeamos a los enteros más cercanos, entonces obtenemos los píxeles (4, 3) y (5, 4); vamos a colocarlo aquí. Así (4, 3) es este punto y (5, 4) es este punto. Tenga en cuenta que antes, obtuvimos dos puntos adicionales cuando nos movemos a lo largo de la dirección x, ahora estamos obteniendo sólo dos puntos, estos dos, cuando nos estamos moviendo a lo largo de la dirección y la computación x.
Claramente, el primer conjunto que es estos 4 más los 2 puntos finales, total 6, píxeles nos dará una mejor aproximación a la línea en comparación con el segundo conjunto que consta de 4 píxeles totales, los dos puntos finales, y los dos nuevos píxeles calculados. Así que tienes el primer set, que es mejor que el segundo set porque la aproximación es mejor debido al mayor número de píxeles.
Ahora, ese es el tema aquí. ¿Cómo decidimos qué coordinar para calcular y cuándo? ¿Debería empezar con x y calcular y, o deberíamos aumentar y calcular x? Ahora, esta decisión se toma en base a la pendiente de la línea, dependiendo de la pendiente que tomemos una llamada.
Si la pendiente está dentro de estos rangos, entonces trabajamos o calculamos valores y basados en coordenadas x de los píxeles. Así que aumenta x por 1 y calcula los valores y cuando m está dentro de este rango. Si m no está dentro de este rango, calculamos x aumentando las coordenadas y. Así que esa es nuestra regla. Así que cuando m está dentro de los rangos dados aquí, entonces computamos y basado en x, donde x indica las coordenadas de pixel que significa enteros. De lo contrario, eso significa que cuando m no está dentro de este rango, calculamos x basado en y donde y indica las coordenadas de pixel en enteros. Así que así es como tomamos la decisión.
Ahora, volvamos a un algoritmo de conversión de escaneo de mejor línea en comparación con el enfoque simple que hemos aprendido antes. Por lo que este enfoque se llama DDA o analizador diferencial digital.
DDA significa analizador de diferencial digital, y este es un enfoque incremental que se desarrolla para reducir las operaciones de coma flotante. Eso significa aumentar la velocidad de cálculo, acelerar el proceso de conversión de la exploración.
Tratemos de entender primero la idea. Utilizaremos el mismo ejemplo que hemos visto antes pero esta vez, notaremos algunos puntos más. Así que antes, calculamos 4 puntos entre los dos puntos finales (2, 2) y (7, 5) aumentando x y calculando los valores y. Ahora, estos 4 puntos son (3, 2.6), (4, 3.2), (5, 3.8) y (6, 4.4). Ahora, tendremos una mirada más cercana a estos puntos, lo que nos dicen.
Calculamos que la pendiente es 3/5 o 0.6. Ahora, los valores y sucesivos son, en realidad, la adición de este valor de pendiente al valor actual. El primer valor que obtuvimos es 2.6. El segundo valor que obtuvimos es 3.2, que podemos conseguir añadiendo 0,6 que es el valor pendiente al valor anterior que es 2.6.
El siguiente valor que tenemos es 3.8, que es de nuevo el valor anterior más la pendiente. Finalmente, obtuvimos 4,4, que es de nuevo el valor anterior más pendiente. Así que hay un patrón. Añadimos el valor pendiente al valor anterior para obtener el nuevo valor. Esta idea se explota en este algoritmo de DDA.
Así que en lugar de calcular y con la ecuación de línea cada vez, simplemente podemos añadir m al valor actual y. Eso significa la nueva y que podemos conseguir añadiendo m al valor actual. Así que no necesitamos ir para resolver la ecuación de la línea cada vez que queremos calcular el valor y.
¿Cuál es la ventaja de eso? Elimina la multiplicación de coma flotante que está implicada en este cálculo que está m en x. Así que podemos eliminar estos cálculos que a su vez va a reducir las complejidades computacionales.
Ahora, como he dicho antes, la pendiente es una consideración importante aquí. Así que cuando la pendiente no está dentro del rango que significa que la pendiente es mayor que 1 o menor que menos 1, entonces no computamos valores y sucesivos, sino que calculamos valores x. De nuevo, de una manera similar que es nuevo valor es el valor viejo más un término constante, que en este caso es 1/m, antes era sólo m. Por lo tanto, podemos obtener el nuevo valor x añadiendo esta constante 1/m al valor actual. Y aquí también, por esto, estamos eliminando operaciones de coma flotante.
Así que el algoritmo completo se muestra aquí. La entrada es el punto final, los dos puntos finales son la entrada. Y la salida es el conjunto de todos los píxeles que forman parte de la línea. Así que calculamos m. Ahora, cuando m está dentro de este rango, calculamos valores y valores sucesivos como se muestra aquí, añadiendo m al valor y actual, redondearlo para obtener el píxel, y añadir el píxel al conjunto. Y cuando m no está dentro de este rango, calculamos valores x sucesivos añadiendo 1/m al valor actual y realizando los mismos pasos otra vez.
Así que continuamos en ambos casos hasta el otro punto final como se puede ver en este bucle condiciones de terminación. Así es como mejoramos en el enfoque de conversión de escaneo de líneas simples explotando una propiedad particular que es, podemos calcular los valores x o y sucesivos simplemente añadiendo un término constante.
Esto es claramente una mejora sobre el enfoque simple. Sin embargo, todavía hay cuestiones.
Con el algoritmo DDA como hemos señalado, podemos reducir las operaciones de coma flotante, pero sólo algunas de esas operaciones de coma flotante. No podemos eliminar todo, solo podemos reducir las multiplicaciones.
Eso aún nos deja otras operaciones de coma flotante, que son adición y redondeo. Ahora, cualquier operación de coma flotante es computacionalmente costosa e implica recursos adicionales. Así que cuando, en realidad, requerimos generar un gran número de segmentos de línea en un lapso de tiempo muy corto, nuestro objetivo ideal debería ser eliminar todas las operaciones de coma flotante por completo, en lugar de eliminar pocas. Eliminar pocos, por supuesto, mejora la tasa de renderización general, pero eliminar todo debe ser nuestro objetivo final.
Esto es así, ya que, para segmentos de líneas grandes o un gran número de segmentos de línea, estas operaciones de coma flotante pueden crear problemas. Particularmente, cuando estamos tratando con un segmento de línea muy grande, el redondeo puede resultar en píxeles lejos de la línea real, por ejemplo, considerar una línea muy grande como esta. Ahora bien, si realizamos el redondeo entonces hacemos seguir recibiendo pixel, como, algo así. Esto realmente parece una línea distorsionada para segmentos de gran línea. Para los segmentos pequeños, puede que esto no sea así, pero para los segmentos de grandes líneas, hay una posibilidad de distorsión visible, que por supuesto, no queremos.
Así que todo lo que hemos discutido hoy se puede encontrar en este libro, Gráficos de la computadora. Se aconseja pasar por el Capítulo 9 hasta la Sección 9.1.1 para conocer en más detalles lo que hayamos discutido. Por lo tanto, el algoritmo de dibujo de línea mejorado se tomará en la siguiente conferencia. Hasta entonces, gracias y adiós.