<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1150099579292843985</id><updated>2012-02-16T18:36:21.163-08:00</updated><title type='text'>COMPUTACION-GRAFICA</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-5924574648260719463</id><published>2007-05-26T12:20:00.000-07:00</published><updated>2007-05-26T12:27:39.871-07:00</updated><title type='text'>PREVIO PRACTICA NO. 10</title><content type='html'>&lt;div&gt; PREVIO NO. 10&lt;br /&gt;&lt;br /&gt;Animación Esqueletal:&lt;br /&gt;Un modelo 3d está compuesto por cientos o miles de polígonos de distintas formas y tamaños que unidos entre sí forman la figura deseada. El número de polígonos ha ido aumentando progresivamente de modo que ahora para formar el brazo de un determinado modelo se utilizan miles de polígonos... miles de polígonos que han de modificar su tamaño y forma con cada mínimo movimiento del modelo.&lt;br /&gt;Calcular cada deformación de estos miles de polígonos y sus nuevas coordenadas en la escena, además de la aplicación sobre ellos de efectos luminosos, texturados, filtrados... El trabajo que supone para el sistema gráfico es tremendo. En eliminar esa inmensa carga se basa la tecnología del "esqueleto 3d". La "animación esqueletal" se basa en crear el modelo sobre una arquitectura o esqueleto y después recubrirlo de texturas (o piel). Con esta técnica, cada miembro del gorila del ejemplo se construiría recubriendo de polígonos un "hueso" (bone) del esqueleto. Las ventajas llegan cuando ese miembro se tiene que mover respecto al cuerpo. Cada hueso tendrá un movimiento limitado respecto al hueso con el que se une, exactamente del mismo modo que lo tiene el animal real. Cada parte móvil del modelo está formada a través de un hueso que tiene su propio recubrimiento de carne (polígonos) y su propia piel (texturas) y con la movilidad que el programador le quiera dar. De este modo, el gorila del ejemplo podría tener un hueso que le permita mover el brazo respecto al hombro, el antebrazo respecto al resto del brazo, la mano respecto al antebrazo, los dedos respecto a la mano... El movimiento es mucho más realista y, sobre todo, requiere muchos menos recursos del sistema al no tener que calcular la deformación de los polígonos que hasta ahora se utilizaban para representar las articulaciones.&lt;br /&gt;El único problema que representa la creación de modelos 3d a partir del un esqueleto se encuentra en la unión de los distintos huesos. Entre un hueso y otro existe un espacio que, siguiendo el símil con el cuerpo de los vertebrados reales, llamaremos articulación. Esta articulación se contrae, se estira y de deforma de distintas formas dependiendo del movimiento que hagan los dos huesos que une por ejemplo: &lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5068952231364327298" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RliJMq3k94I/AAAAAAAAAEI/3DBd8v4sei8/s320/figura1.bmp" border="0" /&gt; &lt;div&gt;La grieta que se crea entre ambos huesos es algo que no se puede mostrar en la imagen final. Para esconderla se utiliza la técnica "Skinning" que, como su nombre indica, se encarga de recubir de piel estas imperfecciones. &lt;img id="BLOGGER_PHOTO_ID_5068952291493869458" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RliJQK3k95I/AAAAAAAAAEQ/XPYGR_Vn5kk/s320/figura2.bmp" border="0" /&gt;&lt;br /&gt;&lt;a href="javascript:imagenMML%20("&gt;&lt;/a&gt;&lt;br /&gt;Mediante esta piel flexible, que une cada uno de los vértices de un hueso con el correspondiente en el otro, se da continuidad al objeto y se acerca mucho al movimiento totalmente natural que podemos observar en cualquier ser vivo. Un problema que genera esta "piel" radica en la textura que recubre esta piel.&lt;br /&gt;El problema radica en cómo unir los distintos huesos de modo que la apariencia final sea realista. De eso se ocupa el Vertex Skinning. Esta técnica se basa en la aplicación lo más realista posible del cálculo de las funciones matemáticas que calculan la posición de cada vértice de un objeto en la escena. Explicado de una forma sencilla, se ocupa de rellenar de la forma más realista posible los espacios entre los distintos "huesos" de los que ya hemos hablado. La unión entre los citados huesos es más real cuanto más matrices se utilicen. Estas matrices son cálculos matemáticos destinados a unir entre sí cada vértice del objeto. Cuantas más veces se recalcule la unión (más matrices haya), más realista será el objeto final.&lt;br /&gt;&lt;a href="javascript:imagenMML%20("&gt;&lt;/a&gt;&lt;img id="BLOGGER_PHOTO_ID_5068952343033477026" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RliJTK3k96I/AAAAAAAAAEY/PBUYyXmYvCQ/s320/figura3.bmp" border="0" /&gt;&lt;br /&gt;El brazo del modelo (en rojo) se une al torso (en azul). Cada color representa una de las matrices y, como vemos, la unión entre ambas es poco natural. Tarjetas como las ATi Radeon soportan hasta cuatro matrices por hardware, por lo que en ejemplos como este, añadiendo una tercera matriz se solucionaría el problema. &lt;img id="BLOGGER_PHOTO_ID_5068952394573084594" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RliJWK3k97I/AAAAAAAAAEg/0-7M2y7X2n0/s320/figura4.bmp" border="0" /&gt;&lt;br /&gt;&lt;a href="javascript:imagenMML%20("&gt;&lt;/a&gt;&lt;img id="BLOGGER_PHOTO_ID_5068952463292561346" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RliJaK3k98I/AAAAAAAAAEo/GM1wXl-3BS4/s320/figura5.bmp" border="0" /&gt;&lt;br /&gt;Entre las matrices roja y azul, se ha introducido una tercera matriz representada en verde. Esta matriz se introduce entre las otras dos actuando como una especie de colchón flexible que hace que la unión de las otras dos sea más natural. En caso de que el resultado no fuese el buscado, se podría introducir una cuarta matriz y perfeccionar aún más el resultado. Otra de las ventajas de contar con más matrices a la hora de representar un modelo, es que se puede definir el comportamiento de la textura (piel) que recubre cada matriz. Si se trata de representar la piel de un animal, la textura que recubre la matriz central se estirará mientras que la que recubre las otros dos matrices permanecerá igual. Del mismo modo, cada matriz puede verse afectada de forma diferente por la luz, ensombreciendo o aclarando la textura que la recubre.&lt;br /&gt;La gran ventaja de las ATi Radeon es que calcula hasta cuatro de estas matrices por hardware. Calcular estas matrices por software sería imposible ya que el procesador principal quedaría completamente colapsado ante tal afluencia de operaciones de cálculo en tiempo real.&lt;br /&gt;En el siguiente gráfico podemos ver un ejemplo real en un juego, el Dungeon Siege de Microsoft, en el que se pueden ver las cuatro matrices en distintos colores.&lt;br /&gt;&lt;a href="javascript:imagenMML%20("&gt;&lt;/a&gt;&lt;br /&gt;Cada color representa una matriz, sin embargo, la aplicación más efectiva de las distintas matrices, donde más efectiva se muestra es en las transiciones automáticas. Los conocidos "morphings".&lt;br /&gt;Formatos:&lt;br /&gt;.fbx&lt;br /&gt;el formato FBX, desarrollado por Kaydara para el intercambio de información.&lt;br /&gt;FBX es un formato binario que soporta toda clase de información 3D, 2D, video y audio, por lo que facilita enormemente la comunicación entre distintas aplicaciones (como Cinema4D, Lightwave, 3D Studio).&lt;br /&gt;.fpx&lt;br /&gt;Formato que admite múltiples resoluciones de una imagen. Con o sin compresión y de 8 a 24 bits de &lt;a title="Profundidad de color" href="http://es.wikipedia.org/wiki/Profundidad_de_color"&gt;profundidad de color&lt;/a&gt; Desarrollado por Kodak en conjunto con Hewlett Packard&lt;br /&gt;.x&lt;br /&gt;Los ficheros .X estan compues de plantillas, que pueden ser definidas por el usuario. Una plantilla es una "definicion de como quiere el usuario que se almacene la informacion".&lt;br /&gt;Para animar un fichero .X necesitas especificar una serie de animaciones con referencia a las matrices frame correspondientes. Abajo aparece un ejemplo de nuestro cuadrado texturizado y animado.&lt;br /&gt;Un ejemplo de estos formatos "optimizados" para juegos son los utilizados por Id Software para su Quake. Es posible que escriba un tutorial sobre este formato mas adellante, pero por el momento vamos a empezar con uno mas sencillo: el formato .X que es el que usa por defecto DirectX.&lt;br /&gt;&lt;br /&gt;Existe una herramienta que viene con el SDK de DirectX8 para transformar los ficheros del 3dStudio a formato .X en C:\mssdk\bin\DXUtils\XFiles\conv3ds.exe&lt;br /&gt;&lt;br /&gt;Estos ficheros .X van a contener la informacion acerca de nuestros modelos 3D (personajes, naves, etc...) e incluso de nuestro mundo 3D (pistas, ciudades, mapas, etc...)&lt;br /&gt;&lt;br /&gt;Los puntos claves cuando trabajamos con estos ficheros son:&lt;br /&gt;&lt;br /&gt;- De que manera estan almacenados los objetos.&lt;br /&gt;&lt;br /&gt;- De que forma se relacionan entre ellos. &lt;/div&gt;&lt;div&gt;&lt;img id="BLOGGER_PHOTO_ID_5068952532012038098" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RliJeK3k99I/AAAAAAAAAEw/oKCddPaKT04/s320/figura6.bmp" border="0" /&gt;&lt;/div&gt;&lt;div&gt;MODELO:&lt;/div&gt;&lt;img id="BLOGGER_PHOTO_ID_5068952622206351330" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_mYG88_6hQGg/RliJja3k9-I/AAAAAAAAAE4/vL9-JbHGjt4/s320/modelo.bmp" border="0" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-5924574648260719463?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/5924574648260719463/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=5924574648260719463' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5924574648260719463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5924574648260719463'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/05/previo-practica-no-10.html' title='PREVIO PRACTICA NO. 10'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mYG88_6hQGg/RliJMq3k94I/AAAAAAAAAEI/3DBd8v4sei8/s72-c/figura1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-4095792141517975482</id><published>2007-05-19T11:48:00.000-07:00</published><updated>2007-05-19T11:50:22.283-07:00</updated><title type='text'>Previo Practica 9</title><content type='html'>Previo Practica No.9&lt;br /&gt;&lt;br /&gt;1.- Investigue acerca de los métodos usuales de la animación&lt;br /&gt;&lt;br /&gt;Keyframes (Cuadros Llave):&lt;br /&gt;Se refiere a imágenes o dibujos los cuales define una parte esencial de inicio y fin entre puntos de transición. Estos son llamados “frames” porque su duración en el tiempo forman parte de una filmación. Una secuencia de keyframes define el movimiento que el espectador puede ver, algunas veces la posición de los keyframes en un film, video o animación define el tiempo del movimiento. Por que la duración de solamente 2 o 3 keyframes en un segundo no produce una ilusión de movimiento, la permanencia de los frames son fijados con más dibujos o imágenes, llamadas “inbetweens”.&lt;br /&gt;&lt;br /&gt;Forward Kinematics (Cinemática Directa):&lt;br /&gt;&lt;br /&gt;Es un método de la computación grafica en 3D para la animación de modelos. El concepto esencial de este concepto es que la posición de partes particulares de un modelo en un especifico tiempo son calculados desde la posición de orientación d el objeto, junto con la información en la unión de alguna articulación del modelo.&lt;br /&gt;&lt;br /&gt;Inverse Kinematics (Cinemática Inversa):&lt;br /&gt;&lt;br /&gt;Es un proceso utilizado en la animación de computación grafica en 3D, para calcular lo que requiere la articulación de una serie de extremidades o conjunturas, tal como al final de las extremidades hacia arriba en una localización particular.&lt;br /&gt;&lt;br /&gt;Motion Capture (Captura de Movimientos):&lt;br /&gt;&lt;br /&gt;Es una técnica de grabación digital de movimientos para entretenimiento o espectáculo, deportes y aplicaciones médicas. Utiliza varios sistemas de captura desde los ópticos, mecánicos, sistemas magnéticos, ya sea mediante de el uso de censores u otros dispositivos. Solo graba los movimientos no la apariencia, este método surgió como investigación militar.&lt;br /&gt;&lt;br /&gt;2.- Discuta acerca de las ventajas y desventajas de cada método y de ejemplos al menos dos de situaciones en las que cada uno este mejor aplicado.&lt;br /&gt;&lt;br /&gt;Keyframes (Cuadros Llave):&lt;br /&gt;&lt;br /&gt;Ventajas:&lt;br /&gt;Fácil de manejar&lt;br /&gt;Útil para hacer videos rápidos.&lt;br /&gt;Solo se necesitan figuras básicas.&lt;br /&gt;&lt;br /&gt;Desventajas:&lt;br /&gt;Ineficiente para una buena animación.&lt;br /&gt;Para un trabajo grande se necesitan varias figuras base.&lt;br /&gt;&lt;br /&gt;Aplicaciones:&lt;br /&gt;Videos&lt;br /&gt;Films&lt;br /&gt;Comerciales&lt;br /&gt;Presentaciones&lt;br /&gt;&lt;br /&gt;Forward Kinematics (Cinemática Directa):&lt;br /&gt;Ventajas:&lt;br /&gt;Determina comportamientos.&lt;br /&gt;Determina Posiciones.&lt;br /&gt;Se planea cada movimiento.&lt;br /&gt;&lt;br /&gt;Desventajas:&lt;br /&gt;No define leyes físicas como la gravedad y colisiones.&lt;br /&gt;&lt;br /&gt;Aplicaciones:&lt;br /&gt;Robotica&lt;br /&gt;Juegos de Computadora&lt;br /&gt;Animación.&lt;br /&gt;&lt;br /&gt;Inverse Kinematics (Cinemática Inversa):&lt;br /&gt;Ventajas:&lt;br /&gt;Se encarga de los requerimientos en las articulaciones.&lt;br /&gt;&lt;br /&gt;Desventajas:&lt;br /&gt;Limites antropomórficos&lt;br /&gt;Limites en las articulaciones&lt;br /&gt;&lt;br /&gt;Aplicaciones:&lt;br /&gt;Robotica&lt;br /&gt;Animación por Computadora.&lt;br /&gt;&lt;br /&gt;Motion Capture (Captura de Movimientos):&lt;br /&gt;Ventajas:&lt;br /&gt;Más rápido, algunas veces da mejores resultados en tiempo real.&lt;br /&gt;La cantidad de trabajo no varia con la complejidad o tamaño de la calidad o el mismo grado cuando se usan las técnicas tradicionales.&lt;br /&gt;El movimiento complejo y las interacciones realistas físicas tal como una animación secundaria, peso e intercambio de fuerzas puedes ser más fáciles de crear con un modo preciso de chequeo.&lt;br /&gt;La tecnología concede a un actor jugar múltiples roles con un solo film.&lt;br /&gt;Desventajas:&lt;br /&gt;Necesita hardware específico y programas especiales requeridos para obtener y procesar datos.&lt;br /&gt;El costo del software y equipo, personal requerido pueden no ser viables para pequeñas producciones.&lt;br /&gt;El sistema de captura tendría que tener requerimientos específicos para ser operados en ellos.&lt;br /&gt;Cuando ocurren problemas estos pueden ser fáciles es mejor reseguir la escena que intentar manipular los datos. Solamente pocos sistemas alojan vista en tiempo real del dato para decidir si se toman cartas en el asunto o se tiene que volver a rehacer.&lt;br /&gt;Ampliado movimiento para cuadruplicar caracteres puede ser difícil.&lt;br /&gt;La tecnología puede llegar a ser obsoleta en pocos años así como el software y técnicas para desarrollo.&lt;br /&gt;Los resultados son limitados para que pueda existir una alta calidad en la captura dependiendo del volumen y la edición extra de los datos.&lt;br /&gt;El movimiento no puede seguir las leyes de la física generalmente no se pueden representar.&lt;br /&gt;Las técnicas de animación tradicionales tal como el énfasis o la anticipación y seguimiento, movimientos secundarios o manipulación, son estrechos en la animación y generalmente no se aplican.&lt;br /&gt;Si el modelo de  computadora tiene diferentes proporciones desde la captura del objeto, esto pueden ocurrir.&lt;br /&gt;La calidad real de vida no puede trasladarse el modelo en la computadora como uno esperaba.&lt;br /&gt;&lt;br /&gt;Aplicaciones:&lt;br /&gt;En videojuegos donde se captura movimientos, por ejemplo: fútbol, básquetbol o combates de artes marciales, en general deportes de acción.&lt;br /&gt;Para captura de efectos CG, en algunos casos remplaza la celda de animación, y por completamente la generación de criaturas por computadora como Golum, La Momia y King Kong&lt;br /&gt;Realidad Virtual para interacción en tiempo real. Asi como visualización.&lt;br /&gt;Generación de Personajes en tiempo real.&lt;br /&gt;&lt;br /&gt;3.- Investigue que método de animación usan los modelos de Quake y de Unreal Tournament. Busque código que utilizando OpenGL permita visualizar un modelo de estos juegos y ejecútelo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Los modelos Quake utilizan la predicción de movimiento por lo tanto utilizan el método de Forward Kinematics.&lt;br /&gt;&lt;br /&gt;Los modelos de Unreal Tournament tienen bases de inteligencia Artificial&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-4095792141517975482?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/4095792141517975482/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=4095792141517975482' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/4095792141517975482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/4095792141517975482'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/05/previo-practica-9.html' title='Previo Practica 9'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-2654645278297012940</id><published>2007-05-14T13:48:00.000-07:00</published><updated>2007-05-14T13:50:34.920-07:00</updated><title type='text'>Pseudocodigo Iluminacion por Raster</title><content type='html'>int v1x,v1y,v2x,v2y,v3x,v3y,v4x,v4y;  //vertices&lt;br /&gt;&lt;br /&gt;void ilumina(){&lt;br /&gt;&lt;br /&gt;float *Ax,*Ay;&lt;br /&gt;&lt;br /&gt;float *A'x,*A'y;&lt;br /&gt;&lt;br /&gt;float *Bx,*By;&lt;br /&gt;&lt;br /&gt;float *B'x,*B'y;&lt;br /&gt;&lt;br /&gt;float *Cx,*Cy;&lt;br /&gt;&lt;br /&gt;float *C'x,*C'y;&lt;br /&gt;int ret;&lt;br /&gt;&lt;br /&gt;if(ordena1==1){  //la funcion ordena devulve el vertice de mayor ordenada&lt;br /&gt;&lt;br /&gt;B'x=bresenham1(*Ax,*Ay,*By,*Bx) //se utiliza el algoritmo de Bresenham&lt;br /&gt;B'y=bresenham2(*Ax,*Ay,*By,*Bx)&lt;br /&gt;color(r,g,b,B'x);&lt;br /&gt;color(r,g,b,B'y);&lt;br /&gt;C'x=bresenham1(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;C'y=bresenham2(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;color(r,g,b,C'x);&lt;br /&gt;color(r,g,b,C'y);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if(ordena2==1){&lt;br /&gt;B'x=bresenham1(*Ax,*Ay,*By,*Bx)&lt;br /&gt;B'y=bresenham2(*Ax,*Ay,*By,*Bx)&lt;br /&gt;color(r,g,b,B'x);&lt;br /&gt;color(r,g,b,B'y);&lt;br /&gt;C'x=bresenham1(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;C'y=bresenham2(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;color(r,g,b,C'x);&lt;br /&gt;color(r,g,b,C'y);&lt;br /&gt;}&lt;br /&gt;if(ordena3==1){&lt;br /&gt;B'x=bresenham1(*Ax,*Ay,*By,*Bx)&lt;br /&gt;B'y=bresenham2(*Ax,*Ay,*By,*Bx)&lt;br /&gt;color(r,g,b,B'x);&lt;br /&gt;color(r,g,b,B'y);&lt;br /&gt;C'x=bresenham1(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;C'y=bresenham2(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;color(r,g,b,C'x);&lt;br /&gt;color(r,g,b,C'y);&lt;br /&gt;}&lt;br /&gt;if(ordena4==1){&lt;br /&gt;B'x=bresenham1(*Ax,*Ay,*By,*Bx)&lt;br /&gt;B'y=bresenham2(*Ax,*Ay,*By,*Bx)&lt;br /&gt;color(r,g,b,B'x);&lt;br /&gt;color(r,g,b,B'y);&lt;br /&gt;C'x=bresenham1(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;C'y=bresenham2(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;color(r,g,b,C'x);&lt;br /&gt;color(r,g,b,C'y);&lt;br /&gt;}&lt;br /&gt;while(By!=Cy){&lt;br /&gt;&lt;br /&gt;if( B'y&lt;=c'y&amp;&amp;amp; c'y==cy){&lt;br /&gt;A'y=cy&lt;br /&gt;A'x=cx}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if( c'y&lt;=B'y&amp;&amp;amp; B'y==By){&lt;br /&gt;Ay=By&lt;br /&gt;Ax=Bx}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if(c'y=cy){&lt;br /&gt;cy=V3Y&lt;br /&gt;cx=v3X&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if( B'y==By){&lt;br /&gt;By=V3Y&lt;br /&gt;Bx=v3X&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;B'x=bresenham1(*Ax,*Ay,*By,*Bx)&lt;br /&gt;B'y=bresenham2(*Ax,*Ay,*By,*Bx)&lt;br /&gt;color(r,g,b,B'x);&lt;br /&gt;color(r,g,b,B'y);&lt;br /&gt;C'x=bresenham1(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;C'y=bresenham2(*Ax,*Ay,*Cy,*Cx)&lt;br /&gt;color(r,g,b,C'x);&lt;br /&gt;color(r,g,b,C'y);&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int ordena1(){&lt;br /&gt;if(v2y&lt;=v1y&gt;=v3y &amp;&amp;amp; v1y&gt;=v4y){&lt;br /&gt;    Ay=A'y=v1y;&lt;br /&gt;     Ax=A'x=v1x;&lt;br /&gt;   if(v3y&lt;=v2y&gt;=v4y({&lt;br /&gt;     By=B'y=v2y;&lt;br /&gt;     Bx=B'x=v2x;&lt;br /&gt;&lt;br /&gt;    if(v3y&lt;=v4y{&lt;br /&gt;     cy=c'y=v4y;&lt;br /&gt;     cx=c'x=v4x;&lt;br /&gt;   }else{&lt;br /&gt;&lt;br /&gt;     cy=c'y=v3y;&lt;br /&gt;     cx=c'x=v3x;&lt;br /&gt;            }&lt;br /&gt;   }&lt;br /&gt;   if(v2y&lt;=v3y&gt;=v4y){&lt;br /&gt;     By=B'y=v3y;&lt;br /&gt;     Bx=B'x=v3x;&lt;br /&gt;   if(v2y&lt;=v4y{&lt;br /&gt;     cy=c'y=v4y;&lt;br /&gt;     cx=c'x=v4x;&lt;br /&gt;   }else{&lt;br /&gt;&lt;br /&gt;     cy=c'y=v2y;&lt;br /&gt;     cx=c'x=v2x;&lt;br /&gt;            }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   if(v3y&lt;=v4y&gt;=v2y){&lt;br /&gt;     By=B'y=v4y;&lt;br /&gt;     Bx=B'x=v4x;&lt;br /&gt;   if(v3y&lt;=v2y{&lt;br /&gt;     cy=c'y=v2y;&lt;br /&gt;     cx=c'x=v2x;&lt;br /&gt;   }else{&lt;br /&gt;&lt;br /&gt;     cy=c'y=v3y;&lt;br /&gt;     cx=c'x=v3x;&lt;br /&gt;            }&lt;br /&gt;   }&lt;br /&gt;verif=1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;   verif=0;     &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-2654645278297012940?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/2654645278297012940/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=2654645278297012940' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/2654645278297012940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/2654645278297012940'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/05/pseudocodigo-iluminacion-por-raster.html' title='Pseudocodigo Iluminacion por Raster'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-2836189995469872548</id><published>2007-05-08T08:43:00.000-07:00</published><updated>2007-05-08T08:53:16.554-07:00</updated><title type='text'>Previo 8</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1.- Investigue como crear y definir una fuente de luz en opengl creación de la luz:&lt;br /&gt;CREACION DE FUENTES DE LUZ&lt;br /&gt;Las propiedades de una fuente de luz son el color, posición y dirección. El comando usado para especificar todas las propiedades de una luz es glLight*(), tiene tres argumentos para identificar la luz que se está utilizando, la propiedad y el valor deseado para esapropiedad.&lt;br /&gt;Después de definir las características de las luces, hay que encenderlas con el comando glEnable(). También hay que llamar a este comando con el parámetro GL_LIGHTING , de esta forma se preparar OpenGL para desarrollar los cálculos de Iluminación.&lt;br /&gt;&lt;br /&gt;¿Cuantas luces se pueden definir?:&lt;br /&gt;Podemos tener al menos ocho fuentes de luz en la escena (puede haber más, depende de la implementación de OpenGL. OpenGL necesita realizar cálculos para determinar cuanta luz recibe cada vértice de cada fuente de luz. El incremento del número de luces influye en una ejecución más lenta.&lt;br /&gt;&lt;br /&gt;Parametrización de la fuente de luz&lt;br /&gt;&lt;br /&gt;void glLight{if}[v] (GLenum light, GLenum pname, TYPE param )&lt;br /&gt;Crea la luz especificada por light, la cual puede ser GL_LIGHT0, GL_LIGHT1,&lt;br /&gt;…GL_LIGHT7. Las características de la luz quedan definidas por pname. El argumento&lt;br /&gt;param indica los valores que establece la característica pname; si se utiliza la versión de&lt;br /&gt;vector(v) pname es un puntero a un grupo de valores, o el propio valor si la versión sin vector es la que estamos usando(i,f).&lt;br /&gt;Valores por defecto para el parámetro pname de glLLight*().&lt;img id="BLOGGER_PHOTO_ID_5062216229184655714" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RkCa1vTE0WI/AAAAAAAAADY/zx2jpAFmM7I/s320/x.bmp" border="0" /&gt;&lt;/div&gt;&lt;/div&gt;Tipos de luces&lt;br /&gt;En OpenGL existen tres tipos fundamentales de luces:&lt;br /&gt;Luces direccionales&lt;br /&gt;Luces locales&lt;br /&gt;Focos&lt;br /&gt;Todos los tipos de luces permiten definir una componente ambiente, una difusa y una especular con componentes RGBA.&lt;br /&gt;Definir las fuentes de luz (propiedades de cada una de las luces).&lt;br /&gt;GLvoid glLightfv(GLenum light, GLenum pname, const GLfloat *params);&lt;br /&gt;Light: la luz a la que se esté haciendo referencia (GL_LIGHT0, GL_LIGHT1, GL_LIGHT2, etc.).&lt;br /&gt;*params, es un array de valores RGBA, cada valor define el porcentaje de intensidad de cada color que tiene la luz.&lt;br /&gt;Luces direccionales&lt;br /&gt;Una luz direccional esta situada en el infinito&lt;br /&gt;Definir el vector direccional&lt;br /&gt;float difusa[3]={1.0,0.0,0.0};&lt;br /&gt;float direccion[4]={1.0,1.0,1.0,0.0};&lt;br /&gt;glLightfv(GL_LIGHT0, GL_POSITION, direccion};&lt;br /&gt;glLightfv(GL_LIGHT0, GL_DIFFUSE,difusa);&lt;br /&gt;Luces locales&lt;br /&gt;Las luces locales se definen de la misma forma que las direccionales solo que el cuarto elemento del vector vale uno.&lt;br /&gt;float difusa[3]={1.0,0.0,0.0};&lt;br /&gt;float posicion[4]={1.0,1.0,1.0,1.0};&lt;br /&gt;glLightfv(GL_LIGHT0, GL_POSITION, posición};&lt;br /&gt;glLightfv(GL_LIGHT0, GL_DIFFUSE, difusa);&lt;br /&gt;Focos de luz&lt;br /&gt;El foco viene definido como: una luz local, una dirección o una apertura del foco.&lt;br /&gt;float difusa[3]={1.0,0.0,0.0};&lt;br /&gt;float posicion[4]={1.0,1.0,1.0,1.0};&lt;br /&gt;float direccion[3]={1.0,1.0,1.0};&lt;br /&gt;glLightfv(GL_LIGHT0, GL_POSITION, posicion};&lt;br /&gt;glLightfv(GL_LIGHT0, GL_DIFFUSE, difusa);&lt;br /&gt;glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direccion); //Dirección del foco&lt;br /&gt;glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 20); // ángulo de corte entre 0 y 180&lt;br /&gt;&lt;br /&gt;Color de la luz&lt;br /&gt;OpenGL permite asociar a cualquier luz tres parámetros relacionados con el color:&lt;br /&gt;GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR. El parámetro GL_AMBIENT se refiere a la intensidad RGBA de la luz ambiente que una fuente de luz añade a la escena. El valor por defecto es que no hay luz ambiente. El parámetro GL_DIFFUSE es el que está más relacionado con el concepto que tenemos normalmente de “color de una luz”; se refiere a la intensidad RGBA de la luz difusa que una fuente de luz añade a la escena. El valor por defecto es (1.0, 1.0, 1.0, 1.0) para GL_LIGHT0 que produce una luz blanca brillante. El valor por defecto para GL_LIGHT1… GL_LIGHT7 es (0.0, 0.0, 0.0, 0.0). El parámetro GL_SPECULAR afecta a el color del brillo especular en un objeto. Un objeto como un vaso tiene una luz especular que es el color de la luz que está brillando en él, normalmente blanca. Si queremos crear un efecto realista, el parámetro GL_SPECULAR y GL_DIFFUSE se deben establecer al mismo valor.&lt;br /&gt;&lt;br /&gt;Habilitación y desabilitación de luces&lt;br /&gt;Para que las luces tengan efecto se debe activar el cálculo del modelo de iluminación utilizando las luces usando la llamada: glEnable(GL_LIGHTING) y para deshabilitarlo glDisable(GL_LIGHTING);&lt;br /&gt;y activar cada una de las luces individuales que se quieran utilizar con&lt;br /&gt;glEnable(GL_LIGHTn) y deshabilitarlas glDisable(GL_LIGHTn);&lt;br /&gt;&lt;br /&gt;Luz por defaul y características por defaul&lt;br /&gt;Es una luz ambiente básica la cual especificará como se realiza la iluminación de la escena en cuanto a si las luces afectan a las dos partes de un objeto el modelo de cálculo de la relación entre el observador y los objetos en el caso de componente especular.&lt;br /&gt;Propiedades para definir del modelo básico de iluminación:&lt;br /&gt;glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambiente); //Valores de lacomponente ambiente base.&lt;br /&gt;GlLightModelf(GL_LIGHT_MODEL_TWO_SIDE,TRUE); //las luces afectana ambas caras de un material.&lt;br /&gt;GlLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, TRUE); //Coloca el modo de cálculo especular con el observador local, si no todos los cálculos se hace como si el observador estuviese situado sobre el eje Z.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.- Investige la diferencia entre luz he iluminación(ligth/ligthing)&lt;br /&gt;&lt;br /&gt;Habilitación y desabilitación de la iluminación (¿Cómo?)&lt;br /&gt;Para la habilitación/deshabilitación de toda la iluminación dentro de una escena se utiliza:&lt;br /&gt;glEnable(GL_LIGHTING);&lt;br /&gt;glDisable(GL_LIGHTING);&lt;br /&gt;&lt;br /&gt;Para que hay que habilitar o desabilitar la iluminación&lt;br /&gt;Con OpenGL necesitas habilitar o deshabilitar explícitamente la iluminación. Si no&lt;br /&gt;Está habilitada el color actual es mapeado al vértice pero los cálculos de normales, fuentes de luz, modelo de iluminación y propiedades de material no se producen.&lt;br /&gt;&lt;br /&gt;3.- Investigue la definición de propiedades de material a una superficie&lt;br /&gt;Ø El modelo de iluminación de OpenGL realiza una aproximación del color de un material en función de la luz que incide sobre él y la luz que es capaz de reflejar&lt;br /&gt;Ø Por ejemplo una pelota perfectamente roja es aquel objeto cuyo material es capaz de absorber todas longitudes de onda excepto el rojo y es capaz de reflejar únicamente este color&lt;br /&gt;Ø Los materiales tienen dos propiedades sobre sus colores, que indican cómo influye cada una de las propiedades de un rayo de luz sobre él&lt;br /&gt;Ø Ambient&lt;br /&gt;Ø Diffuse&lt;br /&gt;Ø También tiene tres propiedades sobre la capacidad de emisión y reflexión de luz&lt;br /&gt;Ø Specular&lt;br /&gt;Ø Shininess&lt;br /&gt;Ø Emission&lt;br /&gt;Ø Ambient&lt;br /&gt;Ø se casa con la propiedad Ambient de un rayo de luz e indica cómo se va a comportar el material en función de la componente Ambient del rayo de luz incidente&lt;br /&gt;Ø se refiere al color por defecto del material&lt;br /&gt;Ø Diffuse&lt;br /&gt;Ø se casa con la propiedad Diffuse de un rayo de luz e indica cómo se va a comportar el material en función de la componente Diffuse del rayo de luz incidente&lt;br /&gt;Ø se refiere a la luz que reflejará de forma difusa&lt;br /&gt;Ø Estas dos propiedades determinan el color del material y suelen tener valores aproximados sino iguales&lt;br /&gt;Ø Specular&lt;br /&gt;Ø se casa con la propiedad Specular de un rayo de luz e indica cómo se va a comportar el material en función de la componente Specular del rayo de luz incidente&lt;br /&gt;Ø La propiedad especular se suele definir blanca o gris, de forma que los reflejos del material se degradan desde el color base de la luz incidente hasta el color definido en esta propiedad&lt;br /&gt;Ø Shininess&lt;br /&gt;Ø Determina la concentración de los puntos que van a reflejar la luz&lt;br /&gt;Ø Puede ser un único punto o toda la superficie del objeto&lt;br /&gt;&lt;br /&gt;Ø Emission&lt;br /&gt;l Esta propiedad define la capacidad de un objeto de simular la emisión de luz&lt;br /&gt;l NO es una fuente de luz&lt;br /&gt;l Se definen los colores de la luz que emite&lt;br /&gt;l Sirve para simular estrellas, lámparas u otros objetos similares&lt;br /&gt;&lt;br /&gt;Características de las superficies (difusa, especular, brillantez, emisividad, etc.)&lt;br /&gt;Luz ambiente&lt;br /&gt;La luz ambiental es aquella que no proviene de una dirección concreta, incide sobre todas las partes del objeto por igual.&lt;br /&gt;Iambiente = ka Ia&lt;br /&gt;ka coeficiente de reflexión ambiental [0,1] dependiente de cada objeto.&lt;br /&gt;Ia intensidad ambiental en todo punto del espacio.&lt;br /&gt;&lt;br /&gt;Luz difusa&lt;br /&gt;• La fuente tiene una localización y una dirección particular&lt;br /&gt;• Una vez toca la superficie del objeto, se refleja en todas direcciones&lt;br /&gt;La luz difusa es la que proviene de una dirección particular y es reflejada en todas direcciones.&lt;br /&gt;Afecta a aquellas partes del objeto en las que la luz incide.&lt;br /&gt;La luz difusa es reflejada por la superficie de un objeto de manera adireccional.&lt;img id="BLOGGER_PHOTO_ID_5062216607141777778" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RkCbLvTE0XI/AAAAAAAAADg/UlyaZSrS38E/s320/x.bmp" border="0" /&gt;&lt;/div&gt;I L : Intensidad de la fuente&lt;br /&gt;q : Angulo de incidencia [0º..90º]&lt;br /&gt;Kd: Coeficiente de reflexión difusa para cada objeto [0..1]&lt;br /&gt;N: Normal a la superficie (unitario)&lt;br /&gt;L: Vector de iluminación (unitario)&lt;img id="BLOGGER_PHOTO_ID_5062216903494521218" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_mYG88_6hQGg/RkCbc_TE0YI/AAAAAAAAADo/6oJuOUxNwd0/s320/x.bmp" border="0" /&gt;&lt;/div&gt;Luz especular&lt;br /&gt;• También es direccional, pero el reflejo se produce en una dirección concreta&lt;br /&gt;• Produce un punto brillante en la superficie que ilumina --&gt; reflejo especular&lt;br /&gt;La luz especular procede de una dirección concreta y se refleja en una única dirección.&lt;br /&gt;Produce brillos intensos.&lt;br /&gt;Las reflexiones especulares son normalmente del mismo color que la fuente de luz.&lt;br /&gt;La intensidad de la luz especular reflejada depende de:&lt;br /&gt;La longitud de onda de la luz incidente&lt;br /&gt;El ángulo de la luz incidente&lt;br /&gt;Las características del material&lt;br /&gt;En un espejo perfecto la dirección desde la que se observa el reflejo es la dirección de reflexión perfecta R.&lt;br /&gt;La reflexión especular depende de la posición del observador.&lt;img id="BLOGGER_PHOTO_ID_5062217367350989202" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_mYG88_6hQGg/RkCb3_TE0ZI/AAAAAAAAADw/i_8krQ7QNe0/s320/x.bmp" border="0" /&gt;&lt;/div&gt;Dependiendo de la superficie (grado de pulido) el brillo es más o menos concentrado alrededor del punto donde R y V coinciden.&lt;img id="BLOGGER_PHOTO_ID_5062217633638961570" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_mYG88_6hQGg/RkCcHfTE0aI/AAAAAAAAAD4/c5dYymwMq2U/s320/x.bmp" border="0" /&gt;&lt;/div&gt;BRILLOS&lt;br /&gt;Se basan en la componente especular de los materiales&lt;br /&gt;Produce un blanqueamiento del material&lt;br /&gt;Depende del punto de vista&lt;br /&gt;Produce reflejos especulares&lt;br /&gt;Para realizar brillos en un material, la luz debe contener una componente especular distinta de cero:&lt;br /&gt;Espec[]= {1.0f, 1.0f, 1.0f, 1.0f};&lt;br /&gt;glLigth(GL_LIGHT0, GL_SPECULAR, Espec);&lt;br /&gt;El material sobre el que incida también deberá tener una componente especular distinta de cero:&lt;br /&gt;Glfloat especular[] = {1.0f, 1.0f, 1.0f, 1.0f}; glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT, GL_SPECULAR, especular);&lt;br /&gt;&lt;br /&gt;La propiedad de brillo del material determina el tamaño de la superficie que va a reflejar el brillo&lt;br /&gt;glMaterialf(GL_FRONT, GL_SPECULAR, mat_option);&lt;br /&gt;glMateriali(GL_FRONT, GL_SHININESS, 128);&lt;br /&gt;&lt;br /&gt;El valor de esta componente varía entre:&lt;br /&gt;0 La superficie es un punto&lt;br /&gt;128 Toda la superficie del objeto refleja&lt;br /&gt;SOMBRAS&lt;br /&gt;Ausencia de luz producida generalmente por la superposición de un cuerpo opaco entre una fuente de luz y otro cuerpo&lt;br /&gt;En OpenGL las proyecciones sólo se realizan sobre objetos volumétricos&lt;br /&gt;Tipos de Sombras:&lt;br /&gt;Sombras Proyectadas&lt;br /&gt;Sombras Volumétricas&lt;br /&gt;Sombras proyectadas&lt;br /&gt;Es la técnica más sencilla, y consiste en calcular una matriz de proyección sobre el plano sobre el que se quiere dibujar la sombra&lt;br /&gt;Una vez calculada esta matriz, si se multiplica por la matriz del modelo, y se dibujan el resto de las figuras, éstas se estarán proyectando sobre ese plano&lt;br /&gt;&lt;br /&gt;Sombras volumétricas&lt;br /&gt;La técnica anterior es muy sencilla, pero solo sirve para dibujar esas sobras proyectadas sobre planos&lt;br /&gt;Si se tiene una composición de figuras en las que unas proyectan sombras sobre otras, con la técnica anterior no se podrán representar&lt;br /&gt;Para evitar esto se utiliza una matriz especial que calculará la influencia de la posición de un objeto sobre los restantes&lt;br /&gt;&lt;br /&gt;NIEBLA&lt;br /&gt;Efecto especial utilizado para difuminar una escena dando la impresión de que se halla realmente cubierta por una masa de niebla&lt;br /&gt;En general consiste en difuminar el color de la escena, oscureciendo los objetos más lejanos llegando incluso a desaparecer, mientras que los objetos más cercanos aparecen más claros&lt;br /&gt;El efecto niebla se puede aplicar de dos formas principalmente:&lt;br /&gt;Basado en vértices&lt;br /&gt;Basado en tablas&lt;br /&gt;&lt;br /&gt;¿Como se define sobre que cara(s) de un polígono se aplican los materiales?&lt;br /&gt;Se tiene la función&lt;br /&gt;void glMaterial{if}{v} (GLenum face, GLenum pname, TYPE *param);&lt;br /&gt;Donde:&lt;br /&gt;Parámetros de glMaterial{fv}&lt;br /&gt;Face: Indica la cara sobre la que se va a aplicar el material&lt;br /&gt;GL_FRONT à Se aplica sobre las caras delanteras del objeto&lt;br /&gt;GL_BACK à Se aplica sobre las caras internas del objeto&lt;br /&gt;GL_FRONT_AND_BACK à Se aplica sobre todas las caras del objeto&lt;br /&gt;Param: Indica la propiedad que se va a establecer de las ya explicadas&lt;img id="BLOGGER_PHOTO_ID_5062218084610527666" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RkCchvTE0bI/AAAAAAAAAEA/vAiKSWwJXxc/s320/x.bmp" border="0" /&gt; 4.- Invetige acerca del mapeo de texturas en opengl&lt;br /&gt;&lt;br /&gt;Carga-definición de bytmap&lt;br /&gt;&lt;br /&gt;La carga se hace abriendo el archivo de el bitmap directamente y asignándolo a un apuntador para después pintarlo:&lt;br /&gt;bool CTextura::CargarBMP(char *szNombreFichero)&lt;br /&gt; {&lt;br /&gt;    FILE *hFichero;&lt;br /&gt;    AUX_RGBImageRec *Imagen;&lt;br /&gt;    bool bResultado=false;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    if (szNombreFichero)                               // Comprobamos que el nombre de fichero sea correcto&lt;br /&gt;    {&lt;br /&gt;        hFichero=fopen(szNombreFichero,"r");           // Comprobamos si el fichero existe (Si podemos abrirlo)&lt;br /&gt;&lt;br /&gt;        if (hFichero)                                  // ¿Existe el fichero?&lt;br /&gt;        {&lt;br /&gt;            fclose(hFichero);                          // Cerramos el handle&lt;br /&gt;            Crear(szNombreFichero);&lt;br /&gt;        &lt;br /&gt;            Imagen=auxDIBImageLoad(szNombreFichero);   // Cargamos el BMP&lt;br /&gt;            m_nAncho=Imagen-&gt;sizeX;&lt;br /&gt;            m_nAlto=Imagen-&gt;sizeY;&lt;br /&gt;                &lt;br /&gt;            glTexImage2D(GL_TEXTURE_2D, 0, 3, m_nAncho, m_nAlto, 0, GL_RGB, GL_UNSIGNED_BYTE, Imagen-&gt;data);&lt;br /&gt;                &lt;br /&gt;            bResultado=true;&lt;br /&gt;        }&lt;br /&gt;    } &lt;br /&gt;    delete Imagen-&gt;data;&lt;br /&gt;    delete Imagen;        &lt;br /&gt;    return bResultado;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;Transformación de la textura y Modos de aplicación de una textura (repeat,wrap,etc)&lt;br /&gt;&lt;br /&gt;Se indica con la función:&lt;br /&gt;El tamaño de una textura generalmente no es el mismo que el del polígono proyectado sobre el que se pega, existirán casos en que el tamaño de la textura será mayor que el del polígono proyectado y otros en que será menor.&lt;br /&gt;&lt;br /&gt;Necesitamos especificar cómo se calculará el color final de los píxeles sobre el polígono proyectado, a partir de la imagen de textura. Por otro lado, quizás estemos interesados en que la textura se repita cada cierto intervalo de tiempo. Todo este comportamiento se fija a través de la función:&lt;br /&gt;&lt;br /&gt;void glTexParameter{if}{v}(GLenum tipoTex, GLenum param, TYPE valor);&lt;br /&gt;&lt;br /&gt;donde tipoTex puede ser GL_TEXTURE_1D o GL_TEXTURE_2D y param y valor pueden tomar los valores de las siguiente tabla:&lt;br /&gt;&lt;br /&gt;Parámetro                                                                   Valor&lt;br /&gt;GL_TEXTURE_WRAP_S                             GL_CLAMP, GL_REPEAT&lt;br /&gt;GL_TEXTURE_WRAP_T                             GL_CLAMP, GL_REPEAT&lt;br /&gt;GL_TEXTURE_MAG_FILTER                     GL_NEAREST, GL_LINEAR&lt;br /&gt;GL_TEXTURE_MIN_FILTER                      GL_NEAREST, GL_LINEAR,&lt;br /&gt;GL_NEAREST_MIPMAP_NEAREST,&lt;br /&gt;GL_NEAREST_MIPMAP_LINEAR,&lt;br /&gt;GL_LINEAR_MIPMAP_NEAREST,&lt;br /&gt;GL_LINEAR_MIPMAP_LINEAR&lt;br /&gt;GL_TEXTURE_BORDER_COLOR  cuatro valores en el intervalo [0...1]&lt;br /&gt;&lt;br /&gt;Un ejemplo de su uso es el siguiente:&lt;br /&gt;glTexParameterfv(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);&lt;br /&gt;glTexParameterfv(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);&lt;br /&gt;&lt;br /&gt;Mapeo de la textura en una superficie&lt;br /&gt;&lt;br /&gt;Se inicializa la textura antes de indicar el tipo de la superficie por ejemplo:&lt;br /&gt;glTexParameterfv(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);&lt;br /&gt;glTexParameterfv(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);&lt;br /&gt;La primera permite que las texturas se repitan en horizontal, y la segunda,&lt;br /&gt;en vertical.&lt;br /&gt;Con este cambio, podríamos mapear las texturas con coordenadas mayores&lt;br /&gt;a 1, de manera que las texturas se repetirían, de esta manera:&lt;br /&gt;glBindTexture(GL_TEXTURE_2D,texture_floor);&lt;br /&gt;glBegin(GL_QUADS);&lt;br /&gt;glTexCoord2d(0.0,0.0);&lt;br /&gt;glVertex3f(-6.0,0.0,-6.0);&lt;br /&gt;glTexCoord2d(0.0,6.0);&lt;br /&gt;glVertex3f(-6.0,0.0,6.0);&lt;br /&gt;glTexCoord2d(6.0,6.0);&lt;br /&gt;glVertex3f(6.0,0.0,6.0);&lt;br /&gt;glTexCoord2d(6.0,0.0);&lt;br /&gt;glVertex3f(6.0,0.0,-6.0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;5.- Programa&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-2836189995469872548?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/2836189995469872548/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=2836189995469872548' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/2836189995469872548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/2836189995469872548'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/05/previo-8_08.html' title='Previo 8'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mYG88_6hQGg/RkCa1vTE0WI/AAAAAAAAADY/zx2jpAFmM7I/s72-c/x.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-3971350336321332590</id><published>2007-05-08T08:29:00.000-07:00</published><updated>2007-05-08T08:40:20.232-07:00</updated><title type='text'>Previo 8</title><content type='html'>Programa que crea 2 cubos, dos luces, utiliza textura y materiales&lt;br /&gt;&lt;br /&gt;#include GL/glut.h&lt;br /&gt;#include stdlib.h&lt;br /&gt;#include stdio.h&lt;br /&gt;#include math.h&lt;br /&gt;#include "bitmap.h"&lt;br /&gt;int Width;&lt;br /&gt;int Height;&lt;br /&gt;int bd,bi;&lt;br /&gt;BITMAPINFO *BitmapInfo;&lt;br /&gt;GLubyte *BitmapBits;&lt;br /&gt;char *nomimage;&lt;br /&gt;float xRot=0;&lt;br /&gt;float yRot=0;&lt;br /&gt;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;bd=0;&lt;br /&gt;bi=0;&lt;br /&gt;//glClearColor (0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glClear( GL_COLOR_BUFFER_BIT  GL_DEPTH_BUFFER_BIT);&lt;br /&gt;//glEnable(GL_DEPTH_TEST);&lt;br /&gt;glShadeModel (GL_SMOOTH);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;void carcatex(){&lt;br /&gt;BitmapBits = LoadDIBitmap(nomimage, &amp;BitmapInfo);&lt;br /&gt;glTexImage2D(GL_TEXTURE_2D,0,3,BitmapInfo-&gt;bmiHeader.biWidth,BitmapInfo-&gt;bmiHeader.biHeight,0,GL_RGB,GL_UNSIGNED_BYTE,BitmapBits);&lt;br /&gt;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);&lt;br /&gt;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);&lt;br /&gt;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);&lt;br /&gt;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);&lt;br /&gt;//glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_BLEND);&lt;br /&gt;glTexImage2D(GL_TEXTURE_2D, 0, 3, 128,128,0,GL_RGB,GL_UNSIGNED_BYTE,BitmapBits);&lt;br /&gt;}&lt;br /&gt;void cmaterial (x,y){&lt;br /&gt;float colorf[4]={0.0,0.4,0,1};&lt;br /&gt;float colora[4]={0.2,.4,1,1};&lt;br /&gt;float colord[4]={0.3,0,1,1};&lt;br /&gt;float colori[4]={0.5,.0,0,1};&lt;br /&gt;float colors[4]={0.5,.6,0,1};&lt;br /&gt;float colorin[4]={0.0,.6,0,1};&lt;br /&gt;glShadeModel(GL_SMOOTH);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glRotatef(45,0,1,1);&lt;br /&gt;glTranslatef(x,y,0);&lt;br /&gt;/* Caras transversales */&lt;br /&gt;nomimage="mountain.bmp";  //Nombre de la imagen&lt;br /&gt;carcatex();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_DIFFUSE, colord );&lt;br /&gt;glEnable(GL_TEXTURE_2D);&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;/* Vertical hacia atras */&lt;br /&gt;glTexCoord2f(0.0, 0.0);&lt;br /&gt;glVertex3f( 1, 0, 0 );&lt;br /&gt;glTexCoord2f(1.0, 0.0);&lt;br /&gt;glVertex3f( 0, 0, 0 );&lt;br /&gt;glTexCoord2f(1.0, 1.0);&lt;br /&gt;glVertex3f( 0, 1, 0 );&lt;br /&gt;glTexCoord2f(0.0, 1.0);&lt;br /&gt;glVertex3f( 1, 1, 0 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT,GL_SPECULAR, colori );&lt;br /&gt;nomimage="mountain1.bmp";&lt;br /&gt;carcatex();&lt;br /&gt;glEnable(GL_TEXTURE_2D);&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;/* Superior, horizontal */&lt;br /&gt;glTexCoord2f(0.0, 0.0);&lt;br /&gt;glVertex3f( 1, 1, 1 );&lt;br /&gt;glTexCoord2f(1.0, 0.0);&lt;br /&gt;glVertex3f( 0, 1, 1 );&lt;br /&gt;glTexCoord2f(1.0, 1.0);&lt;br /&gt;glVertex3f( 0, 1, 0 );&lt;br /&gt;glTexCoord2f(0.0, 1.0);&lt;br /&gt;glVertex3f( 1, 1, 0 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colorf );&lt;br /&gt;nomimage="mountain2.bmp";&lt;br /&gt;carcatex();&lt;br /&gt;glEnable(GL_TEXTURE_2D);&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;/*Vertical delantera*/&lt;br /&gt;glTexCoord2f(0.0, 0.0);&lt;br /&gt;glVertex3f( 1, 0, 1 );&lt;br /&gt;glTexCoord2f(1.0, 0.0);&lt;br /&gt;glVertex3f( 1, 0, 0 );&lt;br /&gt;glTexCoord2f(1.0, 1.0);&lt;br /&gt;glVertex3f( 1, 1, 0 );&lt;br /&gt;glTexCoord2f(0.0, 1.0);&lt;br /&gt;glVertex3f( 1, 1, 1 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_EMISSION, colorin );&lt;br /&gt;nomimage="mountain3.bmp";&lt;br /&gt;carcatex();&lt;br /&gt;glEnable(GL_TEXTURE_2D);&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;/*Inferior */&lt;br /&gt;glTexCoord2f(0.0, 0.0);&lt;br /&gt;glVertex3f( 0, 0, 1 );&lt;br /&gt;glTexCoord2f(1.0, 0.0);&lt;br /&gt;glVertex3f( 0, 0, 0 );&lt;br /&gt;glTexCoord2f(1.0, 1.0);&lt;br /&gt;glVertex3f( 0, 1, 0 );&lt;br /&gt;glTexCoord2f(0.0, 1.0);&lt;br /&gt;glVertex3f( 0, 1, 1 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colora );&lt;br /&gt;/* Costados */&lt;br /&gt;nomimage="mountain4.bmp";&lt;br /&gt;carcatex();&lt;br /&gt;glEnable(GL_TEXTURE_2D);&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;glTexCoord2f(0.0, 0.0);&lt;br /&gt;glVertex3f( 1, 0, 1 );&lt;br /&gt;glTexCoord2f(1.0, 0.0);&lt;br /&gt;glVertex3f( 1, 0, 0 );&lt;br /&gt;glTexCoord2f(1.0, 1.0);&lt;br /&gt;glVertex3f( 0, 0, 0 );&lt;br /&gt;glTexCoord2f(0.0, 1.0);&lt;br /&gt;glVertex3f( 0, 0, 1 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_AMBIENT, colors );&lt;br /&gt;nomimage="aide.bmp"; //fotografia&lt;br /&gt;carcatex();&lt;br /&gt;glEnable(GL_TEXTURE_2D);&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;glTexCoord2f(0.0f, 1.0f);&lt;br /&gt;glVertex3f( 1, 0, 1 );&lt;br /&gt;glTexCoord2f(1.0f, 1.0f);&lt;br /&gt;glVertex3f( 1, 1, 1 );&lt;br /&gt;glTexCoord2f(1.0f, 0.0f);&lt;br /&gt;glVertex3f( 0, 1, 1 );&lt;br /&gt;glTexCoord2f(0.0f, 0.0f);&lt;br /&gt;glVertex3f( 0, 0, 1 );&lt;br /&gt;glEnd();&lt;br /&gt;glPopMatrix();&lt;br /&gt;}&lt;br /&gt;void cmaterial1 (x,y){&lt;br /&gt;float colorf[4]={0.0,0.4,0,1};&lt;br /&gt;float colora[4]={0.2,.4,1,1};&lt;br /&gt;float colord[4]={0.3,0,1,1};&lt;br /&gt;float colori[4]={0.5,.0,0,1};&lt;br /&gt;float colors[4]={0.5,.6,0,1};&lt;br /&gt;float colorin[4]={0.0,.6,0,1};&lt;br /&gt;glShadeModel(GL_SMOOTH);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glRotatef(45,0,1,1);&lt;br /&gt;glTranslatef(x,y,0);&lt;br /&gt;/* Caras transversales */&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;/* Vertical hacia atras */&lt;br /&gt;glVertex3f( 1, 0, 0 );&lt;br /&gt;glVertex3f( 0, 0, 0 );&lt;br /&gt;glVertex3f( 0, 1, 0 );&lt;br /&gt;glVertex3f( 1, 1, 0 );&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;glMaterialfv(GL_FRONT,GL_SPECULAR, colori );&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;/* Superior, horizontal */&lt;br /&gt;glVertex3f( 1, 1, 1 );&lt;br /&gt;glVertex3f( 0, 1, 1 );&lt;br /&gt;glVertex3f( 0, 1, 0 );&lt;br /&gt;glVertex3f( 1, 1, 0 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colorf );&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;/*Vertical delantera*/&lt;br /&gt;glVertex3f( 1, 0, 1 );&lt;br /&gt;glVertex3f( 1, 0, 0 );&lt;br /&gt;glVertex3f( 1, 1, 0 );&lt;br /&gt;glVertex3f( 1, 1, 1 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_EMISSION, colorin );&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;/*Inferior */&lt;br /&gt;glVertex3f( 0, 0, 1 );&lt;br /&gt;glVertex3f( 0, 0, 0 );&lt;br /&gt;glVertex3f( 0, 1, 0 );&lt;br /&gt;glVertex3f( 0, 1, 1 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, colora );&lt;br /&gt;/* Costados */&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;glVertex3f( 1, 0, 1 );&lt;br /&gt;glVertex3f( 1, 0, 0 );&lt;br /&gt;glVertex3f( 0, 0, 0 );&lt;br /&gt;glVertex3f( 0, 0, 1 );&lt;br /&gt;glEnd();&lt;br /&gt;glMaterialfv(GL_FRONT, GL_AMBIENT, colors );&lt;br /&gt;glBegin( GL_QUADS );&lt;br /&gt;glVertex3f( 1, 0, 1 );&lt;br /&gt;glVertex3f( 1, 1, 1 );&lt;br /&gt;glVertex3f( 0, 1, 1 );&lt;br /&gt;glVertex3f( 0, 0, 1 );&lt;br /&gt;glEnd();&lt;br /&gt;glPopMatrix();&lt;br /&gt;}&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;GLfloat light_ambient[]={0.0, 0.0, 0.0, 1.0};&lt;br /&gt;GLfloat light_diffuse[]={1.0, 1.0, 1.0, 1.0};&lt;br /&gt;GLfloat light_specular[]={1.0, 1.0, 1.0, 1.0};&lt;br /&gt;GLfloat light_position[]={xRot, yRot, 1.0, 1.0};&lt;br /&gt;GLfloat light1_ambient[]={0.0, 0.0, 0.0, 1.0};&lt;br /&gt;GLfloat light1_diffuse[]={.5, .5, .5, .5};&lt;br /&gt;GLfloat light1_specular[]={.1, .1, .1, .1};&lt;br /&gt;GLfloat light1_position[]={1.0, 1.0, 10, 10.0};&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT);&lt;br /&gt;glColor3f (1.0, 1.0, 1.0);&lt;br /&gt;glLoadIdentity (); /* clear the matrix */&lt;br /&gt;gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);&lt;br /&gt;glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);&lt;br /&gt;glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);&lt;br /&gt;glLightfv(GL_LIGHT0, GL_POSITION, light_position);&lt;br /&gt;glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);&lt;br /&gt;glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);&lt;br /&gt;glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);&lt;br /&gt;glLightfv(GL_LIGHT1, GL_POSITION, light1_position);&lt;br /&gt;glEnable(GL_LIGHT0);&lt;br /&gt;glEnable(GL_LIGHT1);&lt;br /&gt;glEnable( GL_LIGHTING );&lt;br /&gt;if(bi==1){&lt;br /&gt;glDisable( GL_LIGHT0 );&lt;br /&gt;glEnable( GL_LIGHT1 );}&lt;br /&gt;if(bi==2){&lt;br /&gt;glEnable( GL_LIGHT0 );&lt;br /&gt;glDisable( GL_LIGHT1 );}&lt;br /&gt;cmaterial(-1,1);&lt;br /&gt;cmaterial1(-1,-1);&lt;br /&gt;glFlush ();&lt;br /&gt;}&lt;br /&gt;void reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, (GLsizei) w, (GLsizei) h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);&lt;br /&gt;glMatrixMode (GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;void onMouse(int button, int state, int x, int y)&lt;br /&gt;{&lt;br /&gt;int aux;&lt;br /&gt;if ( (button == GLUT_LEFT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;bi=1;&lt;br /&gt;}&lt;br /&gt;if ( (button == GLUT_RIGHT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;bi=2;&lt;br /&gt;}&lt;br /&gt;display();&lt;br /&gt;}&lt;br /&gt;void keyboard(int key, int x, int y)&lt;br /&gt;{&lt;br /&gt;if(key == GLUT_KEY_UP)&lt;br /&gt;xRot-= 0.2f;&lt;br /&gt;if(key == GLUT_KEY_DOWN)&lt;br /&gt;xRot += 0.2f;&lt;br /&gt;if(key == GLUT_KEY_LEFT)&lt;br /&gt;yRot -= 0.2f;&lt;br /&gt;if(key == GLUT_KEY_RIGHT)&lt;br /&gt;yRot += 0.2f;&lt;br /&gt;if(key &gt; 1.0f)&lt;br /&gt;xRot = 0.0f;&lt;br /&gt;if(key &lt; 0.0f)&lt;br /&gt;xRot = 1.0f;&lt;br /&gt;if(key &gt; 1.0f)&lt;br /&gt;yRot = 0.0f;&lt;br /&gt;if(key &lt; 0.0f)&lt;br /&gt;yRot = 1.0f;&lt;br /&gt;// Refresh the Window&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;}&lt;br /&gt;int main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;glutInit(&amp;argc, argv);&lt;br /&gt;glutInitDisplayMode (GLUT_SINGLE  GLUT_RGB);&lt;br /&gt;glutInitWindowSize (500, 500);&lt;br /&gt;glutInitWindowPosition (300,230);&lt;br /&gt;glutCreateWindow (argv[0]);&lt;br /&gt;init ();&lt;br /&gt;glutDisplayFunc(display);&lt;br /&gt;glutMouseFunc(onMouse);&lt;br /&gt;glutReshapeFunc(reshape);&lt;br /&gt;glutKeyboardFunc(keyboard);&lt;br /&gt;glutMainLoop();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;LIBRERIA AUXILIAR PARA CARGAR LA TEXTURA BITMAP.C&lt;br /&gt;&lt;br /&gt;#include "bitmap.h"&lt;br /&gt;#include stdio.h&lt;br /&gt;#include stdlib.h&lt;br /&gt;#include errno.h&lt;br /&gt;&lt;br /&gt;#ifdef WIN32&lt;br /&gt;GLubyte * /* O - Bitmap data */&lt;br /&gt;LoadDIBitmap(const char *filename, /* I - File to load */&lt;br /&gt;BITMAPINFO **info) /* O - Bitmap information */&lt;br /&gt;{&lt;br /&gt;FILE *fp; /* Open file pointer */&lt;br /&gt;GLubyte *bits; /* Bitmap pixel bits */&lt;br /&gt;int bitsize; /* Size of bitmap */&lt;br /&gt;int infosize; /* Size of header information */&lt;br /&gt;BITMAPFILEHEADER header; /* File header */&lt;br /&gt;&lt;br /&gt;/* Try opening the file; use "rb" mode to read this *binary* file. */&lt;br /&gt;if ((fp = fopen(filename, "rb")) == NULL)&lt;br /&gt;return (NULL);&lt;br /&gt;/* Read the file header and any following bitmap information... */&lt;br /&gt;if (fread(&amp;header, sizeof(BITMAPFILEHEADER), 1, fp) &lt; 1)&lt;br /&gt;{&lt;br /&gt;/* Couldn't read the file header - return NULL... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;if (header.bfType != 'MB') /* Check for BM reversed... */&lt;br /&gt;{&lt;br /&gt;/* Not a bitmap file - return NULL... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;infosize = header.bfOffBits - sizeof(BITMAPFILEHEADER);&lt;br /&gt;if ((*info = (BITMAPINFO *)malloc(infosize)) == NULL)&lt;br /&gt;{&lt;br /&gt;/* Couldn't allocate memory for bitmap info - return NULL... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;if (fread(*info, 1, infosize, fp) &lt; infosize)&lt;br /&gt;{&lt;br /&gt;/* Couldn't read the bitmap header - return NULL... */&lt;br /&gt;free(*info);&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;/* Now that we have all the header info read in, allocate memory for *&lt;br /&gt;* the bitmap and read *it* in... */&lt;br /&gt;if ((bitsize = (*info)-&gt;bmiHeader.biSizeImage) == 0)&lt;br /&gt;bitsize = ((*info)-&gt;bmiHeader.biWidth *&lt;br /&gt;(*info)-&gt;bmiHeader.biBitCount + 7) / 8 *&lt;br /&gt;abs((*info)-&gt;bmiHeader.biHeight);&lt;br /&gt;if ((bits = malloc(bitsize)) == NULL)&lt;br /&gt;{&lt;br /&gt;/* Couldn't allocate memory - return NULL! */&lt;br /&gt;free(*info);&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;if (fread(bits, 1, bitsize, fp) &lt; bitsize)&lt;br /&gt;{&lt;br /&gt;/* Couldn't read bitmap - free memory and return NULL! */&lt;br /&gt;free(*info);&lt;br /&gt;free(bits);&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;/* OK, everything went fine - return the allocated bitmap... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (bits);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'SaveDIBitmap()' - Save a DIB/BMP file to disk.&lt;br /&gt;*&lt;br /&gt;* Returns 0 on success or -1 on failure...&lt;br /&gt;*/&lt;br /&gt;int /* O - 0 = success, -1 = failure */&lt;br /&gt;SaveDIBitmap(const char *filename, /* I - File to load */&lt;br /&gt;BITMAPINFO *info, /* I - Bitmap information */&lt;br /&gt;GLubyte *bits) /* I - Bitmap data */&lt;br /&gt;{&lt;br /&gt;FILE *fp; /* Open file pointer */&lt;br /&gt;int size, /* Size of file */&lt;br /&gt;infosize, /* Size of bitmap info */&lt;br /&gt;bitsize; /* Size of bitmap pixels */&lt;br /&gt;BITMAPFILEHEADER header; /* File header */&lt;br /&gt;&lt;br /&gt;/* Try opening the file; use "wb" mode to write this *binary* file. */&lt;br /&gt;if ((fp = fopen(filename, "wb")) == NULL)&lt;br /&gt;return (-1);&lt;br /&gt;/* Figure out the bitmap size */&lt;br /&gt;if (info-&gt;bmiHeader.biSizeImage == 0)&lt;br /&gt;bitsize = (info-&gt;bmiHeader.biWidth *&lt;br /&gt;info-&gt;bmiHeader.biBitCount + 7) / 8 *&lt;br /&gt;abs(info-&gt;bmiHeader.biHeight);&lt;br /&gt;else&lt;br /&gt;bitsize = info-&gt;bmiHeader.biSizeImage;&lt;br /&gt;/* Figure out the header size */&lt;br /&gt;infosize = sizeof(BITMAPINFOHEADER);&lt;br /&gt;switch (info-&gt;bmiHeader.biCompression)&lt;br /&gt;{&lt;br /&gt;case BI_BITFIELDS :&lt;br /&gt;infosize += 12; /* Add 3 RGB doubleword masks */&lt;br /&gt;if (info-&gt;bmiHeader.biClrUsed == 0)&lt;br /&gt;break;&lt;br /&gt;case BI_RGB :&lt;br /&gt;if (info-&gt;bmiHeader.biBitCount &gt; 8 &amp;&amp;amp;&lt;br /&gt;info-&gt;bmiHeader.biClrUsed == 0)&lt;br /&gt;break;&lt;br /&gt;case BI_RLE8 :&lt;br /&gt;case BI_RLE4 :&lt;br /&gt;if (info-&gt;bmiHeader.biClrUsed == 0)&lt;br /&gt;infosize += (1 &lt;&lt;&gt;bmiHeader.biBitCount) * 4;&lt;br /&gt;else&lt;br /&gt;infosize += info-&gt;bmiHeader.biClrUsed * 4;&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;size = sizeof(BITMAPFILEHEADER) + infosize + bitsize;&lt;br /&gt;/* Write the file header, bitmap information, and bitmap pixel data... */&lt;br /&gt;header.bfType = 'MB'; /* Non-portable... sigh */&lt;br /&gt;header.bfSize = size;&lt;br /&gt;header.bfReserved1 = 0;&lt;br /&gt;header.bfReserved2 = 0;&lt;br /&gt;header.bfOffBits = sizeof(BITMAPFILEHEADER) + infosize;&lt;br /&gt;if (fwrite(&amp;header, 1, sizeof(BITMAPFILEHEADER), fp) &lt; sizeof(BITMAPFILEHEADER))&lt;br /&gt;{&lt;br /&gt;/* Couldn't write the file header - return... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (-1);&lt;br /&gt;}&lt;br /&gt;if (fwrite(info, 1, infosize, fp) &lt; infosize)&lt;br /&gt;{&lt;br /&gt;/* Couldn't write the bitmap header - return... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (-1);&lt;br /&gt;}&lt;br /&gt;if (fwrite(bits, 1, bitsize, fp) &lt; bitsize)&lt;br /&gt;{&lt;br /&gt;/* Couldn't write the bitmap - return... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (-1);&lt;br /&gt;}&lt;br /&gt;/* OK, everything went fine - return... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#else /* !WIN32 */&lt;br /&gt;/*&lt;br /&gt;* Functions for reading and writing 16- and 32-bit little-endian integers.&lt;br /&gt;*/&lt;br /&gt;static unsigned short read_word(FILE *fp);&lt;br /&gt;static unsigned int read_dword(FILE *fp);&lt;br /&gt;static int read_long(FILE *fp);&lt;br /&gt;static int write_word(FILE *fp, unsigned short w);&lt;br /&gt;static int write_dword(FILE *fp, unsigned int dw);&lt;br /&gt;static int write_long(FILE *fp, int l);&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'LoadDIBitmap()' - Load a DIB/BMP file from disk.&lt;br /&gt;*&lt;br /&gt;* Returns a pointer to the bitmap if successful, NULL otherwise...&lt;br /&gt;*/&lt;br /&gt;GLubyte * /* O - Bitmap data */&lt;br /&gt;LoadDIBitmap(const char *filename, /* I - File to load */&lt;br /&gt;BITMAPINFO **info) /* O - Bitmap information */&lt;br /&gt;{&lt;br /&gt;FILE *fp; /* Open file pointer */&lt;br /&gt;GLubyte *bits; /* Bitmap pixel bits */&lt;br /&gt;GLubyte *ptr; /* Pointer into bitmap */&lt;br /&gt;GLubyte temp; /* Temporary variable to swap red and blue */&lt;br /&gt;int x, y; /* X and Y position in image */&lt;br /&gt;int length; /* Line length */&lt;br /&gt;int bitsize; /* Size of bitmap */&lt;br /&gt;int infosize; /* Size of header information */&lt;br /&gt;BITMAPFILEHEADER header; /* File header */&lt;br /&gt;&lt;br /&gt;/* Try opening the file; use "rb" mode to read this *binary* file. */&lt;br /&gt;if ((fp = fopen(filename, "rb")) == NULL)&lt;br /&gt;return (NULL);&lt;br /&gt;/* Read the file header and any following bitmap information... */&lt;br /&gt;header.bfType = read_word(fp);&lt;br /&gt;header.bfSize = read_dword(fp);&lt;br /&gt;header.bfReserved1 = read_word(fp);&lt;br /&gt;header.bfReserved2 = read_word(fp);&lt;br /&gt;header.bfOffBits = read_dword(fp);&lt;br /&gt;if (header.bfType != BF_TYPE) /* Check for BM reversed... */&lt;br /&gt;{&lt;br /&gt;/* Not a bitmap file - return NULL... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;infosize = header.bfOffBits - 18;&lt;br /&gt;if ((*info = (BITMAPINFO *)malloc(sizeof(BITMAPINFO))) == NULL)&lt;br /&gt;{&lt;br /&gt;/* Couldn't allocate memory for bitmap info - return NULL... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;(*info)-&gt;bmiHeader.biSize = read_dword(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biWidth = read_long(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biHeight = read_long(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biPlanes = read_word(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biBitCount = read_word(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biCompression = read_dword(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biSizeImage = read_dword(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biXPelsPerMeter = read_long(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biYPelsPerMeter = read_long(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biClrUsed = read_dword(fp);&lt;br /&gt;(*info)-&gt;bmiHeader.biClrImportant = read_dword(fp);&lt;br /&gt;if (infosize &gt; 40)&lt;br /&gt;if (fread((*info)-&gt;bmiColors, infosize - 40, 1, fp) &lt; 1)&lt;br /&gt;{&lt;br /&gt;/* Couldn't read the bitmap header - return NULL... */&lt;br /&gt;free(*info);&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;/* Now that we have all the header info read in, allocate memory for *&lt;br /&gt;* the bitmap and read *it* in... */&lt;br /&gt;if ((bitsize = (*info)-&gt;bmiHeader.biSizeImage) == 0)&lt;br /&gt;bitsize = ((*info)-&gt;bmiHeader.biWidth *&lt;br /&gt;(*info)-&gt;bmiHeader.biBitCount + 7) / 8 *&lt;br /&gt;abs((*info)-&gt;bmiHeader.biHeight);&lt;br /&gt;if ((bits = malloc(bitsize)) == NULL)&lt;br /&gt;{&lt;br /&gt;/* Couldn't allocate memory - return NULL! */&lt;br /&gt;free(*info);&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;if (fread(bits, 1, bitsize, fp) &lt; bitsize)&lt;br /&gt;{&lt;br /&gt;/* Couldn't read bitmap - free memory and return NULL! */&lt;br /&gt;free(*info);&lt;br /&gt;free(bits);&lt;br /&gt;fclose(fp);&lt;br /&gt;return (NULL);&lt;br /&gt;}&lt;br /&gt;/* Swap red and blue */&lt;br /&gt;length = ((*info)-&gt;bmiHeader.biWidth * 3 + 3) &amp; ~3;&lt;br /&gt;for (y = 0; y &lt; (*info)-&gt;bmiHeader.biHeight; y ++)&lt;br /&gt;for (ptr = bits + y * length, x = (*info)-&gt;bmiHeader.biWidth;&lt;br /&gt;x &gt; 0;&lt;br /&gt;x --, ptr += 3)&lt;br /&gt;{&lt;br /&gt;temp = ptr[0];&lt;br /&gt;ptr[0] = ptr[2];&lt;br /&gt;ptr[2] = temp;&lt;br /&gt;}&lt;br /&gt;/* OK, everything went fine - return the allocated bitmap... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (bits);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'SaveDIBitmap()' - Save a DIB/BMP file to disk.&lt;br /&gt;*&lt;br /&gt;* Returns 0 on success or -1 on failure...&lt;br /&gt;*/&lt;br /&gt;int /* O - 0 = success, -1 = failure */&lt;br /&gt;SaveDIBitmap(const char *filename, /* I - File to load */&lt;br /&gt;BITMAPINFO *info, /* I - Bitmap information */&lt;br /&gt;GLubyte *bits) /* I - Bitmap data */&lt;br /&gt;{&lt;br /&gt;FILE *fp; /* Open file pointer */&lt;br /&gt;int size, /* Size of file */&lt;br /&gt;infosize, /* Size of bitmap info */&lt;br /&gt;bitsize; /* Size of bitmap pixels */&lt;br /&gt;&lt;br /&gt;/* Try opening the file; use "wb" mode to write this *binary* file. */&lt;br /&gt;if ((fp = fopen(filename, "wb")) == NULL)&lt;br /&gt;return (-1);&lt;br /&gt;/* Figure out the bitmap size */&lt;br /&gt;if (info-&gt;bmiHeader.biSizeImage == 0)&lt;br /&gt;bitsize = (info-&gt;bmiHeader.biWidth *&lt;br /&gt;info-&gt;bmiHeader.biBitCount + 7) / 8 *&lt;br /&gt;abs(info-&gt;bmiHeader.biHeight);&lt;br /&gt;else&lt;br /&gt;bitsize = info-&gt;bmiHeader.biSizeImage;&lt;br /&gt;/* Figure out the header size */&lt;br /&gt;infosize = sizeof(BITMAPINFOHEADER);&lt;br /&gt;switch (info-&gt;bmiHeader.biCompression)&lt;br /&gt;{&lt;br /&gt;case BI_BITFIELDS :&lt;br /&gt;infosize += 12; /* Add 3 RGB doubleword masks */&lt;br /&gt;if (info-&gt;bmiHeader.biClrUsed == 0)&lt;br /&gt;break;&lt;br /&gt;case BI_RGB :&lt;br /&gt;if (info-&gt;bmiHeader.biBitCount &gt; 8 &amp;&amp;amp;&lt;br /&gt;info-&gt;bmiHeader.biClrUsed == 0)&lt;br /&gt;break;&lt;br /&gt;case BI_RLE8 :&lt;br /&gt;case BI_RLE4 :&lt;br /&gt;if (info-&gt;bmiHeader.biClrUsed == 0)&lt;br /&gt;infosize += (1 &lt;&lt;&gt;bmiHeader.biBitCount) * 4;&lt;br /&gt;else&lt;br /&gt;infosize += info-&gt;bmiHeader.biClrUsed * 4;&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;size = sizeof(BITMAPFILEHEADER) + infosize + bitsize;&lt;br /&gt;/* Write the file header, bitmap information, and bitmap pixel data... */&lt;br /&gt;write_word(fp, BF_TYPE); /* bfType */&lt;br /&gt;write_dword(fp, size); /* bfSize */&lt;br /&gt;write_word(fp, 0); /* bfReserved1 */&lt;br /&gt;write_word(fp, 0); /* bfReserved2 */&lt;br /&gt;write_dword(fp, 18 + infosize); /* bfOffBits */&lt;br /&gt;write_dword(fp, info-&gt;bmiHeader.biSize);&lt;br /&gt;write_long(fp, info-&gt;bmiHeader.biWidth);&lt;br /&gt;write_long(fp, info-&gt;bmiHeader.biHeight);&lt;br /&gt;write_word(fp, info-&gt;bmiHeader.biPlanes);&lt;br /&gt;write_word(fp, info-&gt;bmiHeader.biBitCount);&lt;br /&gt;write_dword(fp, info-&gt;bmiHeader.biCompression);&lt;br /&gt;write_dword(fp, info-&gt;bmiHeader.biSizeImage);&lt;br /&gt;write_long(fp, info-&gt;bmiHeader.biXPelsPerMeter);&lt;br /&gt;write_long(fp, info-&gt;bmiHeader.biYPelsPerMeter);&lt;br /&gt;write_dword(fp, info-&gt;bmiHeader.biClrUsed);&lt;br /&gt;write_dword(fp, info-&gt;bmiHeader.biClrImportant);&lt;br /&gt;if (infosize &gt; 40)&lt;br /&gt;if (fwrite(info-&gt;bmiColors, infosize - 40, 1, fp) &lt; 1)&lt;br /&gt;{&lt;br /&gt;/* Couldn't write the bitmap header - return... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (-1);&lt;br /&gt;}&lt;br /&gt;if (fwrite(bits, 1, bitsize, fp) &lt; bitsize)&lt;br /&gt;{&lt;br /&gt;/* Couldn't write the bitmap - return... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (-1);&lt;br /&gt;}&lt;br /&gt;/* OK, everything went fine - return... */&lt;br /&gt;fclose(fp);&lt;br /&gt;return (0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'read_word()' - Read a 16-bit unsigned integer.&lt;br /&gt;*/&lt;br /&gt;static unsigned short /* O - 16-bit unsigned integer */&lt;br /&gt;read_word(FILE *fp) /* I - File to read from */&lt;br /&gt;{&lt;br /&gt;unsigned char b0, b1; /* Bytes from file */&lt;br /&gt;b0 = getc(fp);&lt;br /&gt;b1 = getc(fp);&lt;br /&gt;return ((b1 &lt;&lt; 8)  b0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'read_dword()' - Read a 32-bit unsigned integer.&lt;br /&gt;*/&lt;br /&gt;static unsigned int /* O - 32-bit unsigned integer */&lt;br /&gt;read_dword(FILE *fp) /* I - File to read from */&lt;br /&gt;{&lt;br /&gt;unsigned char b0, b1, b2, b3; /* Bytes from file */&lt;br /&gt;b0 = getc(fp);&lt;br /&gt;b1 = getc(fp);&lt;br /&gt;b2 = getc(fp);&lt;br /&gt;b3 = getc(fp);&lt;br /&gt;return ((((((b3 &lt;&lt; 8)  b2) &lt;&lt; 8)  b1) &lt;&lt; 8)  b0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'read_long()' - Read a 32-bit signed integer.&lt;br /&gt;*/&lt;br /&gt;static int /* O - 32-bit signed integer */&lt;br /&gt;read_long(FILE *fp) /* I - File to read from */&lt;br /&gt;{&lt;br /&gt;unsigned char b0, b1, b2, b3; /* Bytes from file */&lt;br /&gt;b0 = getc(fp);&lt;br /&gt;b1 = getc(fp);&lt;br /&gt;b2 = getc(fp);&lt;br /&gt;b3 = getc(fp);&lt;br /&gt;return ((int)(((((b3 &lt;&lt; 8)  b2) &lt;&lt; 8)  b1) &lt;&lt; 8)  b0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'write_word()' - Write a 16-bit unsigned integer.&lt;br /&gt;*/&lt;br /&gt;static int /* O - 0 on success, -1 on error */&lt;br /&gt;write_word(FILE *fp, /* I - File to write to */&lt;br /&gt;unsigned short w) /* I - Integer to write */&lt;br /&gt;{&lt;br /&gt;putc(w, fp);&lt;br /&gt;return (putc(w &gt;&gt; 8, fp));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'write_dword()' - Write a 32-bit unsigned integer.&lt;br /&gt;*/&lt;br /&gt;static int /* O - 0 on success, -1 on error */&lt;br /&gt;write_dword(FILE *fp, /* I - File to write to */&lt;br /&gt;unsigned int dw) /* I - Integer to write */&lt;br /&gt;{&lt;br /&gt;putc(dw, fp);&lt;br /&gt;putc(dw &gt;&gt; 8, fp);&lt;br /&gt;putc(dw &gt;&gt; 16, fp);&lt;br /&gt;return (putc(dw &gt;&gt; 24, fp));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* 'write_long()' - Write a 32-bit signed integer.&lt;br /&gt;*/&lt;br /&gt;static int /* O - 0 on success, -1 on error */&lt;br /&gt;write_long(FILE *fp, /* I - File to write to */&lt;br /&gt;int l) /* I - Integer to write */&lt;br /&gt;{&lt;br /&gt;putc(l, fp);&lt;br /&gt;putc(l &gt;&gt; 8, fp);&lt;br /&gt;putc(l &gt;&gt; 16, fp);&lt;br /&gt;return (putc(l &gt;&gt; 24, fp));&lt;br /&gt;}&lt;br /&gt;#endif /* WIN32 */&lt;br /&gt;&lt;br /&gt;LIBRERIA AUXILIAR BITMAP.H&lt;br /&gt;#ifndef _BITMAP_H_&lt;br /&gt;# define _BITMAP_H_&lt;br /&gt;/*&lt;br /&gt;* Include necessary headers.&lt;br /&gt;*/&lt;br /&gt;# include &lt;gl/glut.h&gt;&lt;br /&gt;# ifdef WIN32&lt;br /&gt;# include &lt;windows.h&gt;&lt;br /&gt;# include &lt;wingdi.h&gt;&lt;br /&gt;# endif /* WIN32 */&lt;br /&gt;/*&lt;br /&gt;* Make this header file work with C and C++ source code...&lt;br /&gt;*/&lt;br /&gt;# ifdef __cplusplus&lt;br /&gt;extern "C" {&lt;br /&gt;# endif /* __cplusplus */&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;* Bitmap file data structures (these are defined in &lt;wingdi.h&gt; under&lt;br /&gt;* Windows...)&lt;br /&gt;*&lt;br /&gt;* Note that most Windows compilers will pack the following structures, so&lt;br /&gt;* when reading them under MacOS or UNIX we need to read individual fields&lt;br /&gt;* to avoid differences in alignment...&lt;br /&gt;*/&lt;br /&gt;# ifndef WIN32&lt;br /&gt;typedef struct /**** BMP file header structure ****/&lt;br /&gt;{&lt;br /&gt;unsigned short bfType; /* Magic number for file */&lt;br /&gt;unsigned int bfSize; /* Size of file */&lt;br /&gt;unsigned short bfReserved1; /* Reserved */&lt;br /&gt;unsigned short bfReserved2; /* ... */&lt;br /&gt;unsigned int bfOffBits; /* Offset to bitmap data */&lt;br /&gt;} BITMAPFILEHEADER;&lt;br /&gt;# define BF_TYPE 0x4D42 /* "MB" */&lt;br /&gt;typedef struct /**** BMP file info structure ****/&lt;br /&gt;{&lt;br /&gt;unsigned int biSize; /* Size of info header */&lt;br /&gt;int biWidth; /* Width of image */&lt;br /&gt;int biHeight; /* Height of image */&lt;br /&gt;unsigned short biPlanes; /* Number of color planes */&lt;br /&gt;unsigned short biBitCount; /* Number of bits per pixel */&lt;br /&gt;unsigned int biCompression; /* Type of compression to use */&lt;br /&gt;unsigned int biSizeImage; /* Size of image data */&lt;br /&gt;int biXPelsPerMeter; /* X pixels per meter */&lt;br /&gt;int biYPelsPerMeter; /* Y pixels per meter */&lt;br /&gt;unsigned int biClrUsed; /* Number of colors used */&lt;br /&gt;unsigned int biClrImportant; /* Number of important colors */&lt;br /&gt;} BITMAPINFOHEADER;&lt;br /&gt;/*&lt;br /&gt;* Constants for the biCompression field...&lt;br /&gt;*/&lt;br /&gt;# define BI_RGB 0 /* No compression - straight BGR data */&lt;br /&gt;# define BI_RLE8 1 /* 8-bit run-length compression */&lt;br /&gt;# define BI_RLE4 2 /* 4-bit run-length compression */&lt;br /&gt;# define BI_BITFIELDS 3 /* RGB bitmap with RGB masks */&lt;br /&gt;typedef struct /**** Colormap entry structure ****/&lt;br /&gt;{&lt;br /&gt;unsigned char rgbBlue; /* Blue value */&lt;br /&gt;unsigned char rgbGreen; /* Green value */&lt;br /&gt;unsigned char rgbRed; /* Red value */&lt;br /&gt;unsigned char rgbReserved; /* Reserved */&lt;br /&gt;} RGBQUAD;&lt;br /&gt;typedef struct /**** Bitmap information structure ****/&lt;br /&gt;{&lt;br /&gt;BITMAPINFOHEADER bmiHeader; /* Image header */&lt;br /&gt;RGBQUAD bmiColors[256]; /* Image colormap */&lt;br /&gt;} BITMAPINFO;&lt;br /&gt;# endif /* !WIN32 */&lt;br /&gt;/*&lt;br /&gt;* Prototypes...&lt;br /&gt;*/&lt;br /&gt;extern GLubyte *LoadDIBitmap(const char *filename, BITMAPINFO **info);&lt;br /&gt;extern int SaveDIBitmap(const char *filename, BITMAPINFO *info,&lt;br /&gt;GLubyte *bits);&lt;br /&gt;# ifdef __cplusplus&lt;br /&gt;}&lt;br /&gt;# endif /* __cplusplus */&lt;br /&gt;#endif /* !_BITMAP_H_ */&lt;br /&gt;&lt;br /&gt;Nota: Para observar el texturizado es necesario tener las imagenes&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-3971350336321332590?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/3971350336321332590/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=3971350336321332590' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/3971350336321332590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/3971350336321332590'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/05/previo-8.html' title='Previo 8'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-5730451686408920661</id><published>2007-05-02T11:39:00.000-07:00</published><updated>2007-05-02T11:41:41.052-07:00</updated><title type='text'>Componentes de la Iluminacion Especular</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_mYG88_6hQGg/RjjbMfTE0VI/AAAAAAAAADQ/CXmK9y-YY7I/s1600-h/Especular1.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5060035188957172050" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_mYG88_6hQGg/RjjbMfTE0VI/AAAAAAAAADQ/CXmK9y-YY7I/s320/Especular1.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-5730451686408920661?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/5730451686408920661/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=5730451686408920661' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5730451686408920661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5730451686408920661'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/05/componentes-de-la-iluminacion-especular.html' title='Componentes de la Iluminacion Especular'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mYG88_6hQGg/RjjbMfTE0VI/AAAAAAAAADQ/CXmK9y-YY7I/s72-c/Especular1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-7201962558108811291</id><published>2007-04-16T14:54:00.000-07:00</published><updated>2007-04-16T15:01:08.190-07:00</updated><title type='text'>Previo Practica 7</title><content type='html'>#include string.h&lt;br /&gt;#include stdio.h&lt;br /&gt;#include GL/glut.h&lt;br /&gt;#include GL/gl.h&lt;br /&gt;#include windows.h&lt;br /&gt;#include math.h&lt;br /&gt;#include stdarg.h&lt;br /&gt;#include malloc.h&lt;br /&gt;/* Windows parameters */&lt;br /&gt;#define WIDTH 600&lt;br /&gt;#define HEIGHT 600&lt;br /&gt;#define TITLE "GLUT Demo: Using Subwindows"&lt;br /&gt;void conv(void);&lt;br /&gt;void onMouse(int button, int state, int x, int y);&lt;br /&gt;void mano(void);&lt;br /&gt;void Humanoide(void);&lt;br /&gt;void Movimiento(void);&lt;br /&gt;void onMouse2(int button, int state, int x, int y);&lt;br /&gt;void onMotion2(int x, int y) ;&lt;br /&gt;void onMotion(int x, int y);&lt;br /&gt;void idle2(void);&lt;br /&gt;int winIdMain;&lt;br /&gt;int winIdSub;&lt;br /&gt;int xo,im,yo,alpha,beta,ven,ven2,inif,aux;&lt;br /&gt;int winIdSub2;&lt;br /&gt;float xf,yf;&lt;br /&gt;char xm[3]="000";&lt;br /&gt;char ym[3]="000";&lt;br /&gt;float r1,r2,r3,r4,r5,r6,rmu1,xmu,ymu,zmu,zp,xp;&lt;br /&gt;float r7,r8,r9,r10,r11,r12,r13,r14,r15;&lt;br /&gt;float x,y,z,brazod, brazoi, pied, piei;&lt;br /&gt;int k=0;&lt;br /&gt;xf=150;&lt;br /&gt;yf=200;&lt;br /&gt;ven=0;&lt;br /&gt;ven2=0;&lt;br /&gt;inif=0;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT  GL_DEPTH_BUFFER_BIT);&lt;br /&gt;}&lt;br /&gt;void text(GLuint x, GLuint y, GLfloat scale,char *format,char *format2) { //Funcion que escribe texto&lt;br /&gt;va_list args;&lt;br /&gt;char buffer[255], *p;&lt;br /&gt;GLfloat font_scale = 119.05f + 33.33f;&lt;br /&gt;va_start(args, format);&lt;br /&gt;vsprintf(buffer, format, args);&lt;br /&gt;va_end(args);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluOrtho2D(0, glutGet(GLUT_WINDOW_WIDTH), 0,&lt;br /&gt;glutGet(GLUT_WINDOW_HEIGHT));&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;glPushAttrib(GL_ENABLE_BIT);&lt;br /&gt;glDisable(GL_LIGHTING);&lt;br /&gt;glDisable(GL_TEXTURE_2D);&lt;br /&gt;glDisable(GL_DEPTH_TEST);&lt;br /&gt;glTranslatef(x, y, 0.0);&lt;br /&gt;glScalef(scale/font_scale, scale/font_scale, scale/font_scale);&lt;br /&gt;//len = (int) strlen(format);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, 40);&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, 44);&lt;br /&gt;va_start(args, format2);&lt;br /&gt;vsprintf(buffer, format2, args);&lt;br /&gt;va_end(args);&lt;br /&gt;//len = (int) strlen(format2);&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, 41);&lt;br /&gt;glPopAttrib();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;void fractal(void){ //Funcion que calcula el fractal&lt;br /&gt;int ran;&lt;br /&gt;ran = rand()%4;&lt;br /&gt;if(ran==1){&lt;br /&gt;xf=(50+xf)/2;&lt;br /&gt;yf=(200+yf)/2;&lt;br /&gt;}&lt;br /&gt;if(ran==2){&lt;br /&gt;xf=(250+xf)/2;&lt;br /&gt;yf=(200+yf)/2;&lt;br /&gt;}&lt;br /&gt;if(ran==3){&lt;br /&gt;xf=(150+xf)/2;&lt;br /&gt;yf=(50+yf)/2;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void pinta(void){  //Funcion que pinta fractal&lt;br /&gt;int xe,ze;&lt;br /&gt;float x2,y2;&lt;br /&gt;glColor3f(1.0,1.0,0.0);&lt;br /&gt;glBegin(GL_POINTS);&lt;br /&gt;glVertex3f(50.0f,200.0f,0.0f);&lt;br /&gt;glVertex3f(250.0f,200.0f,0.0f);&lt;br /&gt;glVertex3f(150.0f,50.0f,0.0f);&lt;br /&gt;glEnd();&lt;br /&gt;if(k==0){&lt;br /&gt;glBegin(GL_POINTS);&lt;br /&gt;glVertex3f(xf,yf,0);&lt;br /&gt;glEnd();&lt;br /&gt;k=1;&lt;br /&gt;}&lt;br /&gt;fractal();&lt;br /&gt;glBegin(GL_POINTS);&lt;br /&gt;glVertex3f(xf,yf,0);&lt;br /&gt;glEnd();&lt;br /&gt;}&lt;br /&gt;void Display (void)   //Funcion que muestra panatalla principal&lt;br /&gt;{&lt;br /&gt;/* Clean drawing board */&lt;br /&gt;glutSetWindow(winIdMain);&lt;br /&gt;//glLoadIdentity ();&lt;br /&gt;pinta();&lt;br /&gt;glFlush();&lt;br /&gt;}&lt;br /&gt;/* Another display function, this one will be&lt;br /&gt;used to update the graphic subwindow */&lt;br /&gt;void subDisplay (){       //Funcion que muestra contenido de las subventanas&lt;br /&gt;/* Clear subwindow */&lt;br /&gt;if(im==1){&lt;br /&gt;glutSetWindow (winIdSub);&lt;br /&gt;glutSetCursor (GLUT_CURSOR_CYCLE);&lt;br /&gt;glutPositionWindow (20, 20);&lt;br /&gt;glClearColor (0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT  GL_DEPTH_BUFFER_BIT);&lt;br /&gt;itoa(xo,xm,10);&lt;br /&gt;itoa(yo,ym,10);&lt;br /&gt;glColor3f(1.0,1.,0.0) ;&lt;br /&gt;glutPassiveMotionFunc(onMotion2);&lt;br /&gt;text(xo,(500-yo),20,xm,ym);&lt;br /&gt;}&lt;br /&gt;if(im==2){&lt;br /&gt;glutSetWindow (winIdSub2);&lt;br /&gt;glutSetCursor (GLUT_CURSOR_SPRAY);&lt;br /&gt;glutPositionWindow (100, 100);&lt;br /&gt;glClearColor (1.0, 0.0,0.0, 0.0);&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT  GL_DEPTH_BUFFER_BIT);&lt;br /&gt;glColor3f(1.0,1.0,0.0);&lt;br /&gt;glutMouseFunc(onMouse2);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glScalef(0.2,.2,.2);&lt;br /&gt;//glTranslatef(0,0,0.0f);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glScalef(0.4,2.4,2.0);&lt;br /&gt;glTranslatef(-21,2.75f,0.0f);&lt;br /&gt;glRotatef(90,0,0,1);&lt;br /&gt;mano( );&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glScalef(0.4,2.4,2.0);&lt;br /&gt;glTranslatef(21,2.75f,0.0f);&lt;br /&gt;glRotatef(-90,0,0,1);&lt;br /&gt;mano();&lt;br /&gt;glPopMatrix();&lt;br /&gt;Humanoide();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glutSwapBuffers ();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;/* Callback function for reshaping the main window */&lt;br /&gt;void Reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport(0, 0, w, h);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluOrtho2D(0, w, h, 0);&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;/* Callback function for reshaping the subwindow */&lt;br /&gt;void subReshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, w, h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;gluOrtho2D (0.0F, 1.0F, 0.0F, 1.0F);&lt;br /&gt;}&lt;br /&gt;void idle2(void)  //maneja a la subventana&lt;br /&gt;{&lt;br /&gt;Movimiento();&lt;br /&gt;subDisplay();&lt;br /&gt;}&lt;br /&gt;void idle (void) //maneja ventana principal&lt;br /&gt;{&lt;br /&gt;glutSetWindow (winIdMain);&lt;br /&gt;glutPostRedisplay ();&lt;br /&gt;glutSetWindow (winIdSub);&lt;br /&gt;glutPostRedisplay ();&lt;br /&gt;glutSetWindow (winIdSub2);&lt;br /&gt;glutPostRedisplay ();&lt;br /&gt;}&lt;br /&gt;void onMouse(int button, int state, int x, int y) //Funcion de mouse ventana principal&lt;br /&gt;{&lt;br /&gt;if ( (button == GLUT_LEFT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;if(ven2==1){&lt;br /&gt;ven2=0;&lt;br /&gt;glutDestroyWindow (winIdSub2);&lt;br /&gt;goto yy;&lt;br /&gt;}&lt;br /&gt;if(ven==0){&lt;br /&gt;winIdSub = glutCreateSubWindow (winIdMain, 500,500, 500 , 500);&lt;br /&gt;glutMouseFunc(onMouse);&lt;br /&gt;im=1;&lt;br /&gt;glutDisplayFunc (subDisplay);&lt;br /&gt;ven=1;&lt;br /&gt;xo=x;&lt;br /&gt;yo=y;&lt;br /&gt;}&lt;br /&gt;else ven=1;&lt;br /&gt;yy: aux=0;&lt;br /&gt;}&lt;br /&gt;if ( (button == GLUT_RIGHT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;if(ven==1){&lt;br /&gt;ven=0;&lt;br /&gt;glutDestroyWindow(winIdSub);&lt;br /&gt;goto xx;&lt;br /&gt;}&lt;br /&gt;if(ven2==0){&lt;br /&gt;winIdSub2 = glutCreateSubWindow (winIdMain, 500,500, 500 , 500);&lt;br /&gt;glutMouseFunc(onMouse2);&lt;br /&gt;im=2;&lt;br /&gt;glutDisplayFunc (subDisplay);&lt;br /&gt;glutIdleFunc (idle2);&lt;br /&gt;ven2=1;&lt;br /&gt;xo=x;&lt;br /&gt;yo=y;&lt;br /&gt;}&lt;br /&gt;else ven2=1;&lt;br /&gt;}&lt;br /&gt;xx: aux=1;&lt;br /&gt;}&lt;br /&gt;void onMouse2(int button, int state, int x, int y) //Funcion mouse subventana&lt;br /&gt;{&lt;br /&gt;if ( (button == GLUT_LEFT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;if(ven2==1){&lt;br /&gt;ven2=0;&lt;br /&gt;glutSetWindow (winIdMain);&lt;br /&gt;main();&lt;br /&gt;glutDestroyWindow (winIdSub2);&lt;br /&gt;goto yy;&lt;br /&gt;}&lt;br /&gt;if(ven==0){&lt;br /&gt;winIdSub = glutCreateSubWindow (winIdMain, 500,500, 500 , 500);&lt;br /&gt;glutMouseFunc(onMouse);&lt;br /&gt;im=1;&lt;br /&gt;glutDisplayFunc (subDisplay);&lt;br /&gt;ven=1;&lt;br /&gt;xo=x;&lt;br /&gt;yo=y;&lt;br /&gt;}&lt;br /&gt;else ven=1;&lt;br /&gt;yy: aux=0;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void onMotion(int x, int y) { //Funcion de movimiento del mouse ventana principal&lt;br /&gt;alpha = (alpha + (y - yo));&lt;br /&gt;beta = (beta + (x - xo));&lt;br /&gt;xo = x; yo = y;&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;}&lt;br /&gt;void onMotion2(int x, int y) { //Funcion de movimiento del mouse subventana&lt;br /&gt;alpha = (alpha + (y - yo));&lt;br /&gt;beta = (beta + (x - xo));&lt;br /&gt;xo = x; yo = y;&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;}&lt;br /&gt;void keyboard(unsigned char key, int x, int y) //Evento de teclado&lt;br /&gt;{&lt;br /&gt;switch (key) {&lt;br /&gt;case 27:&lt;br /&gt;exit(0);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;int main (int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;/* Glut initializations */&lt;br /&gt;glutInit (&amp;argc, argv);&lt;br /&gt;glutInitDisplayMode (GLUT_SINGLE  GLUT_RGBA  GLUT_DEPTH);&lt;br /&gt;glutInitWindowPosition (20,20);&lt;br /&gt;glutInitWindowSize (WIDTH, HEIGHT);&lt;br /&gt;/* Main window creation and setup */&lt;br /&gt;winIdMain = glutCreateWindow (TITLE);&lt;br /&gt;// glutSetWindow (winIdMain);&lt;br /&gt;init ();&lt;br /&gt;glutDisplayFunc (Display);&lt;br /&gt;glutReshapeFunc (Reshape);&lt;br /&gt;glutMouseFunc(onMouse);&lt;br /&gt;glutPassiveMotionFunc(onMotion);&lt;br /&gt;glutKeyboardFunc(keyboard);&lt;br /&gt;glutIdleFunc (idle);&lt;br /&gt;glutMainLoop ();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;void Movimiento(void)  //Movimiento aleatorio del humanoide&lt;br /&gt;{&lt;br /&gt;x=rand() %2;&lt;br /&gt;y=rand() %2;&lt;br /&gt;z=rand() %2;&lt;br /&gt;brazod=rand()%80;&lt;br /&gt;brazoi=rand()%80;&lt;br /&gt;pied=rand()%80;&lt;br /&gt;piei=rand()%80;&lt;br /&gt;//ejes de rotación de la muñeca&lt;br /&gt;xmu=rand() %2;&lt;br /&gt;ymu=rand() %2;&lt;br /&gt;zmu=rand() %2;&lt;br /&gt;//àngulo de la muñeca&lt;br /&gt;rmu1=rand()%90;&lt;br /&gt;//angulos de los grados de libertad del dedo medio&lt;br /&gt;r1=rand()%180;&lt;br /&gt;r2=rand()%180;&lt;br /&gt;r3=rand()%180;&lt;br /&gt;//angulos de los grados de libertad del dedo indice&lt;br /&gt;r4=rand()%180;&lt;br /&gt;r5=rand()%180;&lt;br /&gt;r6=rand()%180;&lt;br /&gt;//angulos de los grados de libertad del dedo anular&lt;br /&gt;r7=rand()%180;&lt;br /&gt;r8=rand()%180;&lt;br /&gt;r9=rand()%180;&lt;br /&gt;//angulos de los grados de libertad del dedo meñique&lt;br /&gt;r10=rand()%180;&lt;br /&gt;r11=rand()%180;&lt;br /&gt;r12=rand()%180;&lt;br /&gt;//angulos de los grados de libertad del dedo pulgar&lt;br /&gt;r13=rand()%180;&lt;br /&gt;r14=rand()%180;&lt;br /&gt;r15=rand()%180;&lt;br /&gt;//ejes de rotación del dedo pulgar&lt;br /&gt;zp=1;&lt;br /&gt;xp=0;&lt;br /&gt;}&lt;br /&gt;void Humanoide(void)  //Funcion del Humanoide&lt;br /&gt;{&lt;br /&gt;glPushMatrix();&lt;br /&gt;//cabeza&lt;br /&gt;glTranslatef(0.0f,2.5f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//tronco&lt;br /&gt;glScalef(2.5,2.5,2.0);&lt;br /&gt;glTranslatef(0.0f,-0.45f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//piernas&lt;br /&gt;glPushMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;//pierna izquierda&lt;br /&gt;glRotatef(piei,x,y,z);&lt;br /&gt;glTranslatef(-0.1f,-0.55f,0.0f);&lt;br /&gt;glScalef(-.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,-0.7f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,.35f,0.0f);&lt;br /&gt;glScalef(1.1,.4,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;//pies&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(.3f,-1.0f,0.0f);&lt;br /&gt;glScalef(1.6,.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;//pierna derecha&lt;br /&gt;glRotatef(pied,x,y,z);&lt;br /&gt;glTranslatef(0.1f,-0.55f,0.0f);&lt;br /&gt;glScalef(-.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,-0.7f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,.35f,0.0f);&lt;br /&gt;glScalef(1.1,.4,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;//pies&lt;br /&gt;glTranslatef(-.3f,-1.0f,0.0f);&lt;br /&gt;glScalef(1.6,.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;//brazo derecho&lt;br /&gt;glPushMatrix();&lt;br /&gt;glRotatef(brazod,x,y,z);&lt;br /&gt;glTranslatef(0.35f,0.1f,0.0f);&lt;br /&gt;glScalef(0.5,0.4,.5);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.4f,0.0f,0.0f);&lt;br /&gt;glScalef(0.5,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(0.7f,0.0f,0.0f);&lt;br /&gt;glScalef(.7,1,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//brazo izquierdo&lt;br /&gt;glPopMatrix();&lt;br /&gt;glRotatef(brazoi,x,y,z);&lt;br /&gt;glTranslatef(-0.35f,0.1f,0.0f);&lt;br /&gt;glScalef(0.5,0.4,.5);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.4f,0.0f,0.0f);&lt;br /&gt;glScalef(0.5,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(-0.7f,0.0f,0.0f);&lt;br /&gt;glScalef(.7,1,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;void mano(void)   //Funcion de la mano&lt;br /&gt;{&lt;br /&gt;glRotatef(rmu1,xmu,ymu,zmu);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.1,0.0,0.0f);&lt;br /&gt;glScalef(1.7,2.5,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;//dedo medio&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0,0.9,0.0f);&lt;br /&gt;glRotatef(r1,1,0,0);&lt;br /&gt;glScalef(.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.45,0.0f);&lt;br /&gt;glRotatef(r2,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.47,0.0f);&lt;br /&gt;glRotatef(r3,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;//dedo indice&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.2,0.0,0.0f);&lt;br /&gt;glTranslatef(0.0,0.9,0.0f);&lt;br /&gt;glRotatef(r4,1,0,0);&lt;br /&gt;glScalef(.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.45,0.0f);&lt;br /&gt;glRotatef(r5,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.47,0.0f);&lt;br /&gt;glRotatef(r6,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;//dedo anular&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.2,0.0,0.0f);&lt;br /&gt;glTranslatef(0.0,0.9,0.0f);&lt;br /&gt;glRotatef(r7,1,0,0);&lt;br /&gt;glScalef(.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.45,0.0f);&lt;br /&gt;glRotatef(r8,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.47,0.0f);&lt;br /&gt;glRotatef(r9,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;//dedo meñique&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.4,0.0,0.0f);&lt;br /&gt;glTranslatef(0.0,0.9,0.0f);&lt;br /&gt;glRotatef(r10,1,0,0);&lt;br /&gt;glScalef(.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.45,0.0f);&lt;br /&gt;glRotatef(r11,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.47,0.0f);&lt;br /&gt;glRotatef(r12,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;//dedo pulgar&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.45,-0.8,0.0f);&lt;br /&gt;glTranslatef(0.0,0.9,0.0f);&lt;br /&gt;glRotatef(r13,xp,0,zp);&lt;br /&gt;glScalef(.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.45,0.0f);&lt;br /&gt;glRotatef(r14,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glTranslatef(0.0,.47,0.0f);&lt;br /&gt;glRotatef(r15,1,0,0);&lt;br /&gt;glScalef(1.0,0.7,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-7201962558108811291?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/7201962558108811291/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=7201962558108811291' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/7201962558108811291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/7201962558108811291'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/previo-practica-7.html' title='Previo Practica 7'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-4721222352963668727</id><published>2007-04-15T11:53:00.001-07:00</published><updated>2007-04-16T14:54:08.796-07:00</updated><title type='text'>IMPLEMENTACION DE CURVAS Y SUPERFICIES CON NURBS</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Los NURBS (Non-Uniform Rational B-Splines) son entes matemáticos que definen exactamente una curva o superfice a partir de varios puntos de control, no necesariamente pertenecientes a la trayectoria, y unos pesos asociados a los mismos.&lt;br /&gt;Cuanto mayor sea la complejidad de la curva, mayor será el número de puntos de control que deberá especificarse, pero, en todo caso, el número de puntos generados será menor que el necesario utilizando la aproximación tradicional por tramos rectos.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054146150215592562" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RiPvJUaCKnI/AAAAAAAAACA/6PWpkuNxEew/s320/FIG1.bmp" border="0" /&gt;&lt;br /&gt;Curvas Nurbs&lt;br /&gt;Son una herramienta importante para trabajar en 3D. Pueden ser una forma simple de modelar una superficie o un avanzado control para la animación, se definen por puntos de control, que controlan la forma de la curva. También consta de otros tipos de punto como los editables, que indica el principio o final de un segmento, y rectas que unen los puntos de control en una curva.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054146304834415234" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RiPvSUaCKoI/AAAAAAAAACI/iGUQytL5vnw/s320/FIG2.bmp" border="0" /&gt;&lt;br /&gt;La geometría de la curva se define por: grados, puntos de control, nodos y regla de calculo.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054146425093499538" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RiPvZUaCKpI/AAAAAAAAACQ/FYzf2LoupN0/s320/FIG3.bmp" border="0" /&gt;&lt;br /&gt;Superficies Nurbs&lt;br /&gt;Tienen los principios de las curvas nurbs, y se aplican igual, sin embargo una diferencia entre curvas y superficies es que las curvas se sometena una sola direccion y la superficie es bidireccional, estas bidireccion tiene un origen llamado normal, que determina la parte frontal o trasera de la misma.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054146614072060578" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RiPvkUaCKqI/AAAAAAAAACY/c6q89wCfNGU/s320/FIG4.bmp" border="0" /&gt;&lt;br /&gt;Funciones básicas B-spline&lt;br /&gt;Sea U = {u0, u1, . . . , ul} una secuencia no decreciente de números reales, es decir,&lt;br /&gt;ui ≤ ui+1, i = 0, . . . , l−1. Los ui se denominan nodos y U vector de nodos. La i-esima función básica B-spline de grado p (orden p + 1), denotada por Ni,p(u), está definida recursivamente:&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054146742921079474" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RiPvr0aCKrI/AAAAAAAAACg/XD-2n3vCefg/s320/FIG5.bmp" border="0" /&gt;Nótese que las funciones Ni,0(u), i = 0, . . . , m son funciones salto, idénticamente nulas excepto en el intervalo semiabierto [ui, ui+1) (el cual puede tener longitud cero, pues ambos nodos pueden ser iguales). En cambio, para p &gt; 0 la función Ni,p(u) es una combinación lineal de dos funciones básicas de grado (p−1). Por supuesto, la computación de las funciones básicas requiere especificar el vector de nodos U y&lt;br /&gt;el grado p. La derivada de una función básica viene dada por:&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054146880360032962" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RiPvz0aCKsI/AAAAAAAAACo/MedSgCYokwM/s320/FIG6.bmp" border="0" /&gt;Derivando sucesivas veces la expresión (2) obtenemos Nk i,p(u), la derivada k-esima de Ni,p(u), como&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054147026388921042" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RiPv8UaCKtI/AAAAAAAAACw/NBTaQGSZeWk/s320/FIG7.bmp" border="0" /&gt;2.2 Superficies NURBS&lt;br /&gt;Las superficies mas ampliamente usadas en los procesos de diseño en la industria son las superficies NURBS. Ello se explica por sus grandes ventajas, entre las que figuran sus capacidades para el diseño interactivo y su habilidad para representar de manera precisa formas cerradas, como cónicas y cuadricas. Además, las superficies NURBS incluyen a las superficies B-spline como casos particulares.&lt;br /&gt;De hecho, muchas aplicaciones de CAD/CAM, realidad virtual, animación y visualización usan modelos basados en superficies NURBS y estas superficies están incluidas en muchos de los formatos mas populares en la industria, como IGES. También muchos estándares gráficos mas recientes, tales como PHIGS+ y OpenGL incluyen las superficies NURBS entre sus primitivas gráficas.&lt;br /&gt;Una superficie NURBS9 S(u,v) de grado (p, q) es una función racional bivariada de la forma:&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054147322741664498" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_mYG88_6hQGg/RiPwNkaCKvI/AAAAAAAAADA/KW95QgT8_pk/s320/FIG8.bmp" border="0" /&gt;donde {wij}i,j representan los valores escalares de los pesos asociados a los puntos de control {Pij}i=0,...,n;j=0,...,m y con vectores de nodos U y V definidos .&lt;br /&gt;2.3 Derivadas de superficies NURBS&lt;br /&gt;Las derivadas de una superficie NURBS pueden calcularse a partir de las derivadas de A(u, v) y w(u, v) (el numerador y el denominador de la expresión (4) respectivamente) como:&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5054147490245389058" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/RiPwXUaCKwI/AAAAAAAAADI/wOggZ2gAlqc/s320/FIG9.bmp" border="0" /&gt;donde dichas derivadas pueden ser fácilmente calculadas a partir de la expresión (3). La expresión (5) indica también que las derivadas de una superficie NURBS se obtienen de forma recursiva y que es posible su computación aplicando un esquema distribuido.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-4721222352963668727?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/4721222352963668727/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=4721222352963668727' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/4721222352963668727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/4721222352963668727'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/implementacion-de-curvas-y-superficies.html' title='IMPLEMENTACION DE CURVAS Y SUPERFICIES CON NURBS'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mYG88_6hQGg/RiPvJUaCKnI/AAAAAAAAACA/6PWpkuNxEew/s72-c/FIG1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-5870311842349946225</id><published>2007-04-12T08:15:00.000-07:00</published><updated>2007-04-12T08:19:21.872-07:00</updated><title type='text'>REPORTE PRACTICA 6</title><content type='html'>//Segun la numeracion esta seria el reporte de la practica 5&lt;br /&gt;//Programa que dibuja lineas, triangulos, y cuadros, se limpia la ventana cada 30 segundos&lt;br /&gt;#include string.h&lt;br /&gt;#include GL/glut.h&lt;br /&gt;#include stdarg.h&lt;br /&gt;#include windows.h&lt;br /&gt;#include stdio.h&lt;br /&gt;#include malloc.h&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void pinta(void);&lt;br /&gt;int opcion;&lt;br /&gt;float r,b,g;&lt;br /&gt;float x1,y1,z1;&lt;br /&gt;char string[]="00:00:00";&lt;br /&gt;x0=24;&lt;br /&gt;opcion=1;&lt;br /&gt;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClear(GL_COLOR_BUFFER_BIT);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void pinta(void){&lt;br /&gt;&lt;br /&gt;int xe,ze;&lt;br /&gt;float x2,y2;&lt;br /&gt;&lt;br /&gt;if(opcion==1)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if(r&gt;=1 b&gt;=1 g&gt;=1){&lt;br /&gt;r=0;&lt;br /&gt;b=0;&lt;br /&gt;g=0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;r= r+.1;&lt;br /&gt;b= b+.2;&lt;br /&gt;g= g+.3;&lt;br /&gt;glColor3f(r,b,g);&lt;br /&gt;x1= rand()%500;&lt;br /&gt;y1= rand()%500;&lt;br /&gt;z1= rand()%500;&lt;br /&gt;glBegin(GL_LINES);&lt;br /&gt;glVertex3f(x1,y1,0);&lt;br /&gt;x1= rand()%500;&lt;br /&gt;y1= rand()%500;&lt;br /&gt;z1= rand()%500;&lt;br /&gt;glVertex3f(x1,y1,0);&lt;br /&gt;glEnd();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(opcion==3)&lt;br /&gt;{&lt;br /&gt;if(r&gt;=1 b&gt;=1 g&gt;=1){&lt;br /&gt;r=0;&lt;br /&gt;b=0;&lt;br /&gt;g=0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;r= r+.3;&lt;br /&gt;b= b+.1;&lt;br /&gt;g= g+.2;&lt;br /&gt;glColor3f(r,b,g);&lt;br /&gt;y1= rand()%12;&lt;br /&gt;z1= rand()%12;&lt;br /&gt;x2= rand()%500;&lt;br /&gt;y2= rand()%500;&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(x2,y2,0);&lt;br /&gt;glScalef(z1,y1,0);&lt;br /&gt;&lt;br /&gt;glBegin(GL_LINES);&lt;br /&gt;glVertex3f(10,2,0);&lt;br /&gt;glVertex3f(20,2,0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;glBegin(GL_LINES);&lt;br /&gt;glVertex3f(10,2,0);&lt;br /&gt;glVertex3f(10,12,0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;glBegin(GL_LINES);&lt;br /&gt;glVertex3f(20,2,0);&lt;br /&gt;glVertex3f(20,12,0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;glBegin(GL_LINES);&lt;br /&gt;glVertex3f(10,12,0);&lt;br /&gt;glVertex3f(20,12,0);&lt;br /&gt;glEnd();&lt;br /&gt;glPopMatrix();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(opcion==2)&lt;br /&gt;{&lt;br /&gt;if(r&gt;=1 b&gt;=1 g&gt;=1){&lt;br /&gt;r=0;&lt;br /&gt;b=0;&lt;br /&gt;g=0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;r= r+.2;&lt;br /&gt;b= b+.3;&lt;br /&gt;g= g+.1;&lt;br /&gt;glColor3f(r,b,g);&lt;br /&gt;x1= rand()%15;&lt;br /&gt;y1= rand()%15;&lt;br /&gt;x2= rand()%500;&lt;br /&gt;y2= rand()%500;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(x2,y2,0);&lt;br /&gt;glScalef(x1,y1,0);&lt;br /&gt;glBegin(GL_LINES);&lt;br /&gt;glVertex3f(-10,1,0);&lt;br /&gt;glVertex3f(10,1,0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;glBegin(GL_LINES);&lt;br /&gt;glVertex3f(0,20,0);&lt;br /&gt;glVertex3f(-10,1,0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;glBegin(GL_LINES);&lt;br /&gt;glVertex3f(0,20,0);&lt;br /&gt;glVertex3f(10,1,0);&lt;br /&gt;glEnd();&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;pinta();&lt;br /&gt;glFlush();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void reshape(int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport(0, 0, w, h);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluOrtho2D(0, w, h, 0);&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;//MANEJO DEL RETARDO&lt;br /&gt;void TimerFunction()&lt;br /&gt;{&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;glutTimerFunc(3000, TimerFunction, 1);&lt;br /&gt;}&lt;br /&gt;void TimerFunction2()&lt;br /&gt;{&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;glClear(GL_COLOR_BUFFER_BIT);&lt;br /&gt;glutTimerFunc(30000, TimerFunction2, 2);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//ACCIONES DEL MOUSE&lt;br /&gt;void onMouse(int button, int state, int x, int y) {&lt;br /&gt;&lt;br /&gt;if ( (button == GLUT_RIGHT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;if(opcion==1)&lt;br /&gt;opcion=1;&lt;br /&gt;if(opcion==2)&lt;br /&gt;opcion=1;&lt;br /&gt;if(opcion==3)&lt;br /&gt;opcion=2;&lt;br /&gt;TimerFunction();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ( (button == GLUT_LEFT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;if(opcion==3)&lt;br /&gt;opcion=3;&lt;br /&gt;if(opcion==2)&lt;br /&gt;opcion=3;&lt;br /&gt;if(opcion==1)&lt;br /&gt;opcion=2;&lt;br /&gt;TimerFunction();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char **argv)&lt;br /&gt;{&lt;br /&gt;glutInit(&amp;argc, argv);&lt;br /&gt;glutInitDisplayMode(GLUT_SINGLE GLUT_RGB);&lt;br /&gt;glutInitWindowSize(500, 500);&lt;br /&gt;glutCreateWindow("Reporte Practica 6");&lt;br /&gt;glClearColor(0.0, 0.0, 0.0, 1.0);&lt;br /&gt;init ();&lt;br /&gt;glutDisplayFunc(display);&lt;br /&gt;glutReshapeFunc(reshape);&lt;br /&gt;glutMouseFunc(onMouse);&lt;br /&gt;glutTimerFunc(3000, TimerFunction, 1);&lt;br /&gt;glutTimerFunc(30000, TimerFunction2, 2);&lt;br /&gt;glutMouseFunc(onMouse);&lt;br /&gt;glutMainLoop();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-5870311842349946225?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/5870311842349946225/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=5870311842349946225' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5870311842349946225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5870311842349946225'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/reporte-practica-6.html' title='REPORTE PRACTICA 6'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-344582274718052749</id><published>2007-04-10T06:50:00.000-07:00</published><updated>2007-04-10T06:54:25.674-07:00</updated><title type='text'>Mejoramiento del algoritmo para pendientes de m=1 y m=-1 o mayores</title><content type='html'>Mejoramiento del algoritmo de linea de Bresenham&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void lineaBresenham(int xo,yo,x1,y1){&lt;br /&gt;   int dx=x1-xo;&lt;br /&gt;   int dy=y1-yo;&lt;br /&gt;   int x=xo;&lt;br /&gt;   int y=yo;&lt;br /&gt;   int do=2*dy-dx;&lt;br /&gt;   int dE=2*dy;&lt;br /&gt;   int dNE=2*(dy-dx);&lt;br /&gt;   int d=do;&lt;br /&gt;   int m= (y1-yo)/(x1-xo);&lt;br /&gt;   while(x != x1){&lt;br /&gt;      if(d &lt;= 0){   //Direccion E&lt;br /&gt;          punto(x,y);  &lt;br /&gt;          x=x+m; &lt;br /&gt;          d=d+dE; &lt;br /&gt;      }&lt;br /&gt;      else{        //Direccion NE   &lt;br /&gt;         punto(x,y);&lt;br /&gt;         x=x+m;&lt;br /&gt;         y=y+1; &lt;br /&gt;        d=d+dNE;&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;En este codigo se hace uso de la pendiente para sumarloa la x para calcular la detla d, y asi poder manejar pendientesde m=1 y m=-1 o mayores en valor.&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-344582274718052749?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/344582274718052749/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=344582274718052749' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/344582274718052749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/344582274718052749'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/mejoramiento-del-algoritmo-para.html' title='Mejoramiento del algoritmo para pendientes de m=1 y m=-1 o mayores'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-6337546274313465380</id><published>2007-04-10T06:46:00.000-07:00</published><updated>2007-04-10T06:50:15.143-07:00</updated><title type='text'>Previo Practica 5 Bitmap Mejorado version2</title><content type='html'>La version pasada no hace grande y chico el nombre esta si.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include GL/glut.h&lt;br /&gt;#include stdlib.h&lt;br /&gt;#include stdio.h&lt;br /&gt;#include windows.h&lt;br /&gt;#include math.h&lt;br /&gt;&lt;br /&gt;void text(GLuint x, GLuint y, char* format);  //Pinta el nombre&lt;br /&gt;void onMouse(int button, int state, int x, int y);  //Eventos boton del mouse&lt;br /&gt;void onMotion(int x, int y);   //Evento de movimiento del mouse&lt;br /&gt;GLint incrementa = 0;&lt;br /&gt;float alpha, beta;&lt;br /&gt;int xo, yo;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClearColor (0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glShadeModel (GL_FLAT);&lt;br /&gt;}&lt;br /&gt;void text(GLuint x, GLuint y, char* format) {&lt;br /&gt;va_list args;&lt;br /&gt;char buffer[255], *p;&lt;br /&gt;GLfloat font_scale = 119.05f + 33.33f;&lt;br /&gt;va_start(args, format);&lt;br /&gt;vsprintf(buffer, format, args);&lt;br /&gt;va_end(args);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluOrtho2D(0, glutGet(GLUT_WINDOW_WIDTH), 0,&lt;br /&gt;glutGet(GLUT_WINDOW_HEIGHT));&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;glPushAttrib(GL_ENABLE_BIT);&lt;br /&gt;glDisable(GL_LIGHTING);&lt;br /&gt;glDisable(GL_TEXTURE_2D);&lt;br /&gt;glDisable(GL_DEPTH_TEST);&lt;br /&gt;glTranslatef(x, y, 0.0);&lt;br /&gt;glRasterPos3f (90,180,0);&lt;br /&gt;if(incrementa == 0)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *p);&lt;br /&gt;if(incrementa == 1)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, *p);&lt;br /&gt;if(incrementa == 2)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_8_BY_13, *p);&lt;br /&gt;if(incrementa == 3)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, *p);&lt;br /&gt;if(incrementa == 4)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_9_BY_15, *p);&lt;br /&gt;if(incrementa == 5)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *p);&lt;br /&gt;if(incrementa == 6)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *p);&lt;br /&gt;if(incrementa &gt;=7)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *p);&lt;br /&gt;if(incrementa &lt;= -1)&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, *p);&lt;br /&gt;//glRasterPos3f(500,0,0);&lt;br /&gt;//glReadPixels(85,165,150,50,GL_RGB,GL_BITMAP,pix);&lt;br /&gt;//glDrawPixels(150,50,GL_RGB,GL_BITMAP,pix);&lt;br /&gt;//glColor3f(1.0,1.0,0.0);&lt;br /&gt;//glBitmap (80,70,80, 180,10, 10,*p);&lt;br /&gt;glPopAttrib();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;void onMouse(int button, int state, int x, int y)&lt;br /&gt;{&lt;br /&gt;if ( (button == GLUT_LEFT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;incrementa++;&lt;br /&gt;xo=x;&lt;br /&gt;yo=y;&lt;br /&gt;}&lt;br /&gt;if ( (button == GLUT_RIGHT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;incrementa--;&lt;br /&gt;xo=x;&lt;br /&gt;yo=y;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void onMotion(int x, int y) {&lt;br /&gt;alpha = (alpha + (y - yo));&lt;br /&gt;beta = (beta + (x - xo));&lt;br /&gt;xo = x; yo = y;&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;}&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;GLint command = 1;&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT);&lt;br /&gt;//glColor3f (1.0, 1.0, 1.0);&lt;br /&gt;glLoadIdentity (); /* clear the matrix */&lt;br /&gt;/* viewing transformation */&lt;br /&gt;gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);&lt;br /&gt;if (command) {&lt;br /&gt;glColor3f(1.0,1.,0.0) ;&lt;br /&gt;text(250,200, "%s", "aide");&lt;br /&gt;}&lt;br /&gt;glFlush ();&lt;br /&gt;}&lt;br /&gt;void reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, (GLsizei) w, (GLsizei) h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);&lt;br /&gt;glMatrixMode (GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;/* ARGSUSED1 */&lt;br /&gt;void keyboard(unsigned char key, int x, int y)&lt;br /&gt;{&lt;br /&gt;switch (key) {&lt;br /&gt;case 27:&lt;br /&gt;exit(0);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;int main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;glutInit(&amp;argc, argv);&lt;br /&gt;glutInitDisplayMode (GLUT_SINGLE  GLUT_RGB);&lt;br /&gt;glutInitWindowSize (500, 500);&lt;br /&gt;glutInitWindowPosition (0,0);&lt;br /&gt;glutCreateWindow (argv[0]);&lt;br /&gt;init ();&lt;br /&gt;glutDisplayFunc(display);&lt;br /&gt;glutMouseFunc(onMouse);&lt;br /&gt;glutMotionFunc(onMotion);&lt;br /&gt;glutReshapeFunc(reshape);&lt;br /&gt;glutKeyboardFunc(keyboard);&lt;br /&gt;glutMainLoop();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-6337546274313465380?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/6337546274313465380/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=6337546274313465380' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/6337546274313465380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/6337546274313465380'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/previo-practica-5-bitmap-mejorado.html' title='Previo Practica 5 Bitmap Mejorado version2'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-1002821247743884497</id><published>2007-04-09T16:56:00.000-07:00</published><updated>2007-04-09T16:57:53.426-07:00</updated><title type='text'>Previo Practica 5 glutBitmapCharacter  Creacion del Nombre</title><content type='html'>#include GL/glut.h&lt;br /&gt;#include stdlib.h&lt;br /&gt;#include stdio.h&lt;br /&gt;#include windows.h&lt;br /&gt;#include math.h&lt;br /&gt;&lt;br /&gt;void text(GLuint x, GLuint y, GLfloat scale, char* format);&lt;br /&gt;&lt;br /&gt;GLint CrearFuente ();&lt;br /&gt;void EscribirCadena (GLint fuente, char *cadena);&lt;br /&gt;void aux(void);&lt;br /&gt;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClearColor (0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glShadeModel (GL_FLAT);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void text(GLuint x, GLuint y, GLfloat scale, char* format) {&lt;br /&gt;GLvoid *pix;&lt;br /&gt;va_list args;&lt;br /&gt;char buffer[255], *p;&lt;br /&gt;GLfloat font_scale = 119.05f + 33.33f;&lt;br /&gt;va_start(args, format);&lt;br /&gt;vsprintf(buffer, format, args);&lt;br /&gt;va_end(args);&lt;br /&gt;pix=NULL;&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluOrtho2D(0, glutGet(GLUT_WINDOW_WIDTH), 0,&lt;br /&gt;glutGet(GLUT_WINDOW_HEIGHT));&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;glPushAttrib(GL_ENABLE_BIT);&lt;br /&gt;glDisable(GL_LIGHTING);&lt;br /&gt;glDisable(GL_TEXTURE_2D);&lt;br /&gt;glDisable(GL_DEPTH_TEST);&lt;br /&gt;&lt;br /&gt;glRasterPos3f (90,180,0);&lt;br /&gt;for(p = buffer; *p; p++){&lt;br /&gt;glutBitmapCharacter(GLUT_BITMAP_9_BY_15, *p);&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;glRasterPos3f(500,0,0);&lt;br /&gt;glReadPixels(85,165,150,50,GL_RGB,GL_BITMAP,pix);&lt;br /&gt;glDrawPixels(150,50,GL_RGB,GL_BITMAP,pix);&lt;br /&gt;//glColor3f(1.0,1.0,0.0);&lt;br /&gt;//glBitmap (80,70,80, 180,10, 10,*p);&lt;br /&gt;glPopAttrib();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;void aux(void){&lt;br /&gt;GLvoid *pix;&lt;br /&gt;pix=NULL;&lt;br /&gt;glReadPixels(0,0,500,500,GL_RGB,GL_BITMAP,pix);&lt;br /&gt;glRasterPos3f(0,250,0);&lt;br /&gt;glColor3f(1.0,0.0,0.0);&lt;br /&gt;glDrawPixels(500,500,GL_RGB,GL_BITMAP,pix);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;GLint command = 1;&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT);&lt;br /&gt;//glColor3f (1.0, 1.0, 1.0);&lt;br /&gt;glLoadIdentity (); /* clear the matrix */&lt;br /&gt;/* viewing transformation */&lt;br /&gt;gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (command) {&lt;br /&gt;glColor3f(1.0,1.,0.0) ;&lt;br /&gt;text(100,100, 80, "%s", "AIDE");&lt;br /&gt;}&lt;br /&gt;//aux();&lt;br /&gt;glFlush ();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, (GLsizei) w, (GLsizei) h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);&lt;br /&gt;glMatrixMode (GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* ARGSUSED1 */&lt;br /&gt;void keyboard(unsigned char key, int x, int y)&lt;br /&gt;{&lt;br /&gt;switch (key) {&lt;br /&gt;case 27:&lt;br /&gt;exit(0);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;int main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;   glutInit(&amp;argc, argv);&lt;br /&gt;   glutInitDisplayMode (GLUT_SINGLE  GLUT_RGB);&lt;br /&gt;   glutInitWindowSize (500, 500);&lt;br /&gt;   glutInitWindowPosition (0,0);&lt;br /&gt;   glutCreateWindow (argv[0]);&lt;br /&gt;   init ();&lt;br /&gt;   glutDisplayFunc(display);&lt;br /&gt;   glutReshapeFunc(reshape);&lt;br /&gt;   glutKeyboardFunc(keyboard);&lt;br /&gt;   glutMainLoop();&lt;br /&gt;&lt;br /&gt;   return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-1002821247743884497?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/1002821247743884497/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=1002821247743884497' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/1002821247743884497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/1002821247743884497'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/previo-practica-5-glutbitmapcharacter.html' title='Previo Practica 5 glutBitmapCharacter  Creacion del Nombre'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-6779835086255219586</id><published>2007-04-09T16:54:00.000-07:00</published><updated>2007-04-09T16:56:21.875-07:00</updated><title type='text'>Previo Practica 5 glutStrokeCharacter  Creacion del Nombre</title><content type='html'>#include GL/glut.h&lt;br /&gt;#include stdlib.h&lt;br /&gt;#include stdio.h&lt;br /&gt;#include windows.h&lt;br /&gt;#include math.h&lt;br /&gt;&lt;br /&gt;void text(GLuint x, GLuint y, GLfloat scale, char* format);&lt;br /&gt;void onMouse(int button, int state, int x, int y);&lt;br /&gt;void onMotion(int x, int y);&lt;br /&gt;GLint incrementa = 10;&lt;br /&gt;float alpha, beta;&lt;br /&gt;int xo, yo;&lt;br /&gt;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClearColor (0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glShadeModel (GL_FLAT);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void text(GLuint x, GLuint y, GLfloat scale, char* format) {&lt;br /&gt;va_list args;&lt;br /&gt;char buffer[255], *p;&lt;br /&gt;GLfloat font_scale = 119.05f + 33.33f;&lt;br /&gt;va_start(args, format);&lt;br /&gt;vsprintf(buffer, format, args);&lt;br /&gt;va_end(args);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluOrtho2D(0, glutGet(GLUT_WINDOW_WIDTH), 0,&lt;br /&gt;glutGet(GLUT_WINDOW_HEIGHT));&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;glPushAttrib(GL_ENABLE_BIT);&lt;br /&gt;glDisable(GL_LIGHTING);&lt;br /&gt;glDisable(GL_TEXTURE_2D);&lt;br /&gt;glDisable(GL_DEPTH_TEST);&lt;br /&gt;glTranslatef(x, y, 0.0);&lt;br /&gt;glScalef(scale/font_scale, scale/font_scale, scale/font_scale);&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);&lt;br /&gt;glPopAttrib();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;void onMouse(int button, int state, int x, int y)&lt;br /&gt;{&lt;br /&gt;  if ( (button == GLUT_LEFT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;        incrementa = incrementa + 5;&lt;br /&gt;                        xo=x;&lt;br /&gt;                        yo=y;&lt;br /&gt;  }&lt;br /&gt;  if ( (button == GLUT_RIGHT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;        incrementa = incrementa - 5;&lt;br /&gt;                        xo=x;&lt;br /&gt;                        yo=y;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void onMotion(int x, int y) {&lt;br /&gt;alpha = (alpha + (y - yo));&lt;br /&gt;beta = (beta + (x - xo));&lt;br /&gt;xo = x; yo = y;&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;GLint command = 1;&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT);&lt;br /&gt;//glColor3f (1.0, 1.0, 1.0);&lt;br /&gt;glLoadIdentity (); /* clear the matrix */&lt;br /&gt;/* viewing transformation */&lt;br /&gt;gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);&lt;br /&gt;&lt;br /&gt;if (command) {&lt;br /&gt;glColor3f(1.0,1.,0.0) ;&lt;br /&gt;text(250,200, incrementa, "%s", "aide");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;glFlush ();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, (GLsizei) w, (GLsizei) h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);&lt;br /&gt;glMatrixMode (GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* ARGSUSED1 */&lt;br /&gt;void keyboard(unsigned char key, int x, int y)&lt;br /&gt;{&lt;br /&gt;switch (key) {&lt;br /&gt;case 27:&lt;br /&gt;exit(0);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;int main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;   glutInit(&amp;argc, argv);&lt;br /&gt;   glutInitDisplayMode (GLUT_SINGLE  GLUT_RGB);&lt;br /&gt;   glutInitWindowSize (500, 500);&lt;br /&gt;   glutInitWindowPosition (0,0);&lt;br /&gt;   glutCreateWindow (argv[0]);&lt;br /&gt;   init ();&lt;br /&gt;   glutDisplayFunc(display);&lt;br /&gt;   glutMouseFunc(onMouse);&lt;br /&gt;   glutMotionFunc(onMotion);&lt;br /&gt;   glutReshapeFunc(reshape);&lt;br /&gt;   glutKeyboardFunc(keyboard);&lt;br /&gt;   glutMainLoop();&lt;br /&gt;&lt;br /&gt;   return 0;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-6779835086255219586?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/6779835086255219586/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=6779835086255219586' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/6779835086255219586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/6779835086255219586'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/previo-practica-5-glutstrokecharacter.html' title='Previo Practica 5 glutStrokeCharacter  Creacion del Nombre'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-7559577072793258123</id><published>2007-04-09T16:49:00.000-07:00</published><updated>2007-04-09T16:58:48.115-07:00</updated><title type='text'>PREVIO PRACTICA 5 RELOJ USO DE FUNCION TIMER</title><content type='html'>#include GL/glut.h&lt;br /&gt;#include stdlib.h&lt;br /&gt;#include stdio.h&lt;br /&gt;#include windows.h&lt;br /&gt;#include math.h&lt;br /&gt;&lt;br /&gt;void text(GLuint x, GLuint y, GLfloat scale, char* format);&lt;br /&gt;void onMouse(int button, int state, int x, int y);&lt;br /&gt;void onMotion(int x, int y);&lt;br /&gt;void auxiliar(void);&lt;br /&gt;void TimerFunction(int value);&lt;br /&gt;&lt;br /&gt;int h1,h2,m1,m2,s1,s2;&lt;br /&gt;GLint incrementa = 20;&lt;br /&gt;float alpha, beta;&lt;br /&gt;int xo, yo,sigue;&lt;br /&gt;s1=0;&lt;br /&gt;m1=0;&lt;br /&gt;h1=0;&lt;br /&gt;s2=0;&lt;br /&gt;m2=0;&lt;br /&gt;h2=0;&lt;br /&gt;sigue=0;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClearColor (0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glShadeModel (GL_FLAT);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void text(GLuint x, GLuint y, GLfloat scale, char *format) {&lt;br /&gt;va_list args;&lt;br /&gt;char buffer[255], *p;&lt;br /&gt;GLfloat font_scale = 119.05f + 33.33f;&lt;br /&gt;va_start(args, format);&lt;br /&gt;vsprintf(buffer, format, args);&lt;br /&gt;va_end(args);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluOrtho2D(0, glutGet(GLUT_WINDOW_WIDTH), 0,&lt;br /&gt;glutGet(GLUT_WINDOW_HEIGHT));&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;glPushAttrib(GL_ENABLE_BIT);&lt;br /&gt;glDisable(GL_LIGHTING);&lt;br /&gt;glDisable(GL_TEXTURE_2D);&lt;br /&gt;glDisable(GL_DEPTH_TEST);&lt;br /&gt;glTranslatef(x, y, 0.0);&lt;br /&gt;glScalef(scale/font_scale, scale/font_scale, scale/font_scale);&lt;br /&gt;for(p = buffer; *p; p++)&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, h2+48);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, h1+48);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, 58);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, m2+48);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, m1+48);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, 58);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, s2+48);&lt;br /&gt;glutStrokeCharacter(GLUT_STROKE_ROMAN, s1+48);&lt;br /&gt;glPopAttrib();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;void TimerFunction(int value)&lt;br /&gt;{&lt;br /&gt;s1++;&lt;br /&gt;if(s1==10){&lt;br /&gt;s2++;&lt;br /&gt;s1=0;&lt;br /&gt;if(s2==6){&lt;br /&gt;s2=0;&lt;br /&gt;m1++;&lt;br /&gt;if(m1==10){&lt;br /&gt;m1=0;&lt;br /&gt;m2++;&lt;br /&gt;if(m2==6){&lt;br /&gt;m2=0;&lt;br /&gt;h1++;&lt;br /&gt;if(h1==10){&lt;br /&gt;h1=0;&lt;br /&gt;if(h2==2){&lt;br /&gt;m1=m2=s1=s2=h1=h2=0;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;if(sigue==1)&lt;br /&gt;glutTimerFunc(1000,TimerFunction,1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, (GLsizei) w, (GLsizei) h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);&lt;br /&gt;glMatrixMode (GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* ARGSUSED1 */&lt;br /&gt;void keyboard(unsigned char key, int x, int y)&lt;br /&gt;{&lt;br /&gt;switch (key) {&lt;br /&gt;case 27:&lt;br /&gt;exit(0);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;void onMouse(int button, int state, int x, int y)&lt;br /&gt;{&lt;br /&gt;if ( (button == GLUT_LEFT_BUTTON) &amp; (state == GLUT_DOWN)) {&lt;br /&gt;sigue=1;&lt;br /&gt;auxiliar();&lt;br /&gt;xo=x;&lt;br /&gt;yo=y;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ( (button == GLUT_RIGHT_BUTTON) &amp; (state == GLUT_DOWN) ) {&lt;br /&gt;sigue=0;&lt;br /&gt;&lt;br /&gt;xo=x;&lt;br /&gt;yo=y;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void onMotion(int x, int y) {&lt;br /&gt;alpha = (alpha + (y - yo));&lt;br /&gt;beta = (beta + (x - xo));&lt;br /&gt;xo = x; yo = y;&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;GLint command = 1;&lt;br /&gt;glClear (GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT);&lt;br /&gt;&lt;br /&gt;glLoadIdentity (); /* clear the matrix */&lt;br /&gt;/* viewing transformation */&lt;br /&gt;gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);&lt;br /&gt;&lt;br /&gt;if (command) {&lt;br /&gt;glColor3f(1.0,1.,0.0) ;&lt;br /&gt;text(250,200, incrementa, "%s","Reloj ");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;glutSwapBuffers();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;glutInit(&amp;argc, argv);&lt;br /&gt;glutInitDisplayMode (GLUT_DOUBLE GLUT_RGB);&lt;br /&gt;glutInitWindowSize (500, 500);&lt;br /&gt;glutInitWindowPosition (0,0);&lt;br /&gt;glutCreateWindow (argv[0]);&lt;br /&gt;init ();&lt;br /&gt;glutDisplayFunc(display);&lt;br /&gt;glutMouseFunc(onMouse);&lt;br /&gt;glutMotionFunc(onMotion);&lt;br /&gt;glutReshapeFunc(reshape);&lt;br /&gt;glutKeyboardFunc(keyboard);&lt;br /&gt;glutMainLoop();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void auxiliar(void){&lt;br /&gt;if(sigue==1)&lt;br /&gt;glutTimerFunc(1000,TimerFunction,1);&lt;br /&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-7559577072793258123?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/7559577072793258123/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=7559577072793258123' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/7559577072793258123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/7559577072793258123'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/reloj-uso-de-funcion-timer.html' title='PREVIO PRACTICA 5 RELOJ USO DE FUNCION TIMER'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-3803453160589560580</id><published>2007-04-09T16:15:00.000-07:00</published><updated>2007-04-09T16:49:17.798-07:00</updated><title type='text'>Previo Practica 5 parte 1</title><content type='html'>&lt;span style="color:#6600cc;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;&lt;strong&gt;API_GLUT&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#6600cc;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutCreateWindow (char *nombre)&lt;/span&gt;&lt;br /&gt;Crea la ventana, y el parámetro es el nombre de la misma. nombre: cadena de caracteres con el nombre de la ventana. Devuelve un entero que es el identificador único de la ventana. Esta función crea una ventana principal. Cuando se crea una ventana, la ventana activa pasa a ser esta nueva ventana. Toda ventana lleva implícito un contexto de visualización de OpenGL. Este contexto es el que permite que la ventana creada con GLUT (o en su caso, con cualquier entorno de ventanas) se ponga en contacto con OpenGL. Las ventanas creadas con esta función no son visualizadas todavía. La visualización la llevará a cabo una función de respuesta al evento de redibujado de la ventana.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutInit (int *argc, char **argv)&lt;br /&gt;&lt;/span&gt;argc: puntero al parámetro argc de la función main del programa.&lt;br /&gt;argv: parámetro argv de la función main.&lt;br /&gt;glutInit inicializa la librería GLUT, pudiéndosele pasar algún parámetro por línea de comandos a través de argc y argv. Esta rutina debe ser llamada una única vez al principio del programa. Ninguna otra función que no sea de inicialización puede llamarse antes. Si utilizamos alguna&lt;br /&gt;función de inicialización (con el prefijo glutInit-) delante de ésta función, estamos fijando el estado por defecto de la aplicación al inicializarse.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutInitWindowSize (int ancho, int alto)&lt;br /&gt;&lt;/span&gt;ancho: anchura de la ventana en pixels&lt;br /&gt;alto: altura de la ventana en pixels&lt;br /&gt;Esta rutina sirve para indicar el tamaño inicial de las ventanas que se creen.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutInitWindowPosition (int x, int y)&lt;/span&gt;&lt;br /&gt;x: posición en x de la ventana en pixels&lt;br /&gt;y: posición en y de la ventana en pixels&lt;br /&gt;Con esta función fijamos la posición inicial de las ventanas que se creen. Inicializar la posición de la ventana en el escritorio.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutInitDisplayMode (unsigned int modo)&lt;/span&gt;&lt;br /&gt;Inicializa el modo de visualización.&lt;br /&gt;modo: modo de display. Es una composición mediante conectores “” de algunos de&lt;br /&gt;los valores siguientes:&lt;br /&gt;GLUT_RGBA: Selecciona una ventana en modo RGBA. Es el valor por defecto si no se indican ni GLUT_RGBA ni GLUT_INDEX.&lt;br /&gt;GLUT_RGB: Lo mismo que GLUT_RGBA.&lt;br /&gt;GLUT_INDEX: Seleciona una ventana en modo de índice de colores. Se impone sobre GLUT_RGBA.&lt;br /&gt;GLUT_SINGLE: Selecciona una ventana en modo buffer simple. Es el valor por defecto.&lt;br /&gt;GLUT_DOUBLE: Selecciona una ventana en modo buffer doble. Se impone sobre GLUT_SINGLE.&lt;br /&gt;GLUT_ACCUM: Selecciona una ventana con un buffer acumulativo.&lt;br /&gt;GLUT_ALPHA: Selecciona una ventana con una componente alfa del buffer de color.&lt;br /&gt;GLUT_DEPTH: Selecciona una ventana con un buffer de profundidad.&lt;br /&gt;GLUT_STENCIL: Selecciona una ventana con un buffer de estarcido.&lt;br /&gt;GLUT_MULTISAMPLE: Selecciona una ventana con soporte multimuestra.&lt;br /&gt;GLUT_STEREO : Selecciona una ventana estéreo.&lt;br /&gt;GLUT_LUMINANCE: Selecciona una ventana con un modelo de color en tonos de gris.&lt;br /&gt;Esta función fija el modo de display inicial con que se crearán las ventanas. Los dos valores que suelen darse en la mayoría de las aplicaciones son GLUT_RGBA, para fijar un modelo de color RGB con componente alfa, y GLUT_DOUBLE para seleccionar una ventana con doble buffer.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutDisplayFunc(void (*func)(void));&lt;/span&gt;&lt;br /&gt;La función func() se llamará cada vez que haya que redibujar la ventana.&lt;br /&gt;GLUT no proporciona una función de respuesta por defecto para el redibujado, por lo que es obligatorio escribir una función de este tipo para cada ventana creada. Si se crea una ventana y no se registra la función de respuesta al redibujado, se produce un error.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutInitPosition(int x, int y);&lt;/span&gt;&lt;br /&gt;Posición x e y de la esquina superior izquierda de la nueva ventana, con respecto al escritorio en el que se trabaje.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));&lt;br /&gt;&lt;/span&gt;func: función de respuesta al evento.&lt;br /&gt;Se utiliza para registrar la función que responde a eventos del teclado sobre la ventana activa. La función de respuesta debe tener como parámetros la tecla que se ha pulsado (su carácter ASCII) y la posición (x,y) del puntero del ratón en ese momento, relativa a la ventana. No es posible detectar las teclas de modificadores directamente (CTRL, ALT, ...). Debemos utilizar para ello la función glutGetModifiers. Si no se registra ninguna función, los eventos de teclado son ignorados.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutMainLoop();&lt;/span&gt;&lt;br /&gt;Esta rutina debe llamarse una vez en el programa. Puesto que implementa un bucle infinito (realmente el bucle termina cuando se produce un evento de cerrar aplicación), la función no termina nunca. Por ello es necesario registrar previamente las funciones callback y que, además, la llamada a esta función sea la última de main.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutMouseFunc(void (*func)(int button, int state, int x, int y));&lt;/span&gt;&lt;br /&gt;Registra para la ventana activa la función de respuesta a eventos del ratón. Los eventos de ratón se producen tanto cuando se pulsa como cuando se suelta un botón del ratón. Los parámetros de la función de respuesta deben ser el botón (GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON o GLUT_RIGHT_BUTTON), el estado del botón (GLUT_UP o GLUT_DOWN) y la posición (x,y) del puntero relativa a la ventana.&lt;br /&gt;Cuando existe un menú asociado a un botón del ratón, el evento de pulsar ese botón es ignorado, prevaleciendo el menú sobre otras funcionalidades. Como en el caso del teclado, es posible detectar el uso de modificadores con la función glutGetModifiers. Si no registra una función de respuesta a eventos del ratón, éstos son ignorados.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutReshapeFunc(void (*func)(int ancho, int alto));&lt;/span&gt;&lt;br /&gt;Registra la función de respuesta al evento de redimensionamiento de la ventana activa. La función de respuesta debe tener como parámetros la anchura y la altura de la ventana tras el redimensionamiento. GLUT dispone, en este caso, de una función de respuesta por defecto, que se utiliza cuando no se registra ninguna función para este evento. El redimensionamiento de la ventana principal no genera ningún evento de redimensionamiento de sus subventanas, por lo que es necesario realizarlo explícitamente.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutPostRedisplay();&lt;/span&gt;&lt;br /&gt;Solicita el redibujado de la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidCone(Gldouble base, Gldouble height, Glint slices, Glint stacks);&lt;br /&gt;&lt;/span&gt;Dibuja un cono sólido, con un radio de longitud base, una altura height, numero de divisiones alrededor del eje z (slices) y numero de divisiones a lo largo del eje z.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireCone(Gldouble base, Gldouble height, Glint slices, Glint stacks);&lt;/span&gt;&lt;br /&gt;Dibuja un cono con líneas, con un radio de longitud base, una altura height, numero de divisiones alrededor del eje z (slices) y numero de divisiones a lo largo del eje z.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidCube(Gldouble size);&lt;/span&gt;&lt;br /&gt;Dibuja un cubo sólido, con size de longitud por lado.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireCube(Gldouble size);&lt;/span&gt;&lt;br /&gt;Dibuja un cubo con líneas, con size de longitud por lado.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidDodecahedron();&lt;/span&gt;&lt;br /&gt;Dibuja un dodecaedro sólido.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireDodecahedron();&lt;/span&gt;&lt;br /&gt;Dibuja un dodecaedro con líneas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidIcosahedron();&lt;/span&gt;&lt;br /&gt;Dibuja un icosaedro sólido.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireIcosahedron();&lt;/span&gt;&lt;br /&gt;Dibuja un icosaedro con líneas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidOctahedron();&lt;br /&gt;&lt;/span&gt;Dibuja un octaedro sólido.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireOctahedron();&lt;/span&gt;&lt;br /&gt;Dibuja un octaedro con líneas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidSphere(Gldouble radius, Glint slices, Glint stacks);&lt;/span&gt;&lt;br /&gt;Dibuja una esfera sólido, los parámetros son el radio, numero de divisiones alrededor del eje z (slices) y numero de divisiones a lo largo del eje z.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireSphere(Gldouble radius, Glint slices, Glint stacks);&lt;/span&gt;&lt;br /&gt;Dibuja una esfera con líneas, los parámetros son el radio, numero de divisiones alrededor del eje z (slices) y numero de divisiones a lo largo del eje z.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidTetrahedron();&lt;/span&gt;&lt;br /&gt;Dibuja un tetraedro sólido.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireTetrahedron();&lt;br /&gt;&lt;/span&gt;Dibuja un tetraedro con líneas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidTorus(Gldouble innerRadius, Gldouble outerRadius, Glint nSides, Glint nRings);&lt;br /&gt;&lt;/span&gt;Dibuja un toroide sólido, los parámetros son el radio interior, radio exterior, numero de divisiones radiales para cada sección nSides, y numero de secciones radiales nRings.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireTorus(Gldouble innerRadius, Gldouble outerRadius, Glint nSides, Glint nRings);&lt;/span&gt;&lt;br /&gt;Dibuja un toroide con líneas, los parámetros son el radio interior, radio exterior, numero de divisiones radiales para cada sección nSides, y numero de secciones radiales nRings.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSolidTeapot(Gldouble size);&lt;/span&gt;&lt;br /&gt;Dibuja una tetera sólida, con un radio size.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutWireTeapot(Gldouble size);&lt;/span&gt;&lt;br /&gt;Dibuja una tetera con líneas con un radio size.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutSpecialFunc(void (*func)(int key, int x, int y));&lt;/span&gt;&lt;br /&gt;Registra para la ventana activa el evento de pulsar una tecla especial. El parámetro tecla puede ser GLUT_KEY_Fn para teclas de función (n=1, 2, ..., 12), GLUT_KEY_RIGHT, GLUT_KEY_LEFT, GLUT_KEY_UP, GLUT_KEY_DOWN, GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN, GLUT_KEY_HOME, GLUT_KEY_END , GLUT_KEY_INSERT, GLUT KEY F1 , GLUT KEY F2,GLUT KEY F3,GLUT KEY F4,GLUT KEY F5,GLUT KEY F6, GLUT KEY F7,GLUT KEY F8,GLUT KEY F9,GLUT KEY F10, GLUT KEY F11, GLUT KEY F12.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSwapBuffers (void)&lt;/span&gt;&lt;br /&gt;Intercambia los buffers de la ventana actual. Se utiliza en el modo de doble buffer. Esta importante característica de OpenGL (y de GLUT por extensión) hace que se reduzcan al mínimo los parpadeos durante el redibujado, especialmente si hay animaciones. La ventana tiene dos buffers: uno de ellos visible y el otro invisible. El dibujo se realiza en el buffer oculto y, al intercambiarlos, se dibuja todo de una vez, eliminando así el parpadeo. Este tema lo trataremos con detalle cuando veamos OpenGL.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;glutTimerFunc(unsigned int msecs, (*func)(int value), int value);&lt;/span&gt;&lt;br /&gt;msecs: Número de milisegundos del temporizador&lt;br /&gt;func: Función de respuesta al evento&lt;br /&gt;value: Valor que debe utilizarse para llamar a la función de respuesta Registra tanto un temporizador como la función de respuesta al mismo.&lt;br /&gt;Debemos indicar el tiempo en milisegundos, un valor de identificación del temporizador y la función que responde al mismo, cuyo único parámetro debe ser el identificador del temporizador.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutGet (GLenum estado)&lt;br /&gt;&lt;/span&gt;estado: variable concreta de estado para la que deseamos obtener información.&lt;br /&gt;Devuelve un entero indicando el valor de la variable referida.&lt;br /&gt;Esta función devuelve el valor de una variable de estado. El parámetro estado hace referencia a la variable de la que deseamos conocer su valor. Este parámetro es un valor de una enumeración, entre cuyos valores encontramos GLUT_WINDOW_X, GLUT_WINDOW_Y, para obtener la posición de la ventana activa, GLUT_WINDOW_WIDTH, GLUT_WINDOW_HIGHT, para obtener el tamaño de la ventana activa, GLUT_WINDOW_PARENT, para obtener el identificador de la ventana padre de la activa, etc.&lt;br /&gt;GLUT WINDOW X X localizacion en pixeles respecto al origen,GLUT WINDOW Y Y localizacion relativa,GLUT WINDOW WIDTH ancho,GLUT WINDOW HEIGHT alto,GLUT WINDOW BUFFER SIZE numero de bits de la ventana para color puede ser tambien GLUT WINDOW RED SIZE para tono rojo, GLUT WINDOW GREEN SIZE tono verde,&lt;br /&gt;GLUT WINDOW BLUE SIZE tono azul, y GLUT WINDOW ALPHA SIZE alfa.&lt;br /&gt;GLUT WINDOW STENCIL SIZE numero de bits en el stencil buffer.&lt;br /&gt;GLUT WINDOW DEPTH SIZE Number of bits in the current window’s depth buffer.&lt;br /&gt;GLUT WINDOW ACCUM RED SIZE numero de bits acumulados en el buffer que son rojos,GLUT WINDOW ACCUM GREEN SIZE verdes, GLUT WINDOW ACCUM BLUE SIZE azules y GLUT WINDOW ACCUM ALPHA SIZE alfa.GLUT WINDOW DOUBLEBUFFER si esta activado el doble buffer, GLUT WINDOW RGBA si esta en modo RGBA, GLUT WINDOW PARENT numero de ventanas padres, GLUT WINDOW NUM CHILDREN numero de ventanas hijas, GLUT WINDOW COLORMAP SIZE tamaño del indice de color, GLUT WINDOW NUM SAMPLES numero de ejemplos, GLUT WINDOW STEREO si maneja stereo, GLUT WINDOW CURSOR para el cursor,GLUT SCREEN WIDTH ancho de pantalla en pixeles,GLUT SCREEN HEIGHT alto en pixeles en pantalla, GLUT SCREEN WIDTH MM ancho de pantalla en milimetros,GLUT SCREEN HEIGHT MM alto de pantalla en milimetros, GLUT MENU NUM ITEMS numero de items en el menu, GLUT DISPLAY MODE POSSIBLE modo de pantalla soportado, GLUT INIT DISPLAY MODE pantalla incial con mascara, GLUT INIT WINDOW X valor inicial de la x, GLUT INIT WINDOW Y valor inicial de la posicion y,GLUT INIT WINDOW WIDTH ancho inicial de la pantalla, GLUT INIT WINDOW HEIGHT alto inicial de la pantalla, GLUT ELAPSED TIME numero en milisegundos desde que glutIni llamo a glutGet.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutDeviceGet (GLenum info)&lt;/span&gt;&lt;br /&gt;info: dispositivo sobre el que obtener información&lt;br /&gt;Devuelve información sobre el dispositivo indicado&lt;br /&gt;Obtener información sobre los dispositivos del sistema. El parámetro info indica el dispositivo: GLUT_HAS_KEYBOARD, GLUT_HAS_MOUSE, GLUT_NUM_MOUSE_BUTTONS, etc. En los dos primeros casos, la función devuelve 0 si no existe el dispositivo y otro valor si existe. En el tercer caso, devuelve el número de botones del ratón. Existen valores de la enumeración para otros dispositivos.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutGetModifiers (void)&lt;/span&gt;&lt;br /&gt;Devuelve un valor que indica el modificador que se ha pulsado.&lt;br /&gt;Devuelve la tecla modificadora que ha sido pulsada: GLUT_ACTIVE_SHIFT, GLUT_ACTIVE_CTRL o GLUT_ACTIVE_ALT. La librería GLUT permite realizar otras muchas acciones, referentes al manejo del color, a la visualización de texto, al control de las capas y al diseño de algunas primitivas geométricas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutIdleFunc (void (*funcion) (void))&lt;/span&gt;&lt;br /&gt;funcion: función de respuesta al evento&lt;br /&gt;Registra la función de respuesta al evento idle. Este evento se produce cada vez que el sistema no tiene ningún otro evento que atender. En OpenGL se suele utilizar para hacer animaciones. La función que da respuesta al evento debe ser lo más pequeña posible para evitar mermas en la capacidad de interacción de la aplicación.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutMenuStatusFunc (void (*funcion) (int estado, int x, int y))&lt;/span&gt;&lt;br /&gt;funcion: función de respuesta al evento&lt;br /&gt;Registra la función que responde al evento que se produce cuando se despliega o se pliega un menú. El parámetro estado puede valer GLUT_MENU_IN_USE cuando se despliega un menú, o GLUT_MENU_NOT_IN_USE cuando se pliega. Los valores (x,y) son la posición del puntero del ratón en cada caso.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutMotionFunc (void (*funcion) (int x, int y))&lt;br /&gt;&lt;/span&gt;La función func(x, y) se llamará cuando el mouse se mueva mientras está pulsado uno de sus botones.&lt;br /&gt;Registra para la ventana activa la función de respuesta a movimientos del ratón cuando se mantiene pulsado algún botón del mismo. Los parámetros (x,y) indican la posición del puntero en coordenadas relativas a la ventana.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutPassiveMotionFunc (void (*funcion) (int x, int y))&lt;/span&gt;&lt;br /&gt;Registra para la ventana activa la función de respuesta a movimientos del ratón cuando no se mantiene pulsado ningún botón del mismo. Los parámetros (x,y) indican la posición del puntero en coordenadas relativas a la ventana.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutVisibilityFunc (void (*funcion) (int estado)):&lt;/span&gt;&lt;br /&gt;Registra para la ventana activa la función de respuesta al evento de cambios en la visibilidad de la ventana. El parámetro estado puede ser GLUT_NOT_VISIBLE o GLUT_VISIBLE.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutEntryFunc (void (*funcion) (int estado)):&lt;/span&gt;&lt;br /&gt;Registra para la ventana activa la función de respuesta al evento de entrada y salida del ratón en el área de la ventana. El parámetro estado puede ser GLUT_LEFT o GLUT_ENTERED.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutCreateSubWindow (int idVentanaPadre, int x, int y, int ancho, int alto)&lt;/span&gt;&lt;br /&gt;idVentanaPadre: identificador de la ventana padre de la subventana&lt;br /&gt;x, y: posición (x,y) en pixels de la subventana, relativa a la ventana padre ancho, alto: anchura y altura de la subventana en pixels. Devuelve un identificador único para la subventana&lt;br /&gt;Esta rutina crea una subventana, hija de la ventana identificada por idVentanaPadre. La ventana activa de la aplicación pasa a ser la nueva subventana. Como en el caso de las ventanas principales, las subventanas llevan asociado un contexto de visualización, y su modo de display viene dado por las especificaciones iniciales (no así su tamaño y su posición, que en este caso son dados explícitamente).&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSetWindow (int idVentana)&lt;/span&gt;&lt;br /&gt;idVentana: identificador de la ventana&lt;br /&gt;Fija la ventana identificada por idVentana como ventana activa.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutGetWindow (void)&lt;/span&gt;&lt;br /&gt;Devuelve el identificador de la ventana activa&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutDestroyWindow (int idVentana)&lt;/span&gt;&lt;br /&gt;idVentana: identificador de la ventana. Destruye la ventana identificada por idVentana.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutPositionWindow (int x, int y)&lt;/span&gt;&lt;br /&gt;x, y: posición (x,y) en pixels de la ventana&lt;br /&gt;Solicita el cambio de la posición de la ventana actual en la pantalla. Si la ventana actual es principal, (x,y) se toma con referencia al origen de la pantalla. Si es una subventana, la distancia se toma con referencia al origen de la ventana padre.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutReshapeWindow (int ancho, int alto)&lt;br /&gt;&lt;/span&gt;ancho: anchura de la ventana en pixels&lt;br /&gt;alto: altura de la ventana el pixels&lt;br /&gt;Solicita el cambio del tamaño de la ventana actual, dándole al ancho y el alto especificados.&lt;br /&gt;Otras funciones referentes a las ventanas se muestran a continuación junto con una breve descripción.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutFullScreen (void):&lt;/span&gt;&lt;br /&gt;Solicita que la ventana actual sea maximizada. Sólo funciona para ventanas principales.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutPopWindow (void):&lt;br /&gt;&lt;/span&gt;Adelanta la ventana actual una posición en la pila de ventanas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutPushWindow (void): &lt;/span&gt;&lt;br /&gt;Retrasa la ventana actual una posición en la pila de ventanas.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutShowWindow (void):&lt;/span&gt;&lt;br /&gt;Muestra la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutHideWindow (void): &lt;/span&gt;&lt;br /&gt;Oculta la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutIconifyWindow (void):&lt;/span&gt;&lt;br /&gt;Solicita la minimización de la ventana actual y su conversión en icono.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSetWindowTitle (char *nombre):&lt;br /&gt;&lt;/span&gt;Cambia el nombre de la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSetIconTitle (char *nombre):&lt;/span&gt;&lt;br /&gt;Da nombre a la ventana actual cuando está minimizada.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSetCursor (int cursor):&lt;/span&gt;&lt;br /&gt;Cambia el puntero del ratón cuando sobrevuela la ventana actual. El parámetro es un valor de una enumeración.&lt;br /&gt;GLUT CURSOR RIGHT ARROW, GLUT CURSOR LEFT ARROW,GLUT CURSOR INFO,GLUT CURSOR DESTROY,GLUT CURSOR HELP,GLUT CURSOR CYCLE,GLUT CURSOR SPRAY,&lt;br /&gt;GLUT CURSOR WAIT,GLUT CURSOR TEXT, GLUT CURSOR CROSSHAIR, GLUT CURSOR UP DOWN, GLUT CURSOR LEFT RIGHT, GLUT CURSOR TOP SIDE, GLUT CURSOR BOTTOM SIDE, GLUT CURSOR LEFT SIDE, GLUT CURSOR RIGHT SIDE, GLUT CURSOR TOP LEFT CORNER, GLUT CURSOR TOP RIGHT CORNER, GLUT CURSOR BOTTOM RIGHT CORNER, GLUT CURSOR BOTTOM LEFT CORNER, GLUT CURSOR FULL CROSSHAIR, GLUT CURSOR CROSSHAIR).,GLUT CURSOR NONE,GLUT CURSOR INHERIT.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutCreateMenu (void (*funcion) (int valor)) &lt;/span&gt;&lt;br /&gt;Esta función crea un menú (todavía sin opciones), y le asigna la función func(value). Esta función se llamará cada vez que una de las opciones del menú sea seleccionada por el usuario, y recibirá en value el código identificativo de la opción seleccionada. De esta manera, podremos definir que hace cada opción de menú. Devuelve un identificador de menú, que nos&lt;br /&gt;servirá cuando tengamos que referirnos a él.&lt;br /&gt;funcion: Función callback a la que se llama cuando se selecciona un ítem del menú.&lt;br /&gt;El valor que se le pasa a la función identifica al ítem del menú.&lt;br /&gt;Devuelve un identificador único para el menú.&lt;br /&gt;Esta función crea un menú flotante asociado a la ventana actual y devuelve un identificador único para el mismo. Este menú pasa a ser el menú activo.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSetMenu (int idMenu)&lt;/span&gt;&lt;br /&gt;Esta función hace que el menú identificado como idmenu sea el menú actual.&lt;br /&gt;Por defecto, el menú actual es el último que se ha creado.&lt;br /&gt;idMenu: identificador del menú.&lt;br /&gt;Esta función pone el menú identificado por idMenu como menú activo.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutGetMenu (void)&lt;br /&gt;&lt;/span&gt;Devuelve un identificador de menú. Devuelve el identificador del menú activo.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutDestroyMenu (int idMenu)&lt;br /&gt;&lt;/span&gt;idMenu: identificador del menú. Destruye el menú identificado por idMenu.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutAddMenuEntry (char *nombre, int valor)&lt;/span&gt;&lt;br /&gt;Añade una opción de menú al menú actual. Esta opción se llamará nombre y&lt;br /&gt;se identificará por el número valor.&lt;br /&gt;nombre: cadena de caracteres que aparece en la opción del menú valor: identificador para el ítem del menú. Este valor es el que se pasa a la función de respuesta al menú.&lt;br /&gt;Añade una entrada al final del menú activo, y la cadena que se visualiza es el nombre. Cuando el usuario selecciona esa opción, se llama a la función de respuesta con el valor como parámetro.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutAddSubMenu (char *nombre, int idMenu)&lt;/span&gt;&lt;br /&gt;Añade una opción de menú que abrirá un submenú.&lt;br /&gt;nombre: cadena de caracteres que aparece en la opción del menú principal.&lt;br /&gt;idMenu: identificador del submenú asociado al ítem.&lt;br /&gt;Crea un ítem del menú y le asocia un submenú que se despliega al ser seleccionada la entrada del menú principal. El submenú debe haber sido creado previamente como cualquier otro menú.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutChangeToSubMenu (int entrada, char *nombre, int valor):&lt;/span&gt;&lt;br /&gt;Cambia un submenú por otro.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutRemoveMenuItem (int entrada):&lt;/span&gt;&lt;br /&gt;Elimina una entrada del menú.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutDetachMenu (int boton):&lt;/span&gt;&lt;br /&gt; Elimina la asociación entre el menú activo y el botón del ratón.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutAttachMenu (int boton)&lt;/span&gt;&lt;br /&gt;boton: botón del ratón al que asociamos el menú.&lt;br /&gt;Asocia el menú activo a un botón del ratón en la ventana activa, de manera que el menú se despliega cuando se pulsa el botón del ratón. El botón puede valer GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON o GLUT_RIGHT_BUTTON, para asociarlo al botón izquierdo, central o derecho respectivamente.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutChangeToMenuEntry (int entrada, char *nombre, int valor):&lt;/span&gt;&lt;br /&gt;Cambia la entrada (el parámetro entrada indica el índice de la misma, empezando en 1) por otra diferente. Esta función sirve para modificar una opción del menú actual. El parámetro entry nos indica la opción a modificar (por ejemplo, para modificar la primera, entry = 1), name será el nuevo nombre de la opción y value el nuevo identificador que se le pasará a la función controladora de menú.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutEstablishOverlay(void);&lt;/span&gt;&lt;br /&gt;Establece la capa.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutUseLayer(GLenum layer);&lt;/span&gt;&lt;br /&gt;Usar capa.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutRemoveOverlay(void);&lt;/span&gt;&lt;br /&gt;Remueve la capa actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutPostOverlayRedisplay(void); &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;Mostra la capa siguiente.&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;&lt;br /&gt;void glutShowOverlay(void);&lt;br /&gt;&lt;span style="color:#000000;"&gt;Mostrar capa.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;void glutHideOverlay(void);&lt;br /&gt;&lt;span style="color:#000000;"&gt;Muestra la textura de la capa.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;void glutOverlayDisplayFunc(void (*func)(void));&lt;br /&gt;&lt;span style="color:#000000;"&gt;Crea una funcion que devulve la capa a mostrar.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;v&lt;/span&gt;&lt;span style="color:#6600cc;"&gt;oid glutSpaceballMotionFunc(void (*func)(int x, int y, int z)); &lt;/span&gt;&lt;br /&gt;Pone el movimiento del Spaceball en la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSpaceballRotateFunc(void (*func)(int x, int y, int z));&lt;/span&gt;&lt;br /&gt;Pone el Spaceball dependiendo la rotación en la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSpaceballButtonFunc(void (*func)(int button, int state));&lt;/span&gt;&lt;br /&gt;Pone el Spaceball en la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutButtonBoxFunc(void (*func)(int button, int state));&lt;/span&gt;&lt;br /&gt;Pone la caja dial &amp; button box a través de un callback en la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutDialsFunc(void (*func)(int dial, int value)); &lt;/span&gt;&lt;br /&gt;Pone la caja dial &amp; button box a través de un callback en la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutTabletMotionFunc(void (*func)(int x, int y));&lt;/span&gt;&lt;br /&gt;Coloca el teclado especial a través de un callback en la ventana actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutSetColor(int cell, GLfloat red, GLfloat green, GLfloat blue);&lt;br /&gt;&lt;/span&gt;Pone el color de mapa entre la capa en uso y la actual ventana.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;GLfloat glutGetColor(int cell, int component);&lt;/span&gt;&lt;br /&gt;Regresa verde, rojo o azul de un color dado en el índice de color de mapa entre la capa en uso y la capa actual.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutCopyColormap(int win); &lt;/span&gt;&lt;br /&gt;Copia el color del mapa para la capa en uso de una especifica ventana.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutLayerGet(GLenum info);&lt;/span&gt;&lt;br /&gt;Regresa el estado de GLUT perteneciente a las capas de la ventana actual. La información es sobre:&lt;br /&gt;GLUT OVERLAY ,GLUT LAYER IN USE, GLUT NORMAL, GLUT OVERLAY, GLUT HAS OVERLAY, GLUT TRANSPARENT INDEX, GLUT NORMAL DAMAGED, GLUT OVERLAY DAMAGED.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutDeviceGet(GLenum info);&lt;/span&gt;&lt;br /&gt;Recupera informacion acerca del recurso de GLUT representado por enteros.&lt;br /&gt;GLUT HAS KEYBOARD, GLUT HAS MOUSE, GLUT HAS SPACEBALL, GLUT HAS DIAL AND BUTTON BOX,&lt;br /&gt;GLUT HAS TABLET, regresan No-cero si es viable, cero si no es viable.&lt;br /&gt;GLUT NUM MOUSE BUTTONS Numeros de botones soportados por el mouse. Si no existe maouse regresa 0.&lt;br /&gt;GLUT NUM SPACEBALL BUTTONS Numero de botones que soporta el Spaceball.&lt;br /&gt;GLUT NUM BUTTON BOX BUTTONS Numero de botones que soporta el dial&amp;buttonbox.&lt;br /&gt;GLUT NUM Numero de selectores para la caja dial&amp;amp;button&lt;br /&gt;GLUT NUM TABLET BUTTONS Numero de botones soportada por la tableta.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutGetModifiers(void);&lt;/span&gt;&lt;br /&gt;Regresa la modificacion de las llaves de estado cuando ciertos callbacks son generados.&lt;br /&gt;GLUT ACTIVE SHIFT si el modificador shift o caps fueron activados.&lt;br /&gt;GLUT ACTIVE CTRL si fue presionado Ctrl.&lt;br /&gt;GLUT ACTIVE ALT si fue modificado Alt.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutExtensionSupported(char *extension);&lt;/span&gt;&lt;br /&gt;Ayuda a facilitar si algunas determinadas extensiones son soportadas por OpenGL.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutBitmapCharacter(void *font, int character);&lt;br /&gt;&lt;/span&gt;Regresa el ancho en pixeles de un caracter tipo mapa de bits dependiendo de la fuente que puede ser:&lt;br /&gt;GLUT BITMAP 8 BY 13 Fija una fuente donde cada cara ter tiene un rectangulo de tamaño 8 por 13 pixeles.&lt;br /&gt;GLUT BITMAP 9 BY 15 Fija una fuente donde cada cara ter tiene un rectangulo de tamaño 9 por 15 pixeles.&lt;br /&gt;GLUT BITMAP TIMES ROMAN 10 Proporcional al Times Roman tamaño 10.&lt;br /&gt;GLUT BITMAP TIMES ROMAN 24 Proporcional al Times Roman tamaño 24.&lt;br /&gt;GLUT BITMAP HELVETICA 10 Proporcional a la Helveltica tamaño 10.&lt;br /&gt;GLUT BITMAP HELVETICA 12 10 Proporcional a la Helveltica tamaño 12.&lt;br /&gt;GLUT BITMAP HELVETICA 18 10 Proporcional a la Helveltica tamaño 18.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutBitmapWidth(GLUTbitmapFont font, int character);&lt;/span&gt;&lt;br /&gt;Regresa el ancho en pixeles de un caracter tipo mapa de bits dependiendo de la fuente.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;void glutStrokeCharacter(void *font, int character);&lt;/span&gt;&lt;br /&gt;Representa un caracter tipo stroke, con un definido font que puede ser:&lt;br /&gt;GLUT STROKE ROMAN A proporciona una fuente tipo Romano su tamaño maximo es de 119.05 unidades y minimo de 33.33 unidades.&lt;br /&gt;GLUT STROKE MONO ROMAN A .&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6600cc;"&gt;int glutStrokeWidth(GLUTstrokeFont font, int character);&lt;/span&gt;&lt;br /&gt;Regresa el ancho en pixeles de un caracter tipo stroke dependiendo del font.&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#6600cc;"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-3803453160589560580?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/3803453160589560580/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=3803453160589560580' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/3803453160589560580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/3803453160589560580'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/previo-practica-5-parte-1_9854.html' title='Previo Practica 5 parte 1'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-509733165257816447</id><published>2007-04-09T16:08:00.000-07:00</published><updated>2007-04-09T16:11:37.572-07:00</updated><title type='text'>REPORTE PRACTICA 4</title><content type='html'>En la práctica se hablo del doble buffering que en GLUT esta dado por DoubleBuffer, que indica el espacio de almacenamiento doble, en este espacio se almacenan datos y reduce el parpadeo en la imagen, ya que cuando se dibuja una imagen y se borra el tiempo de ejecución aumenta, con esta función el tiempo se reduce por que se tienen en lugar de 1 solo bufer se tienen dos.&lt;br /&gt;&lt;br /&gt;Los parámetros de la función son los siguientes:&lt;br /&gt;&lt;br /&gt;glutInitDisplayMode(GLUT_DOUBLEGLUT_RGBGLUT_DEPTH) ;&lt;br /&gt;&lt;br /&gt;donde :&lt;br /&gt;&lt;br /&gt;GLUT_DOUBLE : Evita parpadeo, doble buffer.&lt;br /&gt;GLUT_RGB : Indica el color en rojo, verde y azul.&lt;br /&gt;GLUT_DEPTH: Indica pruebas de profundidad, también llamado z buffer.&lt;br /&gt;&lt;br /&gt;Como se ha visto en las practicas se ha utilizado la función glFlush(), esta función se encarga de vaciar el contenido del Frame Buffer en la pantalla de video.&lt;br /&gt;&lt;br /&gt;Para el doble buffering se utiliza una función similar a glFlush() llamado glutSwapBuffers(), que se encarga de intercambiar los buffers, cuando se utiliza esta función, glFhush() es redundante y se puede omitir.&lt;br /&gt;&lt;br /&gt;También se hablo de funciones como:&lt;br /&gt;&lt;br /&gt;glClear(GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT); que se encarga de limpiar la pantalla donde estan los píxeles.&lt;br /&gt;&lt;br /&gt;glutPostRedisplay(); Genera un elemento de redibujado según las modificaciones, se fuerza el evento de redibujado.&lt;br /&gt;&lt;br /&gt;glutSpecialFunc(); Que se utiliza para definir las teclas F1-F12, y otras especiales.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Estas funciones se explican más a detalle en el API_GLUT mostrado en este blog&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-509733165257816447?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/509733165257816447/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=509733165257816447' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/509733165257816447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/509733165257816447'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/reporte-practica-4.html' title='REPORTE PRACTICA 4'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-730738108528998480</id><published>2007-04-08T10:46:00.000-07:00</published><updated>2007-04-08T10:48:01.759-07:00</updated><title type='text'></title><content type='html'>ALGORITMO MEJORADO&lt;br /&gt;Void linea(int xo, yo, x1, y1)&lt;br /&gt;{&lt;br /&gt;int y=y0;&lt;br /&gt;flot mint x=x0;&lt;br /&gt;m=(y1-y0)/(x1-x0);&lt;br /&gt;punto(x,y);if (m&lt;0) m="m*(-1);&lt;br /&gt;"&gt;do { x=x+1; y=y+m+0.5;&lt;br /&gt;punto (x,y);&lt;br /&gt; }while(y!=y1);&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-730738108528998480?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/730738108528998480/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=730738108528998480' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/730738108528998480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/730738108528998480'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/04/algoritmo-mejorado-void-lineaint-xo-yo.html' title=''/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-965309037456468871</id><published>2007-03-20T08:15:00.000-07:00</published><updated>2007-03-20T08:16:59.522-07:00</updated><title type='text'></title><content type='html'>PRACTICA 3&lt;br /&gt;&lt;br /&gt;Humaniode con manos&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;gl/glut.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;windows.h&gt;&lt;br /&gt;#include &lt;math.h&gt;&lt;br /&gt;&lt;br /&gt;void mano(float ang,float rpy,float rpz,float rpyf123,float rpyf23,float rpyf3,float rixf123,float rixf23,float rixf3,float rmxf123,float rmxf23,float rmxf3,float raxf123,float raxf23,float raxf3,float rmexf123,float rmexf23,float rmexf3,float rmaz,float rmax,float rmay);&lt;br /&gt;&lt;br /&gt;void mueveExtremidades(float abd, float abi, float apd,float api,float x1,float y1,float z1);&lt;br /&gt;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClearColor (0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glShadeModel (GL_FLAT);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT);&lt;br /&gt;glColor3f (1.0, 1.0, 1.0);&lt;br /&gt;glLoadIdentity (); /* clear the matrix */&lt;br /&gt;/* viewing transformation */&lt;br /&gt;gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glScalef (1.0, 1.0, 1.0); /* modeling transformation */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glScalef(0.1,.6,1.0);&lt;br /&gt;glTranslatef(-21,2.75f,0.0f);&lt;br /&gt;glRotatef(90,0,0,1);&lt;br /&gt;mano(0,1,45,0,0, 45,0,0, 45,0,0, 45,0,0, -20,0,0, -15, 0,1,0 );&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glScalef(0.1,.6,1.0);&lt;br /&gt;glTranslatef(21,2.75f,0.0f);&lt;br /&gt;glRotatef(-90,0,0,1);&lt;br /&gt;mano(0,1,45,0,0, 45,0,0, 45,0,0, 45,0,0, -20,0,0, -15, 0,1,0 ,);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;mueveExtremidades(8,-8,8,-8,0,0,0);&lt;br /&gt;&lt;br /&gt;glFlush ();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, (GLsizei) w, (GLsizei) h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);&lt;br /&gt;glMatrixMode (GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* ARGSUSED1 */&lt;br /&gt;void keyboard(unsigned char key, int x, int y)&lt;br /&gt;{&lt;br /&gt;switch (key) {&lt;br /&gt;case 27:&lt;br /&gt;exit(0);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;nt main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;   glutInit(&amp;argc, argv);&lt;br /&gt;   glutInitDisplayMode (GLUT_SINGLE  GLUT_RGB);&lt;br /&gt;   glutInitWindowSize (500, 500);&lt;br /&gt;   glutInitWindowPosition (300,230);&lt;br /&gt;   glutCreateWindow (argv[0]);&lt;br /&gt;   init ();&lt;br /&gt;   glutDisplayFunc(display);&lt;br /&gt;   glutReshapeFunc(reshape);&lt;br /&gt;   glutKeyboardFunc(keyboard);&lt;br /&gt;   glutMainLoop();&lt;br /&gt;&lt;br /&gt;   return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void mueveExtremidades(float abd, float abi, float apd,float api,float x1,float y1,float z1)&lt;br /&gt;{&lt;br /&gt;float x,y,z,brazod, brazoi, pied, piei;&lt;br /&gt;x=x1;&lt;br /&gt;y=y1;&lt;br /&gt;z=z1;&lt;br /&gt;brazod=abd;&lt;br /&gt;brazoi=abi;&lt;br /&gt;pied=apd;&lt;br /&gt;piei=api;&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;//cabeza&lt;br /&gt;glTranslatef(0.0f,2.5f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;//tronco&lt;br /&gt;glScalef(2.5,2.5,2.0);&lt;br /&gt;glTranslatef(0.0f,-0.45f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//piernas&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;//pierna izquierda&lt;br /&gt;glRotatef(piei,x,y,z);&lt;br /&gt;glTranslatef(-0.1f,-0.55f,0.0f);&lt;br /&gt;glScalef(-.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;&lt;br /&gt;glTranslatef(0.0f,-0.7f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,.35f,0.0f);&lt;br /&gt;glScalef(1.1,.4,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;//pies&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(.3f,-1.0f,0.0f);&lt;br /&gt;glScalef(1.6,.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;//pierna derecha&lt;br /&gt;glRotatef(pied,x,y,z);&lt;br /&gt;glTranslatef(0.1f,-0.55f,0.0f);&lt;br /&gt;glScalef(-.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;&lt;br /&gt;glTranslatef(0.0f,-0.7f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,.35f,0.0f);&lt;br /&gt;glScalef(1.1,.4,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;//pies&lt;br /&gt;glTranslatef(-.3f,-1.0f,0.0f);&lt;br /&gt;glScalef(1.6,.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;//brazo derecho&lt;br /&gt;glPushMatrix();&lt;br /&gt;glRotatef(brazod,x,y,z);&lt;br /&gt;glTranslatef(0.35f,0.1f,0.0f);&lt;br /&gt;glScalef(0.5,0.4,.5);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;&lt;br /&gt;glTranslatef(0.4f,0.0f,0.0f);&lt;br /&gt;glScalef(0.5,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(0.7f,0.0f,0.0f);&lt;br /&gt;glScalef(.7,1,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//brazo izquierdo&lt;br /&gt;glPopMatrix();&lt;br /&gt;glRotatef(brazoi,x,y,z);&lt;br /&gt;glTranslatef(-0.35f,0.1f,0.0f);&lt;br /&gt;glScalef(0.5,0.4,.5);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.4f,0.0f,0.0f);&lt;br /&gt;glScalef(0.5,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(-0.7f,0.0f,0.0f);&lt;br /&gt;glScalef(.7,1,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void mano(float ang,float rpy,float rpz,float rpyf123,float rpyf23,float rpyf3,float rixf123,float rixf23,float rixf3,float rmxf123,float rmxf23,float rmxf3,float raxf123,float raxf23,float raxf3,float rmexf123,float rmexf23,float rmexf3,float rmaz,float rmax,float rmay)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;glRotatef(ang,rmax,rmay,rmaz);&lt;br /&gt;glPushMatrix();&lt;br /&gt;   //palma&lt;br /&gt;  &lt;br /&gt;   glScalef(4,3,2);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;  &lt;br /&gt;glPushMatrix();&lt;br /&gt;   //pulgar&lt;br /&gt;   //falange1&lt;br /&gt;   glRotatef(rpyf123,0,1,0);&lt;br /&gt;   glTranslatef(1.25f,-0.55f,0.0f);&lt;br /&gt;   glScalef(1.25,1,1);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt; //falange2  &lt;br /&gt;   glRotatef(rpyf23,0,1,0);    &lt;br /&gt;   glTranslatef(.5f,0.0f,0.0f);&lt;br /&gt;    glScalef(1,1,1);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;  &lt;br /&gt; //falange3   &lt;br /&gt;   glRotatef(rpyf3,0,1,0);   &lt;br /&gt;   glTranslatef(0.39f,0.0f,0.0f);&lt;br /&gt;   glScalef(.5,1,1);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;   //indice&lt;br /&gt;   //falange1&lt;br /&gt;   glRotatef(rixf123,1,0,0);&lt;br /&gt;   glScalef(1,1.5,1);&lt;br /&gt;   glTranslatef(0.75f,0.75f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt; //falange2       &lt;br /&gt;   glRotatef(rixf23,1,0,0);&lt;br /&gt;   glScalef(1,1.25,1);&lt;br /&gt;   glTranslatef(0.0f,0.45f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt; //falange3      &lt;br /&gt;   glRotatef(rixf3,1,0,0);&lt;br /&gt;   glScalef(1,.5,1);&lt;br /&gt;   glTranslatef(0.0f,.75f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();   &lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;   //medio&lt;br /&gt;   //falange1&lt;br /&gt;   glRotatef(rmxf123,1,0,0);&lt;br /&gt;   glScalef(1,1.5,1);&lt;br /&gt;   glTranslatef(0.25f,0.75f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;   //falange2 &lt;br /&gt;   glRotatef(rmxf23,1,0,0);&lt;br /&gt;   glScalef(1,1.25,1);&lt;br /&gt;   glTranslatef(0.0f,0.45f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;  &lt;br /&gt;   //falange3     &lt;br /&gt;   glRotatef(rmxf3,1,0,0); &lt;br /&gt;   glScalef(1,.75,1);&lt;br /&gt;   glTranslatef(0.0f,.60f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;  &lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;   //Angular&lt;br /&gt;   //falange1&lt;br /&gt;   glRotatef(raxf123,1,0,0);&lt;br /&gt;   glScalef(1,1.25,1);&lt;br /&gt;   glTranslatef(-0.25f,0.860f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;   //falange2       &lt;br /&gt;   glScalef(1,1.25,1);&lt;br /&gt;   glRotatef(raxf23,1,0,0);&lt;br /&gt;   glTranslatef(0.0f,.45f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;  &lt;br /&gt;   //falange3&lt;br /&gt;   glRotatef(raxf3,1,0,0);       &lt;br /&gt;   glScalef(1,1,1);&lt;br /&gt;   glTranslatef(0.0f,.5f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;  &lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;   //meñique&lt;br /&gt;   //falange1&lt;br /&gt;   glRotatef(rmexf123,1,0,0);&lt;br /&gt;   glScalef(1,1.2,1);&lt;br /&gt;   glTranslatef(-0.75f,0.86f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;   //falange2&lt;br /&gt;   glRotatef(rmexf23,1,0,0);       &lt;br /&gt;   glScalef(1,1,1);&lt;br /&gt;   glTranslatef(0.0f,0.5f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;  &lt;br /&gt;   //falange3&lt;br /&gt;   glRotatef(rmexf3,1,0,0);       &lt;br /&gt;   glScalef(1,1,1);&lt;br /&gt;   glTranslatef(0.0f,.5f,0.0f);&lt;br /&gt;   glutWireCube (0.5);&lt;br /&gt;  &lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-965309037456468871?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/965309037456468871/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=965309037456468871' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/965309037456468871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/965309037456468871'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/03/practica-3-humaniode-con-manos-include.html' title=''/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-5137517073212227420</id><published>2007-03-16T11:56:00.000-07:00</published><updated>2007-03-16T12:59:19.789-07:00</updated><title type='text'></title><content type='html'>&lt;div align="justify"&gt;Matriz de Transformación&lt;br /&gt;El orden es primero rotación (z a x) y luego traslación por -d, dado que mover la cámara es como mover el mundo en la dirección opuesta.&lt;br /&gt;Otro método para generar la matriz de transformación y rotación consiste en calcular los vectores unitarios uvn y formar la matriz de rotación compuesta de manera directa. Dados los vectores N y V, se calculan estos vectores unitarios como&lt;br /&gt;n = N / çN ç= ( n1, n2, n3 )&lt;br /&gt;u= VxN / ç VxN ç= ( u1, u2, u3 )&lt;br /&gt;v = nxu = ( v1, v2, v3 )&lt;br /&gt;Este método también ajusta en forma automática la dirección de V de modo que v sea perpendicular a n.&lt;br /&gt;La matriz de rotación compuesta para la transformación de vista es&lt;/div&gt;&lt;img id="BLOGGER_PHOTO_ID_5042614196891201682" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_mYG88_6hQGg/Rfr25SkKsJI/AAAAAAAAAB0/zJ3KTuT2hYM/s320/matriz.bmp" border="0" /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;que transforma u en el eje mundial de xw, v en el eje de yw y n en el eje de zw. Esta matriz lleva a cabo de manera automática la reflexión necesaria para transformar un sistema de vista de lado izquierdo en un sistema mundial de lado derecho.&lt;br /&gt;La transformación completa de coordenadas mundiales a coordenadas de vista se obtiene como el producto de matriz&lt;br /&gt;&lt;br /&gt;MVC ¬WC = R · T-1&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;glViewport(0, 0, width, height);&lt;br /&gt;&lt;br /&gt;Esta función define la porción de ventana donde puede dibujar ogl. Los parámetros son x e y, esquina superior izquierda del "cuadro" donde puede dibujar (con&lt;br /&gt;referencia la ventana), y ancho y alto. En este caso coje el width y height, que son los parámetros de reshape(), es decir, los datos que acaba de recibir por culpa&lt;br /&gt;del reescalado de la ventana.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-5137517073212227420?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/5137517073212227420/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=5137517073212227420' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5137517073212227420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5137517073212227420'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/03/matriz-de-transformacin-el-orden-es.html' title=''/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mYG88_6hQGg/Rfr25SkKsJI/AAAAAAAAAB0/zJ3KTuT2hYM/s72-c/matriz.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-6234688006687356013</id><published>2007-03-13T15:08:00.000-07:00</published><updated>2007-03-13T15:49:36.230-07:00</updated><title type='text'></title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;Espacio vectorial&lt;br /&gt;&lt;br /&gt;Un espacio vectorial (o espacio lineal) es el objeto básico de estudio en la rama de la&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;a title="Matemática" href="http://es.wikipedia.org/wiki/MatemÃ¡tica"&gt;&lt;span style="color:#000000;"&gt;matemática&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; llamada &lt;/span&gt;&lt;a title="Álgebra lineal" href="http://es.wikipedia.org/wiki/Ãlgebra_lineal"&gt;&lt;span style="color:#000000;"&gt;álgebra lineal&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;. Las operaciones que podemos realizar entre ellos son: la suma de vectores y la multiplicación por un escalar,el producto punto, el producto vectorial y el triple preduco escalar con algunas restricciones naturales como el cierre de estas operaciones, la asociatividad de estas y la combinación de estas operaciones, siguiendo, llegamos a la descripción de una estructura matemática llamada espacio vectorial.&lt;br /&gt;&lt;br /&gt;Definición formal&lt;br /&gt;Dado un &lt;/span&gt;&lt;a title="Cuerpo (matemática)" href="http://es.wikipedia.org/wiki/Cuerpo_(matemÃ¡tica)"&gt;&lt;span style="color:#000000;"&gt;cuerpo&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;a title="Conmutatividad" href="http://es.wikipedia.org/wiki/Conmutatividad"&gt;&lt;span style="color:#000000;"&gt;conmutativo&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; de escalares K (como el cuerpo de los &lt;/span&gt;&lt;a title="Número real" href="http://es.wikipedia.org/wiki/NÃºmero_real"&gt;&lt;span style="color:#000000;"&gt;números reales&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; o el cuerpo de los &lt;/span&gt;&lt;a title="Número complejo" href="http://es.wikipedia.org/wiki/NÃºmero_complejo"&gt;&lt;span style="color:#000000;"&gt;números complejos&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;), en el que llamaremos por:&lt;br /&gt;0 (cero) al elemento nulo.&lt;br /&gt;&lt;/span&gt;1 (uno) al elemento unidad.&lt;br /&gt;&lt;span style="color:#000000;"&gt;Un &lt;/span&gt;&lt;a title="Conjunto" href="http://es.wikipedia.org/wiki/Conjunto"&gt;&lt;span style="color:#000000;"&gt;conjunto&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; V dotado de una ley de composición interna (+), (suma de vectores), y una ley de composición externa (·), (producto por un escalar), respecto al cuerpo K, es un espacio vectorial si y solo si:&lt;br /&gt;V tiene estructura de &lt;/span&gt;&lt;a title="Grupo conmutativo" href="http://es.wikipedia.org/wiki/Grupo_conmutativo"&gt;&lt;span style="color:#000000;"&gt;grupo conmutativo&lt;/span&gt;&lt;/a&gt;, respecto a la ley de composición interna (+), (suma de vectores).&lt;br /&gt;Respecto a su ley de composición externa (·), (producto por un escalar), se cumple:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5041535502969909314" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_mYG88_6hQGg/Rfch1CkKsEI/AAAAAAAAABM/EERp5LjBel8/s320/d.bmp" border="0" /&gt;&lt;/p&gt;&lt;p&gt;Campo vectorial&lt;/p&gt;&lt;p&gt;En &lt;a title="Matemática" href="http://es.wikipedia.org/wiki/MatemÃ¡tica"&gt;&lt;span style="color:#000000;"&gt;matemática&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; un campo vectorial es una construcción del &lt;/span&gt;&lt;a title="Cálculo vectorial" href="http://es.wikipedia.org/wiki/CÃ¡lculo_vectorial"&gt;&lt;span style="color:#000000;"&gt;cálculo vectorial&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; que asocia un &lt;/span&gt;&lt;a title="Vector (física)" href="http://es.wikipedia.org/wiki/Vector_(fÃ&amp;shy;sica)"&gt;&lt;span style="color:#000000;"&gt;vector&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; a cada punto en el &lt;/span&gt;&lt;a title="Espacio euclídeo" href="http://es.wikipedia.org/wiki/Espacio_euclÃ&amp;shy;deo"&gt;&lt;span style="color:#000000;"&gt;espacio euclídeo&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;.&lt;br /&gt;Los campos vectoriales se utilizan a menudo en la &lt;/span&gt;&lt;a title="Física" href="http://es.wikipedia.org/wiki/FÃ&amp;shy;sica"&gt;&lt;span style="color:#000000;"&gt;física&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; para, por ejemplo, modelar la velocidad y la dirección de un líquido móvil a través del espacio, o la intensidad y la dirección de una cierta &lt;/span&gt;&lt;a title="Fuerza" href="http://es.wikipedia.org/wiki/Fuerza"&gt;&lt;span style="color:#000000;"&gt;fuerza&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;, tal como la &lt;/span&gt;&lt;a title="Fuerza de Lorentz" href="http://es.wikipedia.org/wiki/Fuerza_de_Lorentz"&gt;&lt;span style="color:#000000;"&gt;fuerza electromagnética&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; o la &lt;/span&gt;&lt;a title="Gravedad" href="http://es.wikipedia.org/wiki/Gravedad"&gt;&lt;span style="color:#000000;"&gt;gravitatoria&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt;, pues cambian punto a punto.&lt;br /&gt;En el tratamiento matemático riguroso, los campos vectoriales se definen en &lt;/span&gt;&lt;a title="Variedad (matemática)" href="http://es.wikipedia.org/wiki/Variedad_(matemÃ¡tica)"&gt;&lt;span style="color:#000000;"&gt;variedades&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; diferenciables como &lt;/span&gt;&lt;a title="Sección (matemática)" href="http://es.wikipedia.org/wiki/SecciÃ³n_(matemÃ¡tica)"&gt;&lt;span style="color:#000000;"&gt;secciones&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; del &lt;/span&gt;&lt;a title="Fibrado tangente" href="http://es.wikipedia.org/wiki/Fibrado_tangente"&gt;&lt;span style="color:#000000;"&gt;fibrado tangente&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000000;"&gt; de la variedad.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5041536546646962258" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RfcixykKsFI/AAAAAAAAABU/BOxX-uKiPbo/s320/Dibujo.bmp" border="0" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Anillo&lt;/p&gt;&lt;p&gt;Dados, un conjunto no vacío A y dos leyes de composición interna y , la terna ordenada (A , , ) tiene estructura de Anillo si y solo si&lt;br /&gt;&lt;br /&gt;a) es asociativa. Es decir , , : a, b, c A&lt;br /&gt;&lt;br /&gt;b) posee elemento neutro en A. Es decir / , si&lt;br /&gt;&lt;br /&gt;c) Todo elemento de A es invertible en A respecto de .&lt;br /&gt;Es decir , /&lt;br /&gt;&lt;br /&gt;d) es conmutativa. Es decir , : a, b A&lt;br /&gt;&lt;br /&gt;Estas 4 propiedades muestran que ( A , ) es un grupo abeliano.&lt;br /&gt;&lt;br /&gt;e) es asociativa. Es decir , , : a, b, c A (a b) c = a ( b c)&lt;br /&gt;&lt;br /&gt;Esta propiedad muestra que ( A , ) es un semigrupo.&lt;br /&gt;&lt;br /&gt;f) distribuye doblemente sobre . Es decir, , , : a, b, c A&lt;br /&gt;a (b c ) = ( a b ) (a c ) y (b c ) a = (b a ) ( c a )&lt;br /&gt;&lt;br /&gt;Resumiendo podemos decir que:&lt;br /&gt;&lt;br /&gt;(A , , ) es un Anillo sii (A , ) es un grupo abeliano ; ( A , ) es un semigrupo y la segunda operación distribuye sobre la primera.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;DEMOSTRACION MATRIZ DE ROTACIO EJE Y&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5041541597528502370" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/RfcnXykKsGI/AAAAAAAAABc/FL4lTPdZ-h0/s320/es.bmp" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5041544599710642306" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_mYG88_6hQGg/RfcqGikKsII/AAAAAAAAABs/vyFH4eOMXGE/s320/ry.bmp" border="0" /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-6234688006687356013?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/6234688006687356013/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=6234688006687356013' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/6234688006687356013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/6234688006687356013'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/03/espacio-vectorial-un-espacio-vectorial.html' title=''/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mYG88_6hQGg/Rfch1CkKsEI/AAAAAAAAABM/EERp5LjBel8/s72-c/d.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-4576327490442514691</id><published>2007-03-12T14:20:00.000-07:00</published><updated>2007-03-12T14:24:34.102-07:00</updated><title type='text'></title><content type='html'>&lt;div align="center"&gt;Previo Practica No.2&lt;/div&gt;&lt;div align="center"&gt; &lt;/div&gt;&lt;div align="center"&gt;Este es el archivo del humanoide que se mueve segun los parametro es en la función muevete.&lt;/div&gt;&lt;div align="center"&gt; &lt;/div&gt;&lt;div align="center"&gt; &lt;/div&gt;&lt;div align="center"&gt;&lt;/div&gt;&lt;div align="justify"&gt;#include &lt;gl&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;windows.h&gt;&lt;br /&gt;#include &lt;math.h&gt;&lt;br /&gt;&lt;br /&gt;void pinta(float ejex, float ejey, float ejez,float r,char c);&lt;br /&gt;void muevete(float abd, float abi, float apd,float api);&lt;br /&gt;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClearColor (0.0, 0.0, 0.0, 0.0);&lt;br /&gt;glShadeModel (GL_FLAT);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;glClear (GL_COLOR_BUFFER_BIT);&lt;br /&gt;glColor3f (0.1, 0.1, 0.1);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glScalef (1.0, 1.0, 1.0);&lt;br /&gt;&lt;br /&gt;glEnable(GL_DEPTH_TEST);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;muevete(8,-8,8,-8);&lt;br /&gt;glPopMatrix();&lt;br /&gt;Sleep(1000);&lt;br /&gt;pinta(0,0,1,-15,'r');&lt;br /&gt;glutPostRedisplay();&lt;br /&gt;Sleep(1000);&lt;br /&gt;glDisable(GL_DEPTH_TEST);&lt;br /&gt;glPushMatrix();&lt;br /&gt;Sleep(1000);&lt;br /&gt;muevete(8,-8,8,-8);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glLoadIdentity();&lt;br /&gt;pinta(0,0,1,-15,'r');&lt;br /&gt;glutSwapBuffers();&lt;br /&gt;glFlush ();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, (GLsizei) w, (GLsizei) h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);&lt;br /&gt;glMatrixMode (GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* ARGSUSED1 */&lt;br /&gt;void keyboard(unsigned char key, int x, int y)&lt;br /&gt;{&lt;br /&gt;switch (key) {&lt;br /&gt;case 27:&lt;br /&gt;exit(0);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;glutInit(&amp;argc, argv);&lt;br /&gt;glutInitDisplayMode (GLUT_SINGLE GLUT_RGB);&lt;br /&gt;glutInitWindowSize (500, 300);&lt;br /&gt;glutInitWindowPosition (300,230);&lt;br /&gt;glutCreateWindow (argv[0]);&lt;br /&gt;init ();&lt;br /&gt;glutDisplayFunc(display);&lt;br /&gt;glutReshapeFunc(reshape);&lt;br /&gt;glutKeyboardFunc(keyboard);&lt;br /&gt;glutMainLoop();&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void pinta(float ejex, float ejey, float ejez,float r,char c)&lt;br /&gt;{&lt;br /&gt;float x1,y1,z1,r1;&lt;br /&gt;char c1;&lt;br /&gt;x1=ejex;&lt;br /&gt;y1=ejey;&lt;br /&gt;z1=ejez;&lt;br /&gt;r1=r;&lt;br /&gt;c1=c;&lt;br /&gt;glPushMatrix();&lt;br /&gt;if(c1=='r')&lt;br /&gt;glRotatef(r1, x1,y1,z1);&lt;br /&gt;else if(c1=='t')&lt;br /&gt;glTranslatef(x1,y1,z1);&lt;br /&gt;&lt;br /&gt;//cabeza&lt;br /&gt;glTranslatef(0.0f,2.5f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glScalef(2.5,2.5,2.0);&lt;br /&gt;glTranslatef(0.0f,-0.45f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//tronco&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.1f,-0.55f,0.0f);&lt;br /&gt;glScalef(-.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;//piernas&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.1f,-0.55f,0.0f);&lt;br /&gt;glScalef(-.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,-0.7f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;glTranslatef(0.7f,-0.7f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,.35f,0.0f);&lt;br /&gt;glScalef(1.1,.4,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.7f,.35f,0.0f);&lt;br /&gt;glScalef(1.1,.4,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;//pies&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(.3f,-.3f,0.0f);&lt;br /&gt;glScalef(1.6,.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glTranslatef(-.8f,-.3f,0.0f);&lt;br /&gt;glScalef(1.6,.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;//brazo derecho&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.35f,0.1f,0.0f);&lt;br /&gt;glScalef(0.5,0.4,.5);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.4f,0.0f,0.0f);&lt;br /&gt;glScalef(0.5,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(0.8f,0.0f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//brazo izquierdo&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(-0.35f,0.1f,0.0f);&lt;br /&gt;glScalef(0.5,0.4,.5);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.4f,0.0f,0.0f);&lt;br /&gt;glScalef(0.5,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(-0.8f,0.0f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void muevete(float brader, float braizq, float pieder,float pieizq)&lt;br /&gt;{&lt;br /&gt;float brazod, brazoi, pied, piei;&lt;br /&gt;&lt;br /&gt;brazod=brader;&lt;br /&gt;brazoi=braizq;&lt;br /&gt;pied=pieder;&lt;br /&gt;piei=pieizq;&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;//cabeza&lt;br /&gt;glTranslatef(0.0f,2.5f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;//tronco&lt;br /&gt;glScalef(2.5,3.0,2.0);&lt;br /&gt;glTranslatef(0.0f,-0.45f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//piernas&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;//pierna izquierda&lt;br /&gt;glRotatef(piei,0,0,1);&lt;br /&gt;glTranslatef(-0.1f,-0.55f,0.0f);&lt;br /&gt;glScalef(-.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;&lt;br /&gt;glTranslatef(0.0f,-0.7f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,.35f,0.0f);&lt;br /&gt;glScalef(1.1,.4,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;//pies&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(.3f,-1.0f,0.0f);&lt;br /&gt;glScalef(1.6,.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;//pierna derecha&lt;br /&gt;glRotatef(pied,0,0,1);&lt;br /&gt;glTranslatef(0.1f,-0.55f,0.0f);&lt;br /&gt;glScalef(-.3,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPushMatrix();&lt;br /&gt;&lt;br /&gt;glTranslatef(0.0f,-0.7f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0f,.35f,0.0f);&lt;br /&gt;glScalef(1.1,.4,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;//pies&lt;br /&gt;glTranslatef(-.3f,-1.0f,0.0f);&lt;br /&gt;glScalef(1.6,.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;//brazo derecho&lt;br /&gt;glPushMatrix();&lt;br /&gt;glRotatef(brazod,0,0,1);&lt;br /&gt;glTranslatef(0.35f,0.1f,0.0f);&lt;br /&gt;glScalef(0.5,0.4,.5);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;&lt;br /&gt;glTranslatef(0.4f,0.0f,0.0f);&lt;br /&gt;glScalef(0.5,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(0.8f,0.0f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;//brazo izquierdo&lt;br /&gt;glPopMatrix();&lt;br /&gt;glRotatef(brazoi,0,0,1);&lt;br /&gt;glTranslatef(-0.35f,0.1f,0.0f);&lt;br /&gt;glScalef(0.5,0.4,.5);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-0.4f,0.0f,0.0f);&lt;br /&gt;glScalef(0.5,1.2,1.0);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;&lt;br /&gt;glPopMatrix();&lt;br /&gt;glTranslatef(-0.8f,0.0f,0.0f);&lt;br /&gt;glutWireCube (0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-4576327490442514691?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/4576327490442514691/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=4576327490442514691' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/4576327490442514691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/4576327490442514691'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/03/previo-practica-no.html' title=''/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-8479486457877362720</id><published>2007-03-06T07:33:00.001-08:00</published><updated>2007-03-06T08:37:15.755-08:00</updated><title type='text'>Previo Practica 2</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div align="center"&gt;Laboratorio de Computación Gráfica&lt;/div&gt;&lt;br /&gt;&lt;div align="center"&gt;Cuestionario previo #2 &lt;/div&gt;&lt;div align="center"&gt;- Modelado Geométrico - &lt;/div&gt;&lt;br /&gt;1. ¿Qué es una transformación geométrica? ¿Cuáles son las transformaciones básicas y sus matrices?&lt;br /&gt;&lt;br /&gt;Transformaciones: una transformación T es una función que nos cambia un punto Q o un vector v en otro punto P o en otro vector u: P = T (Q); u = T (v), una transformación cualquiera debería ser aplicada punto a punto a todos los puntos de una escena.&lt;br /&gt;Las transformaciones nos ayudan a:&lt;br /&gt;Manipular objetos en el espacio 3D&lt;br /&gt;Ayuda para visualizar y examinar objetos&lt;br /&gt;&lt;br /&gt;Tipos de transformaciones afines:&lt;br /&gt;– Traslación&lt;br /&gt;– Rotación&lt;br /&gt;– Escalado&lt;br /&gt;– Cizallado&lt;br /&gt;– Reflexión&lt;br /&gt;&lt;br /&gt;Traslación: Desplazamos el origen y los ejes de forma paralela. En dos y tres dimensiones, siendo dx, dy, dz las distancias de traslación:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5038849619856630738" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_mYG88_6hQGg/Re2XCEQqo9I/AAAAAAAAAAM/02GVUslj9aA/s320/traslacion.bmp" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Rotación: En dos dimensiones: si giramos los ejes un ángulo (positivo si gira en sentido anti-horario)&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5038849804540224482" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/Re2XM0Qqo-I/AAAAAAAAAAU/bQSPrHrMaUA/s320/rotacion.bmp" border="0" /&gt;&lt;br /&gt;En tres dimensiones: ahora tenemos tres rotaciones diferentes respecto cada uno de los ejes coordenados (igualmente, consideramos sentido positivo si gira en sentido anti-horario) La rotación sobre Z es prácticamente igual que antes, aunque ahora tenemos que usar una matriz (3x3):&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5038850075123164146" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_mYG88_6hQGg/Re2XckQqo_I/AAAAAAAAAAc/hbDqsqYlkn4/s320/rotacion1.bmp" border="0" /&gt;&lt;br /&gt;Para la rotación sobre X, también es prácticamente igual que antes, solamente que el eje que antes era X será ahora Y, y el que antesera Y, Z (igualmente, consideramos sentido positivo si gira en sentido anti-horario)&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5038850148137608194" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_mYG88_6hQGg/Re2Xg0QqpAI/AAAAAAAAAAk/PnH_u9rF7cM/s320/rotacion2.bmp" border="0" /&gt;&lt;br /&gt;Si rotamos respecto de Y, lo que en Rz era X ahora será Z, y donde teníamos Y, ahora habrá que poner Z. Por tanto hay queintercambiar también filas y columnas en la matriz de rotación...&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5038850208267150354" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/Re2XkUQqpBI/AAAAAAAAAAs/mH-XONPbqho/s320/rotacion3.bmp" border="0" /&gt;&lt;br /&gt;Las matrices de rotación son ortonormales. Podemos invertirlas por transposición.&lt;br /&gt;La rotación sobre un eje cualquiera va a necesitar, en general, ser realizada como una composición de varias transformaciones:&lt;br /&gt;1. Traslación del eje de rotación (y los objetos a rotar) de forma que el eje pase por el origen&lt;br /&gt;2. Descomposición de la rotación en rotaciones simples respecto a los tres ejes de coordenadas X, Y y Z&lt;br /&gt;3. Deshacer la traslación, efectuando la inversa que se hizo en (1)&lt;br /&gt;Escalado uniforme y no uniforme: Variamos la escala en los ejes coordenados con el mismo factor de escala o diferente para cada eje (factores de escala si iguales o diferentes)&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5038850294166496290" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/Re2XpUQqpCI/AAAAAAAAAA0/40mtJgtwuX4/s320/rotacion4.bmp" border="0" /&gt;&lt;br /&gt;Cizallado:&lt;br /&gt;• No mantiene los ángulos, aunque sí las rectas y el paralelismo&lt;br /&gt;• Menos utilizada en gráficos&lt;br /&gt;• En tres dimensiones es análoga, si bien nos aparecen nuevos coeficientes adicionales&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5038850362885973042" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_mYG88_6hQGg/Re2XtUQqpDI/AAAAAAAAAA8/d-msdX1BF7Q/s320/cit.bmp" border="0" /&gt;&lt;br /&gt;2. Escriba los comandos que en OpenGL permiten aplicar transformaciones geométricas, las variantes de dichos comandos y describa sus parámetros.&lt;br /&gt;&lt;br /&gt;Translación: void glTranslate(x,y,z); nos va a permitir trasladar un objeto en el espacio&lt;br /&gt;Rotación: void glRotate(angulo,x,y,z); nos va a permitir rotar un objeto&lt;br /&gt;Escalado: void glScale(x,y,z); nos va a permitir escalar un objeto&lt;br /&gt;&lt;br /&gt;Donde: x,y,z son las coordenadas de un punto.&lt;br /&gt;&lt;br /&gt;3. Describa en OpenGL qué son las matrices GL_MODELVIEW y GL_PROJECTION. ¿Para qué sirven? ¿Cómo se puede intercambiar entre una y otra? ¿Cuál es la matriz activa por defecto? ¿Para que sirve el comando glLoadIdentity()?&lt;br /&gt;&lt;br /&gt;GL_MODELVIEW: la matriz que contiene las transformaciones originadas por los&lt;br /&gt;cambios de modelado y posición de la cámara.&lt;br /&gt;GL_PROJECTION: la matriz con las transformaciones que realizan la proyección de la&lt;br /&gt;escena de 3 a 2 dimensiones.&lt;br /&gt;&lt;br /&gt;Estas dos matrices sirven para hacer una operación de transformación. Se especifica con la función glMatrixMode(Glenum mode) que tiene como argumento una de las tres constantes enumeradas. Se comporta como un estado, por tanto, hasta que se especifique un nuevo estado todas las transformaciones se realizan sobre la última matriz especificada.&lt;br /&gt;En el código de la función resaphe() del capítulo anterior:&lt;br /&gt;void reshape(int width, int height) {&lt;br /&gt;glViewport(0, 0, width, height);&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluPerspective(60.0, (GLfloat)height / (GLfloat)width, 1.0, 128.0);&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;glLoadIdentity();&lt;br /&gt;gluLookAt(0.0, 1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);&lt;br /&gt;}&lt;br /&gt;Se observa que se utiliza la función glMatrixMode() dos veces, la primera con&lt;br /&gt;GL_PROJECTION y la segunda con GL_MODELVIEW .&lt;br /&gt;Despues de la primera llamada a glMatrixMode(), la matriz sobre la que se realizarán&lt;br /&gt;las transformaciones es GL_PROJECTION, la primera operación es inicializar la matriz con la función glLoadIdentity() que carga la matriz identidad y se define una proyección perspectiva con la función gluPerspective(). Esta función se explica en el siguiente capítulo.&lt;br /&gt;Despues de la segunda llamada a glMatrixMode(), la matriz sobre la que se realizarán&lt;br /&gt;las transformaciones es GL_MODELVIEW, igualmente, la primera operación es inicializar la matriz con la función glLoadIdentity() y a continuación se establece la posición de la cámara con gluLookAtAl comportarse OpenGL como una máquina de estados, las siguientes operaciones de transformación que se realicen en el código, que estarán fuera de la función resaphe(), se realizarán sobre la última matriz especificada, es decir sobre GL_MODELVIEW.&lt;br /&gt;&lt;br /&gt;4. ¿Para qué son los comandos glPushMatrix() y glPopMatrix()? Describa su uso a través de un ejemplo en código.&lt;br /&gt;&lt;br /&gt;glPushMatrix(); // La función glPushMatrix() realiza una copia de la matriz superior y la pone encima de la pila, de tal forma que las dos matrices superiores son iguales, al llamar a la función glPushMatrix() se duplica la matriz superior. Las siguientes transformaciones que se realizan se aplican sólo a la matriz superior de la pila, quedando la anterior con los valores que tenía en el momento de llamar a la función glPushMatrix().&lt;br /&gt;glPopMatrix(); La función glPopMatrix() elimina la matriz superior, quedando en la parte superior de la pila la matriz que estaba en el momento de llamar a la función glPushMatrix().&lt;br /&gt;&lt;br /&gt;glColor4f(1.0,0.0,0.0,1.0);&lt;br /&gt;dibujarCuadro(1.0);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0, 2.0, 0.0);&lt;br /&gt;dibujarCuadro(0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0, -2.0, 0.0);&lt;br /&gt;dibujarCuadro(0.5);&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;5. ¿Para qué sirven los comandos glBegin() y glEnd()? Describa su uso, sus parámetros y ejemplifique a través de una pieza de código.&lt;br /&gt;&lt;br /&gt;Para crear cualquier figura geométrica en OpenGL hay que definir los vértices entre un par de llamadas a las funciones glBegin() y glEnd(). A la función glBegin se le puede pasar un argumento que determina qué tipo de figura geométrica se va construir. Después se definen los vértices mediante llamadas a la función glVertex. A continuación vemos un ejemplo en el que se define el polígono.&lt;br /&gt;glBegin (GL_POLYGON);&lt;br /&gt;glVertex2f (0.0, 0.0);&lt;br /&gt;glVertex2f (0.0, 3.0);&lt;br /&gt;glVertex2f (3.0, 3.0);&lt;br /&gt;glVertex2f (4.0, 1.5);&lt;br /&gt;glVertex2f (3.0, 0.0);&lt;br /&gt;glEnd ();&lt;br /&gt;void glBegin (GLenum mode); Marca el principio de una lista de vértices que describen una primitiva geométrica. El parámetro mode índica el tipo de primitiva(GL_POINTS Puntos individuales. GL_LINES Cada Par de vértices forman un segmento individual.&lt;br /&gt;GL_POLYGON Vértices de polígono simple y conexo. GL_TRIANGLES Cada terna determina un triángulo. GL_QUADS Cada cuátrupla determina un cuadrado. GL_LINE_STRIP Series de segmentos conectados. GL_LINE_LOOP Series de segmentos conectados y cerrados. GL_TRIANGLE_STRIP Cadenas de triángulos conectados. GL_TRIANGLE_FAN Cadenas de polystrip (el centro es el primer&lt;br /&gt;vértice). GL_QUAD_STRIP Cuadriláteros encadenados.)&lt;br /&gt;void glEnd (void); Marca el final de una lista de vértices.&lt;br /&gt;&lt;br /&gt;6. ¿Qué es modelado geométrico? Describa los tipos de modelado geométrico que existen.&lt;br /&gt;&lt;br /&gt;Modelado Geométrico: es una técnica que puede generar distintos tipos de objetos.&lt;br /&gt;Los modelos pueden clasificarse en: alambritos, de superficies (planas o curvas) y sólidos. Los modelos de superficies curvas se dividen en: paramétricas(analíticas y sintéticas) y no paramétricas(explícitas e implícitas). Los modelos sólidos más importantes son: semi-espacios,frontera,CSG, barrido, enumeración espacial,etc.&lt;br /&gt;Entre los modelos no convencionales se encuentran: los fractales, los de gramáticas, los sistemas de partículas, los blobs, y los basados en propiedades físicas.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;7. Construya código para dibujar un cubo (revisar en la clase de teoría), y a partir de éste modele jerárquicamente el humanoide de la ilustración y escriba el programa que lo dibuja. Las medidas corren por su cuenta.&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5038850487440024642" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_mYG88_6hQGg/Re2X0kQqpEI/AAAAAAAAABE/UX602UWhrKE/s320/hum.bmp" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;#include &lt;gl&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;&lt;br /&gt;void init(void)&lt;br /&gt;{&lt;br /&gt;glClearColor (0.0, 0.0, 1.0, 0.0);&lt;br /&gt;glShadeModel (GL_FLAT);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void cube(void){&lt;br /&gt;GLfloat vertices[][]={{0.55,0.5,0.5},&lt;br /&gt;{-0.5,-0.5,0.5},&lt;br /&gt;{0.5,-0.5,0.5},&lt;br /&gt;{-0.5,0.5,0.5},&lt;br /&gt;{-0.5,-0,5,-0.5},&lt;br /&gt;{-0.5,0.5,-0.5},&lt;br /&gt;{0.5,0.5,-0.5}};&lt;br /&gt;glBegin(GL_QUADS);&lt;br /&gt;glVertex3fv(vertices[0]);&lt;br /&gt;glVertex3fv(vertices[1]);&lt;br /&gt;glVertex3fv(vertices[2]);&lt;br /&gt;glVertex3fv(vertices[3]);&lt;br /&gt;glEnd();&lt;br /&gt;glBegin(GL_QUADS);&lt;br /&gt;glVertex3fv(vertices[4]);&lt;br /&gt;glVertex3fv(vertices[5]);&lt;br /&gt;glVertex3fv(vertices[6]);&lt;br /&gt;glVertex3fv(vertices[7]);&lt;br /&gt;glEnd();&lt;br /&gt;glBegin(GL_QUADS);&lt;br /&gt;glVertex3fv(vertices[1]);&lt;br /&gt;glVertex3fv(vertices[6]);&lt;br /&gt;glVertex3fv(vertices[5]);&lt;br /&gt;glVertex3fv(vertices[2]);&lt;br /&gt;glEnd();&lt;br /&gt;glBegin(GL_QUADS);&lt;br /&gt;glVertex3fv(vertices[0]);&lt;br /&gt;glVertex3fv(vertices[3]);&lt;br /&gt;glVertex3fv(vertices[4]);&lt;br /&gt;glVertex3fv(vertices[7]);&lt;br /&gt;glEnd();&lt;br /&gt;glBegin(GL_QUADS);&lt;br /&gt;glVertex3fv(vertices[0]);&lt;br /&gt;glVertex3fv(vertices[7]);&lt;br /&gt;glVertex3fv(vertices[6]);&lt;br /&gt;glVertex3fv(vertices[1]);&lt;br /&gt;glEnd();&lt;br /&gt;glBegin(GL_QUADS);&lt;br /&gt;glVertex3fv(vertices[2]);&lt;br /&gt;glVertex3fv(vertices[5]);&lt;br /&gt;glVertex3fv(vertices[4]);&lt;br /&gt;glVertex3fv(vertices[3]);&lt;br /&gt;glEnd();&lt;br /&gt;}&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0,1.25,0.0);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.25,1.5,0.0);&lt;br /&gt;glScalef(1.5,0.5,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.25,2.0,0.0);&lt;br /&gt;glScalef(1.0,2.0,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-4.75,1.75,0.0);&lt;br /&gt;glScalef(0.5,2.0,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(1.5,0.0,0.0);&lt;br /&gt;glScalef(2.0,1.5,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(2.0,0.0,0.0);&lt;br /&gt;glScalef(2.0,0.5,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-1.5,0.0,0.0);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-2.0,0.0,0.0);&lt;br /&gt;glScalef(2.0,1.5,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(-2.0,0.75,0.0);&lt;br /&gt;glScalef(2.0,0.5,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.0,-2.0,0.0);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.75,-2.5,0.0);&lt;br /&gt;glScalef(2.0,3.0,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glScalef(0.5,2.0,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.25,-2.0,0.0);&lt;br /&gt;glScalef(1.0,2.0,1.0);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPushMatrix();&lt;br /&gt;glTranslatef(0.5,-1.5,0.0);&lt;br /&gt;glScalef(1.5,0.5,0.5);&lt;br /&gt;cube();&lt;br /&gt;glPopMatrix();&lt;br /&gt;glPopMatrix();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;void reshape (int w, int h)&lt;br /&gt;{&lt;br /&gt;glViewport (0, 0, (GLsizei) w, (GLsizei) h);&lt;br /&gt;glMatrixMode (GL_PROJECTION);&lt;br /&gt;glLoadIdentity ();&lt;br /&gt;glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);&lt;br /&gt;glMatrixMode (GL_MODELVIEW);&lt;br /&gt;}&lt;br /&gt;/* ARGSUSED1 */&lt;br /&gt;/*void keyboard(unsigned char key, int x, int y)&lt;br /&gt;{&lt;br /&gt;switch (key) {&lt;br /&gt;case 27:&lt;br /&gt;exit(0);&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}*/&lt;br /&gt;int main(int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;glutInit(&amp;argc, argv);&lt;br /&gt;glutInitDisplayMode (GLUT_SINGLE GLUT_RGB);&lt;br /&gt;glutInitWindowSize (500, 300);&lt;br /&gt;glutInitWindowPosition (300,230);&lt;br /&gt;glutCreateWindow (argv[0]);&lt;br /&gt;init ();&lt;br /&gt;glutDisplayFunc(display);&lt;br /&gt;glutReshapeFunc(reshape);&lt;br /&gt;glutKeyboardFunc(keyboard);&lt;br /&gt;glutMainLoop();&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;8. ¿Para qué sirven los comandos glClearColor() y glClear()? Descríbalos su funcionamiento, sus parámetros y ejemplifique a través de una pieza de código.&lt;br /&gt;&lt;br /&gt;void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);&lt;br /&gt;Activa el color de fondo actual, siguiendo el modelo de representación RGB. Cada argumento representa la cantidad del color indicado que tiene el color de fondo, y toma valores en el intervalo [0, 1. El valor por defecto es el color NEGRO que se representa por el valor: (0, 0, 0, 0).&lt;br /&gt;void display(void)&lt;br /&gt;{&lt;br /&gt;glClearColor(0.0,0.0,0.0,0.0);&lt;br /&gt;// Color de fondo: negro&lt;br /&gt;glClear(GL_COLOR_BUFFER_BIT);&lt;br /&gt;// Boramos la pantalla&lt;br /&gt;glMatrixMode(GL_PROJECTION);&lt;br /&gt;// Modo proyección&lt;br /&gt;glLoadIdentity();&lt;br /&gt;// Cargamos la matriz identidad&lt;br /&gt;glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);&lt;br /&gt;// Proyección ortográfica, dentro del cubo señalado&lt;br /&gt;glMatrixMode(GL_MODELVIEW);&lt;br /&gt;// Modo de modelado&lt;br /&gt;glBegin(GL_TRIANGLES);&lt;br /&gt;// Dibujamos un triángulo&lt;br /&gt;glColor3f(1.0,0.0,0.0);&lt;br /&gt;// Color del primer vértice: rojo&lt;br /&gt;glVertex3f(0.0,0.8,0.0);&lt;br /&gt;// Coordenadas del primer vértice&lt;br /&gt;glColor3f(0.0,1.0,0.0);&lt;br /&gt;// Color del segundo vértice: verde&lt;br /&gt;glVertex3f(-0.6,-0.2,0.0);&lt;br /&gt;// Coordenadas del segundo vértice&lt;br /&gt;glColor3f(0.0,0.0,1.0);&lt;br /&gt;// Color del tercer vértice: azúl&lt;br /&gt;glVertex3f(0.6,-0.2,0.0);&lt;br /&gt;// Coordenadas del tercer vértice&lt;br /&gt;glEnd();&lt;br /&gt;// Terminamos de dibujar&lt;br /&gt;glFlush();&lt;br /&gt;// Forzamos el dibujado&lt;br /&gt;sleep(10);&lt;br /&gt;// Esperamos 10 segundos&lt;br /&gt;exit(0);&lt;br /&gt;// Salimos del programa&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void glClear (GLbitfield mask);&lt;br /&gt;Limpia el buffer especificado por el parámetro, inicializándolo al valor que tenía asignada la variable de estado anteriormente. Los posibles valores del argumento, es decir los posibles buffers que tenemos son los siguientes:&lt;br /&gt;Color Buffer GL_COLOR_BUFFER_BIT&lt;br /&gt;Depth Buffer GL_DEPTH_BUFFER_BIT&lt;br /&gt;Accumulate Buffer GL_ACCUM_BUFFER_BIT&lt;br /&gt;Stencil Buffer GL_STENCIL_BUFFER_BIT&lt;br /&gt;&lt;br /&gt;void display(void) {&lt;br /&gt;glClear(GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT);&lt;br /&gt;glPushMatrix();&lt;br /&gt;glMultMatrixd(mModel);&lt;br /&gt;glColor3f(1.0,1.0,0.0) ;&lt;br /&gt;drawTurtle();&lt;br /&gt;glPopMatrix();&lt;br /&gt;displayTrace();&lt;br /&gt;glutSwapBuffers();&lt;br /&gt;}&lt;br /&gt;9. Describa los comandos glutInit(), glutInitDisplayMode (), glutInitWindowSize (), glutInitWindowPosition (), glutCreateWindow (), glutDisplayFunc(), glutReshapeFunc(), glutKeyboardFunc() y glutMainLoop(). Describa su funcionamiento, uso y parámetros.&lt;br /&gt;&lt;br /&gt;Void glutInit(&amp;argc, argv); que inicializa la GLUT, y negocia con el sistema de ventanas para abrir una. Los parámetros deben ser los mismos argc y argv sin modificar de la main(). Glut entiende una serie de parámetros que pueden ser pasados por línea de comandos.&lt;br /&gt;&lt;br /&gt;void glutDisplayFunc( void (*func) (void)) La función func() se llamará cada vez que haya que redibujar la ventana. Inicializa el buffer de la pantalla inicial, esn este caso es el modo y tipo de colores en la pantalla(RGB/RGBA)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void glutReshapeFunc(void (*func) (int width, int height)) La función func(width, height) se llamará cada vez&lt;br /&gt;que la ventana cambie de tamaño, y recibirá como parámetros la nueva anchura y altura.&lt;br /&gt;&lt;br /&gt;glutInitDisplayMode. Inicializar el modo de visualización. En este caso, estamos activando el buffer de profundidad (GLUT_DEPTH), el doble buffering (GLUT_DOUBLE) y la renderización en RGB (GLUT_RGB).&lt;br /&gt;&lt;br /&gt;glutInitWindowSize (anchura, altura). Inicializar el tamaño de la ventana.&lt;br /&gt;&lt;br /&gt;glutInitWindowPosition(x, y). Inicializar la posición de la ventana en el escritorio.&lt;br /&gt;&lt;br /&gt;glutCreateWindow(char* titulo). Crear la ventana. Esta función muestra una ventana del tamaño y posición definidas y con el título que le hayamos puesto.&lt;br /&gt;&lt;br /&gt;Void glutKeyboardFun(void (*func)(unsigned char key, int x,int y)): Se encarga de la interacción de eventos en el teclado. maneja el control del teclado, haciendo un transición ente ASCII y GLUT&lt;br /&gt;&lt;br /&gt;Void glutMainLoop(); es el bucle principal de la visualización, se encarga de interaccionar con eventos. esta función inicializa el framework running de GLUT, y procesa los mensajes de sistema operativo&lt;br /&gt;&lt;br /&gt;10. ¿Qué es un Function Callback en GLUT?&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;La ejecución de esta función espera a que se produzcan eventos. Cada vez que se produce un evento lo atiende y ejecuta la función registrada, encargada de responder al evento (función de callback).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-8479486457877362720?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/8479486457877362720/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=8479486457877362720' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/8479486457877362720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/8479486457877362720'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/03/previo-practica-2_06.html' title='Previo Practica 2'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mYG88_6hQGg/Re2XCEQqo9I/AAAAAAAAAAM/02GVUslj9aA/s72-c/traslacion.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-3937886659113699790</id><published>2007-02-22T07:37:00.001-08:00</published><updated>2007-02-22T07:37:32.260-08:00</updated><title type='text'>Reporte Practica no.1 Laboratorio Computación Grafica</title><content type='html'>&lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Laboratorio de Computación Grafica&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Reporte Practica No. 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Objetivo: &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm  0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Empezar a familiarizarse con el ambiente de trabajo, que es Visual Studio y utilizar librerías externas de la aplicación.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Desarrollo:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1;  tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Bajar las librerías de OpenGL, ir a la pagina &lt;/FONT&gt;&lt;A href="http://www.opengl.org/"&gt;&lt;FONT size=3&gt;www.opengl.org&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;seleccionar couding resources, GLUT and utility libraries, escoger About GLUT, y bajar Pre-compiled Win32 for Intel&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Glut 37 DLLs for Windows 95 &amp;amp; NT, y GLUT 3.7 Source Code Download for Win32.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=2&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Descomprimir estas dos carpeta en Mis Documentos y crear los siguientes subdirectorios Mis  Documentos/lib/, Mis Documentos/dll/, Mis Documentos/include/GL/, agregar los archivos descomprimidos de glutdlls37beta a estas carpetas los .lib a /lib/, .dll a /dll/ y el .h a /GL/.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=3&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Copiar la ruta de acceso donde están los archivos .zip antes descomprimidos, ir a Mi PC clic derecho, elegir propiedades, seleccionar opciones avanzadas, variables de entorno y en variables de usuario cambiar el path pegando la ruta de acceso  antes copiada, si ya existiera el path colocar &lt;B style="mso-bidi-font-weight: normal"&gt;;&lt;/B&gt; después de su contenido y pegar la ruta finalizando con otro &lt;B style="mso-bidi-font-weight: normal"&gt;;&lt;/B&gt; y finalmente seleccionar aceptar.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=4&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Abrir Visual Studio 2005, seleccionar File, New Proyect, Visual C++, Win32, elegir Win32 Console Application, Nombrar el proyecto(practica1) y el Solution Name (en este caso LCG2007-2), debe estar habilitado la creación del directorio para &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;Solution Name, seleccionar  OK.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=5&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Aparece otra ventana, seleccionar Application Settings, habilitar la aplicación de tipo Console application, la opción adicional de Empty Project y las otras opciones deshabilitadas, dar clic en finalizar, aparecerá en el Solution Explorer el proyecto con 3 carpetas para añadir archivos de cabecera y códigos.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN:  justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=6&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Regresar a la ruta donde se encuentra la carpeta de glut37, entrar a la carpeta progs, redbook, y copiar el archivo cube.c.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=7&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT  size=3&gt;En visual estudio en la división de Solution Explorer seleccionar Source Files dar clic derecho y elegir Add, Existing Item, pegar el archivo cube.c y add.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=8&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Para compilar el archivo seleccionar en la barra de menú Build, Build seguido del nombre del proyecto (Build Practica1), manda un error.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN  style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=9&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Para solucionarlo en la barra de menú seleccionar Project, Practica1 Properties, Configuration Properties, C/C++, General, Additional Incluye Directories y hacer clic en un boton en el cual aparecen 3 puntos, dar clic en el espacio en blanco al igual aparecerán 3 puntos seleccionarlo e introducir la dirección de la carpeta GL antes creada.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=10&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list  36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Una vez ingresado, seleccionar Linker, General, se parecerá mucho al paso 9 pero aquí la ruta a especificar es la de lib, abrir y aceptar.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=11&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Verificar que en la carpeta creada para la Solution(LCG2007-2), en la carpeta debug se encuentre el archivo glut32.dll, esto con el fin de que compile perfectamente.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal  style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=12&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Cerrar visual studio para que hagan efecto los cambios, al abrirlo de nuevo compilar el archivo cube.c, y generara una aplicación donde aparece un cubo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=13&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0  level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Por ultimo agregar mas archivos a la carpeta Source Files, pero removiendo el archivo existente, y compilarlo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;OL style="MARGIN-TOP: 0cm" type=1 start=14&gt;  &lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Agragar lo hecho a una carpeta .zip.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Conclusiones:  &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Se logro utilizar la librería de OpenGl para ver algunos demos, y como se compila un archivo en Visual Studio.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Me pareció muy interesante y creo que la herramienta de OpenGl es muy interesante.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;&lt;p&gt;&amp;#32; 		&lt;hr size=1&gt;   Do You Yahoo!?  La mejor conexión a Internet y &lt;b&gt;2GB&lt;/b&gt; extra a tu correo por $100 al mes. &lt;a href="http://net.yahoo.com.mx"&gt;http://net.yahoo.com.mx&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-3937886659113699790?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/3937886659113699790/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=3937886659113699790' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/3937886659113699790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/3937886659113699790'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/02/reporte-practica-no1-laboratorio.html' title='Reporte Practica no.1 Laboratorio Computación Grafica'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-5863375336915027132</id><published>2007-02-22T07:28:00.001-08:00</published><updated>2007-02-22T07:28:25.721-08:00</updated><title type='text'>Tarea no. 1 INVETIGACION DVI Y HDMI</title><content type='html'>&lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;INVETIGACION DVI Y HDMI&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;DVI &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;La interfaz de vídeo digital o interfaz visual digital (en inglés DVI, "digital visual  interface" o "digital video interface") es un conector de vídeo diseñado para obtener la máxima calidad de visualización posible en pantallas digitales tales como los monitores de cristal líquido de pantalla plana y los proyectores digitales. Fue desarrollada por el consorcio industrial DDWG ("Digital Display Working Group", Grupo de Trabajo para la Pantalla Digital).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;El brillo de los píxeles se transmite en forma de lista de números binarios. Cuando la pantalla está establecida a su resolución nativa, sólo tiene que leer cada número y aplicar ese brillo al píxel apropiado. De esta forma, cada píxel del buffer de salida de la fuente se corresponde directamente con un píxel en  la pantalla.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;El DVI emplea TMDS ("Transition Minimized Differential Signaling", Señal Diferencial con Transición Minimizada). Un enlace DVI consiste en un cable de cuatro pares trenzados: uno para cada color primario (rojo, verde, y azul) y otro para el "reloj" (que sincroniza la transmisión), la pantalla entera se transmite constantemente.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;El conector DVI normalmente posee pins  para transmitir las señales digitales nativas de DVI. En los sistemas de doble enlace, se proporcionan pins adicionales para la segunda señal. También puede tener pins para transmitir las señales analógicas del estándar VGA. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Los conectores DVI se clasifican en tres tipos en función de qué señales admiten:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;DVI-D (sólo digital) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;DVI-A (sólo analógica) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;   &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;DVI-I (digital y analógica) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;A veces se denomina DVI-DL a los conectores que admiten dos enlaces.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Especificaciones&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Frecuencia mínima de reloj: 21.76 MHz &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN  style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Frecuencia máxima de reloj para enlace único: 165 MHz &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Frecuencia máxima de reloj para doble enlace: limitada sólo por el cable &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Píxeles por ciclo de reloj: 1 (enlace único) o 2 (doble enlace) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Bits por píxel: 24 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY:  Arial"&gt;&lt;FONT size=3&gt;Conector&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Números de pin (vista del enchufe hembra)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;1 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;2 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;3 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;4 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;5&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;6 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;7&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;8&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN  style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;C1 C2 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;9 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;10 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;11 12 13 14 15 16 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;C5&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;17 18 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;19 20 21 22 23 24 &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;C3 C4&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Funciones de los pins Pin Nombre Función  &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;1 Datos TMDS 2- Rojo digital - (Link 1) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;2 Datos TMDS 2+ Rojo digital + (Link 1) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;3 Protección datos TMDS 2/4 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;4 Datos TMDS 4- Verde digital - (Enlace 2) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;5 Datos TMDS 4+ Verde digital + (Enlace 2) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div  class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;6 Reloj DDC &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;7 Datos DDC &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;8 Sincronización vertical analógica &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;9 Datos TMDS 1- Verde digital - (Enlace 1) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;10 Datos TMDS 1+ Verde digital + (Enlace 1) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY:  Arial"&gt;&lt;FONT size=3&gt;11 Protección datos TMDS 1/3 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;12 Datos TMDS 3- Azul digital - (Enlace 2) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;13 Datos TMDS 3+ Azul digital + (Enlace 2) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;14 +5V Energía para el monitor en espera &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;15 Tierra Retorno para pin 14 y sincronización analógica &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;16  Detección Hot Plug &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;17 Datos TMDS 0- Azul digital - (Enlace 1) y sincronización digital &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;18 Datos TMDS 0+ Azul digital + (Enlace 1) y sincronización digital &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;19 Protección datos TMDS 0/5 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;20 Datos TMDS 5- Rojo digital - (Enlace 2) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;21 Datos TMDS  5+ Rojo digital + (Enlace 2) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;22 Protección reloj TMDS &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;23 Reloj TMDS+ Reloj digital + (Enlaces 1 y 2) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;24 Reloj TMDS- Reloj digital - (Enlaces 1 y 2) &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;C1 Rojo analógico &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;C2 Verde analógico &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal  style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;C3 Azul analógico &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;C4 Sincronización horizontal analógica &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;C5 Tierra (analógico) Retorno para señales de Rojo, Verde y Azul &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;HDMI&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;B  style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;HDMIHigh-Definition Multi-media Interface (HDMI) -Interfaz multimedia de alta definición- es una norma de audio y vídeo digital, sin compresión y apoyado por la industria, se prevé que sea el sustituto del euroconector. HDMI provee un interfaz entre cualquier fuente de audio y vídeo digital.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;HDMI permite el uso de vídeo estándar, mejorado o de alta definición, así como audio digital multicanal en un único cable. Es independiente de los  varios estándares DTV como ATSC, DVB (-T,-S,-C), que no son más que encapsulaciones de datos MPEG. Tras ser enviados a un descodificador, se obtienen los datos de vídeo sin comprimir, pudiendo ser de alta definición. Estos datos se codifican en TMDS para ser transmitidos digitalmente por medio de HDMI. HDMI incluye también 8 canales de audio digital sin compresión. A partir de la versión 1.2, HDMI puede utilizar hasta 8 canales de audio de un bit. El audio de un bit es el usado en los Super audio CDs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Conectores&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;El conector  estándar de HDMI tipo A tiene 19 pines. Se ha definido también una versión de mayor resolución -tipo B-, pero su uso aún no se ha generalizado. El tipo B tiene 29 pines, permitiendo llevar un canal de vídeo expandido para pantallas de alta resolución. El tipo B fue diseñado para resoluciones más altas que las del formato 1080p.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;El HDMI tipo A es compatible con un enlace simple DVI, usado por los monitores de ordenador y tarjetas gráficas modernas. Esto quiere decir que una fuente DVI puede conectarse a un monitor HDMI, o viceversa, por medio de un adaptador o cable adecuado, pero el audio y las características de control remoto HDMI no estarán disponibles. Además, sin el uso  de HDCP, la calidad de vídeo y la resolución podrían ser degradadas artificialmente por la fuente de la señal para evitar al usuario final ver o, mayormente, copiar contenido protegido. El HDMI tipo B es, de forma similar, compatible hacia atrás con un enlace dual DVI.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Especificaciones técnicas&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Lleva audio, video y datos auxiliares. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div  class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Método de señalización: de acuerdo a las especificaciones DVI 1.0, enlace simple (HDMI tipo A) o enlace doble (HDMI tipo B). &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Frecuencia de píxels de vídeo: de 25 MHz a 165 MHz (tipo A) o a 330 MHz (tipo B). Formatos de vídeo por debajo de 25MHz (ej.: 13.5MHz para el 480i/NTSC) son transmitidos usando un esquema de repetición de píxels. Se pueden transmitir hasta 24 bits por pixel, independientemente de la frecuencia. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Codificación de los píxels: RGB 4:4:4, YCbCr 4:2:2, YCbCr 4:4:4. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt;  TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Frecuencias de muestreo del audio: 32 kHz, 44.1 kHz, 48 kHz, 88.2 kHz, 96kHz, 176.4 kHz, 192 kHz. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Canales de audio: hasta 8. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Detalles del conector (Conector ejemplo: Molex 500254-1907)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;o:p&gt;&lt;FONT size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY:  Arial"&gt;&lt;FONT size=3&gt;Asignación de pines de un conector tipo A Pin Asignación de señal &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;pin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; funcion&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;1 TMDS Data2+ &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;2 TMDS Data2 Shield &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;3 TMDS Data2&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal  style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;4 TMDS Data1+ &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;5 TMDS Data1 Shield&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;6 TMDS Data1 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;7 TMDS Data0+ &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;8 TMDS Data0 Shield &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial;  mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;9 TMDS Data0 &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;10 TMDS Clock+ &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;11 TMDS Clock Shield&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN lang=EN-US style="FONT-FAMILY: Arial; mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;12 TMDS Clock &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;13 CEC &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;14 Reservado &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY:  Arial"&gt;&lt;FONT size=3&gt;15 SCL&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;16 SDA &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;17 Tierra DDC/CEC&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;18 +5V Power &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;19 Detección de conexión "en caliente" (Hot Plug)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/div&gt;  &lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&amp;#32; 		&lt;hr size=1&gt;   Do You Yahoo!?  La mejor conexión a Internet y &lt;b&gt;2GB&lt;/b&gt; extra a tu correo por $100 al mes. &lt;a href="http://net.yahoo.com.mx"&gt;http://net.yahoo.com.mx&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-5863375336915027132?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/5863375336915027132/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=5863375336915027132' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5863375336915027132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5863375336915027132'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/02/tarea-no-1-invetigacion-dvi-y-hdmi.html' title='Tarea no. 1 INVETIGACION DVI Y HDMI'/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1150099579292843985.post-5826361764252637768</id><published>2007-02-16T07:26:00.000-08:00</published><updated>2007-02-16T07:39:10.507-08:00</updated><title type='text'></title><content type='html'>&lt;span style="font-size:130%;color:#990000;"&gt;COMPUTACION GRAFICA GRUPO 2&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;Computación Grafica grupo 2
Ing. Santiago Igor Valiente
Blog de: Gonzalez Cruz Aide Jazmin&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1150099579292843985-5826361764252637768?l=aide-comp-graf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aide-comp-graf.blogspot.com/feeds/5826361764252637768/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1150099579292843985&amp;postID=5826361764252637768' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5826361764252637768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1150099579292843985/posts/default/5826361764252637768'/><link rel='alternate' type='text/html' href='http://aide-comp-graf.blogspot.com/2007/02/computcion-grafica-grupo-2.html' title=''/><author><name>Aide Jazmin Gonzalez Cruz</name><uri>http://www.blogger.com/profile/00732785402181550676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
