{"id":437,"date":"2012-05-08T15:26:00","date_gmt":"2012-05-08T15:26:00","guid":{"rendered":"http:\/\/www.dtic.upf.edu\/~jagenjo\/?p=437"},"modified":"2012-05-08T15:26:00","modified_gmt":"2012-05-08T15:26:00","slug":"infografia-practica-2-pipeline-grafica","status":"publish","type":"post","link":"https:\/\/tamats.com\/upf\/?p=437","title":{"rendered":"Infografia: Practica 2, Pipeline gr\u00e1fica"},"content":{"rendered":"<h3>Introducci\u00f3n<\/h3>\n<p>Escribir en C++ para Linux un programa que recibe como entrada un fichero ASCII con una superficie poligonal y permite su visualizaci\u00f3n 3D (grabando el resultado en una imagen a disco).<\/p>\n<blockquote><p>\u201c3D Computer Graphics, 3rd edition\u201d, por Alan Watt. Cap\u00edtulos 5 y 6.<\/p><\/blockquote>\n<h3>Funciones a implementar<\/h3>\n<ul>\n<li>Lectura de un fichero ASCII con los datos 3D de la superficie poligonal (el formato de este fichero se especifica m\u00e1s abajo).<\/li>\n<li>Creaci\u00f3n de una estructura de datos para almacenar estos pol\u00edgonos y operar con ellos.<\/li>\n<li>Transformaci\u00f3n de coordenadas del objeto a punto de vista (p\u00e1gs. 143-7).<\/li>\n<li>Culling o eliminaci\u00f3n de caras no vistas (p\u00e1gs. 147-8).<\/li>\n<li>Transformaci\u00f3n de coordenadas a espacio de pantalla 3D (p\u00e1gs. 155-6).<\/li>\n<li>Shading (p\u00e1gs. 171-182) (deb\u00e9is especificar al menos una fuente de luz).<\/li>\n<li>Rasterization (p\u00e1gs. 183-7).<\/li>\n<li>Z-buffer (secci\u00f3n 6.6.4, p\u00e1gs. 192-3)<\/li>\n<\/ul>\n<p>Opcionalmente se le pueden a\u00f1adir funcionalidades al programa: clipping de pol\u00edgonos que est\u00e1n parcialmente fuera del frustrum (p\u00e1gs. 168-171), interacci\u00f3n (cambio del punto de vista, rotaciones, traslaciones, escalas), cambio de propiedades de los materiales para shading, colores diferentes para objetos diferentes, etc.<\/p>\n<h3>Formato del fichero ASCII<\/h3>\n<p>L\u00ednea 1: &lt;V (n\u00famero de v\u00e9rtices)&gt; &lt;P (n\u00famero de pol\u00edgonos)&gt;<br \/>\nL\u00ednea 2: &lt;coordenada x1&gt; &lt;coordenada y1&gt; &lt;coordenada z1&gt;<br \/>\nL\u00ednea 3: &lt;coordenada x2&gt; &lt;coordenada y2&gt; &lt;coordenada z2&gt;<br \/>\n&#8230;<br \/>\nL\u00ednea V+1: &lt;coordenada xN&gt; &lt;coordenada yN&gt; &lt;coordenada zN&gt;<br \/>\nL\u00ednea V+2: &lt;n\u00famero de lados del pol\u00edgono 1&gt; &lt;1er v\u00e9rtice&gt; &lt;2o v\u00e9rtice&gt; &#8230; &lt;\u00faltimo v\u00e9rtice&gt; (ordenados tal que la normal sea saliente)<br \/>\nL\u00ednea V+3: &lt;n\u00famero de lados del pol\u00edgono 2&gt; &lt;1er v\u00e9rtice&gt; &lt;2o v\u00e9rtice&gt; &#8230; &lt;\u00faltimo v\u00e9rtice&gt;<br \/>\n&#8230;<br \/>\nL\u00ednea V+P+1: &lt;n\u00famero de lados del pol\u00edgono P&gt; &lt;1er v\u00e9rtice&gt; &lt;2o v\u00e9rtice&gt; &#8230; &lt;\u00faltimo v\u00e9rtice&gt;<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>Por ejemplo, esta ser\u00eda la representaci\u00f3n de una pir\u00e1mide de base cuadrada:<\/p>\n<p><code>5 5<br \/>\n0 0 0<br \/>\n0 1 0<br \/>\n1 1 0<br \/>\n1 0 0<br \/>\n0.5 0.5 1<br \/>\n4 1 2 3 4<br \/>\n3 1 4 5<br \/>\n3 4 3 5<br \/>\n3 3 2 5<br \/>\n3 2 1 5<\/code><\/p>\n<h3>C\u00f3digo ejemplo<\/h3>\n<p>Pod\u00e9is usar el mismo c\u00f3digo de la pr\u00e1ctica 1 para trabajar con im\u00e1genes.<\/p>\n<h3>Entrega<\/h3>\n<p>Fecha l\u00edmite: POR DETERMINAR, 9AM, a trav\u00e9s del Aula Global. No se aceptan entregas tard\u00edas, no se hacen excepciones.<\/p>\n<h3>Defensa<\/h3>\n<p>POR DETERMINAR.<br \/>\nDuraci\u00f3n: 10-15 minutos por equipo, con preguntas individuales. Todos los integrantes deben estar plenamente familiarizados con el trabajo de su equipo. Esta clase es de asistencia obligatoria.<\/p>\n<p><strong>Se entrega desde el Aula Global<\/strong><\/p>\n<p>Qu\u00e9 se entrega:<\/p>\n<ul>\n<li>Informe: introducci\u00f3n, el algoritmo, explicaci\u00f3n del c\u00f3digo, experimentos, conclusiones. En formatos html, ps, pdf o rtf.<\/li>\n<li>C\u00f3digo C++, comentado, listo para compilar (con su Makefile si es necesario). Formato: ASCII.<\/li>\n<li>Las im\u00e1genes (cualquier formato) y par\u00e1metros (ascii) usados en los experimentos.<\/li>\n<li>Se deben poder reproducir los experimentos con todos los materiales entregados, en cualquier PC de aulas, en Linux.<\/li>\n<li>En caso de copia (entre equipos, o de otras fuentes) todos los integrantes de los equipos involucrados suspender\u00e1n inmediatamente la asignatura, y el Departament abrir\u00e1 un expediente solicitando la expulsi\u00f3n temporal de dichos estudiantes.<\/li>\n<\/ul>\n<h3>Consejos<\/h3>\n<ul>\n<li>Leer el art\u00edculo con atenci\u00f3n.<\/li>\n<li>Volver a leer el art\u00edculo con atenci\u00f3n.<\/li>\n<li>Invertir un buen tiempo en planear el c\u00f3digo, no ponerse a programar directamente.<\/li>\n<li>Hacer c\u00f3digo modular: desglosar la tarea global en partes, hacer funciones para estas partes, llamar a las funciones desde un programa principal corto.<\/li>\n<li>Estudiar el programa C++ de ejemplo, ver qu\u00e9 operaciones con im\u00e1genes hay definidas y c\u00f3mo se acceden y modifican los valores de los pixels.<\/li>\n<li>Mientras se escribe el c\u00f3digo, y para hacer &#8216;debugging&#8217;, hacer pruebas con im\u00e1genes peque\u00f1as y sencillas.<\/li>\n<li>Probar primero con im\u00e1genes en escala de grises.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Escribir en C++ para Linux un programa que recibe como entrada un fichero ASCII con una superficie poligonal y permite su visualizaci\u00f3n 3D (grabando el resultado en una imagen a disco). \u201c3D Computer Graphics, 3rd edition\u201d, por Alan Watt. Cap\u00edtulos 5 y 6. Funciones a implementar Lectura de un fichero ASCII con los datos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=\/wp\/v2\/posts\/437"}],"collection":[{"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=437"}],"version-history":[{"count":0,"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=\/wp\/v2\/posts\/437\/revisions"}],"wp:attachment":[{"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}