{"id":129,"date":"2010-05-03T16:27:02","date_gmt":"2010-05-03T16:27:02","guid":{"rendered":"http:\/\/www.tecn.upf.edu\/~jagenjo\/?p=129"},"modified":"2010-05-03T16:27:02","modified_gmt":"2010-05-03T16:27:02","slug":"infografia-i-practica-4-transformaciones","status":"publish","type":"post","link":"https:\/\/tamats.com\/upf\/?p=129","title":{"rendered":"Infografia I: Pr\u00e1ctica 4: Transformaciones"},"content":{"rendered":"<p>En esta pr\u00e1ctica se trata todo el tema relacionado con las transformaciones geometricas, c\u00f3mo posicionar objetos en nuestro entorno y c\u00f3mo moverlos, rotarlos y escalarlos. Tambien se profundiza en el concepto de sistema de coordenadas.<\/p>\n<p>Para ello se tendr\u00e1 que hacer uso de las transformaciones mediante matrices. Es importante tener fresca toda la teor\u00eda de algebra asociada a matrices (multiplicacion de matrices, propiedades de las matrices, etc).<\/p>\n<p>Esta pr\u00e1ctica es clave para moverse con facilidad por entornos 3D.<\/p>\n<p><!--more--><\/p>\n<h3>Material<\/h3>\n<ul>\n<li><a href=\"http:\/\/docs.google.com\/present\/view?id=dg932qn8_139fsrphrg3\" target=\"_blank\">Slides sobre transformaciones geometricas<\/a><\/li>\n<li><strong><a href=\"uploads\/practicas\/framework_prac4.zip\">Framework de la practica 4<\/a><\/strong><\/li>\n<\/ul>\n<h3>Requisitos<\/h3>\n<ul class=\"good\">\n<li>Implementar las siguientes partes del framework:<\/li>\n<pre lang=\"cpp\">class Matrix33:\nvoid setScale(float sx, float sy);\nvoid setRotation(float ang);\nvoid multiply( const Matrix33&amp; m );\nvoid transform( Point&amp; vector );\nvoid translateLocal(float dx, float dy);\nvoid scaleLocal(float sx, float sy);\nvoid rotateLocal(float ang);\nvoid translateWorld(float dx, float dy);\nvoid scaleWorld(float sx, float sy);\nvoid rotateWorld(float ang);\n<\/pre>\n<li>Se tienen que poder aplicar las transformaciones de forma interactiva (teclas, menu) (tanto rotaciones, como translaciones como escalados).<\/li>\n<li>Poder aplicar tanto transformaciones locales como transformaciones a nivel de mundo, es decir, transformaciones con respecto al centro de coordenadas del objeto o con respecto al centro de coordenadas del mundo.<\/li>\n<li>Pintar el mismo objeto a la vez en diferentes posiciones.<\/li>\n<li>Suggeriments opcionals:\n<ul>\n<li>Implementar otras figuras aparte del triangulo.<\/li>\n<li>Moverte con las teclas del cursor. (mirar <a href=\"http:\/\/www.opengl.org\/resources\/libraries\/glut\/spec3\/node54.html\">este enlace<\/a> para saber como usar el callback para captar teclas especiales como los cursores).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Fallos comunes<\/h3>\n<ul class=\"bad\">\n<li>Crear un vector de matrices con todas las transformaciones a aplicar. Las transformaciones tienen que acumularse en la matriz model. Solo tiene que haber una matriz por objeto.<\/li>\n<li>Acumular los vertices transformados en algun contenedor global. Debeis seguir el ejemplo: se crea el vector de puntos, se transforman, se pintan y se destruyen, para cada frame que pintamos. Solo tiene sentido guardar los puntos si no estan transformados (para tener diferentes figuras).<\/li>\n<li>Al multiplicar dos matrices o matriz por vector, ir guardando el resultado en el mismo contenedor del que leemos, esto da calculos erroneos, haced una copia siempre que leais y escribais en la misma instancia, p.e. Matrix33 copia = *this;<\/li>\n<li>Cambiar el prototipo de la funcion multiply o transform para a\u00f1adirle mas parametros o cambiar el retorno, no hace falta, multiply modifica la propia matriz, y transform modifica el punto que le pasamos por parametro.<\/li>\n<li>Deshacer transformaciones para aplicar rotaciones. No es necesario si las rotaciones son en el centro del sistema, ya sea el sistema de mundo o el sistema local.<\/li>\n<li>Tratar de acceder a la variable Model del main desde alguna clase de framework.cpp, no es necesario ni tiene sentido, pensad que las clases del framework son genericas, deberian funcionar en cualquier programa, no necesita conocer lo que hay fuera.<\/li>\n<\/ul>\n<h3>Enlaces \u00fatiles<\/h3>\n<ul>\n<li><a href=\"http:\/\/www.j3d.org\/matrix_faq\/matrfaq_latest.html\">Todo sobre matrices<\/a><\/li>\n<\/ul>\n<\/h3>\n","protected":false},"excerpt":{"rendered":"<p>En esta pr\u00e1ctica se trata todo el tema relacionado con las transformaciones geometricas, c\u00f3mo posicionar objetos en nuestro entorno y c\u00f3mo moverlos, rotarlos y escalarlos. Tambien se profundiza en el concepto de sistema de coordenadas. Para ello se tendr\u00e1 que hacer uso de las transformaciones mediante matrices. Es importante tener fresca toda la teor\u00eda de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=\/wp\/v2\/posts\/129"}],"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=129"}],"version-history":[{"count":0,"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=\/wp\/v2\/posts\/129\/revisions"}],"wp:attachment":[{"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tamats.com\/upf\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}