Tutorial 5

Tamaño y Rotacion

En este tutorial no veremos conceptos nuevos sino que exploraremos más algunas instrucciones ya estudiadas. La instrucción que se introducirá en este tutorial es glScale. Esta instrucción manipula la “escala de nuestros ejes de referencia. Es una transformación acumulativa como las demás que hemos visto, en el sentido de que todas las transformaciones posteriores están afectadas por este cambio de escala, hasta que aparezca un nuevo glLoadIdentity. Por ejemplo, si luego de cambiar de escala al doble del tamaño, se hace un desplazamiento de 1 unidad, lo que sucede realmente es que se desplazan 2 unidades, porque estamos trasladando una unidad en un sistema de coordenadas transformado. También jugaremos un poco con los valores de color (vea el score) y con rotación. Se puede ver como rotaciones simple crean interesantes efectos 3D.


<CsoundSynthesizer>
<CsOptions>
-+Y
</CsOptions>
<CsInstruments>

#include "OpenGL.h"

sr=100
kr =100
ksmps=1
nchnls=1

GLfps 30
GLpanel "OpenGL panel", 512, 512
GLpanel_end
FLrun

glMatrixMode $GL_PROJECTION
glLoadIdentity
gluPerspective 60,0.1,100
glMatrixMode $GL_MODELVIEW

GLinsert_i $GL_NOT_VALID

glClear $GL_COLOR_BUFFER_BIT + $GL_DEPTH_BUFFER_BIT
GLinsert_i 1.1

gisine ftgen 1,0,1024,10,1
;Los encabezados usuales
instr 2
ired = p4
igreen = p5
iblue = p6
ix = p7
iy = p8
glLoadIdentity
tsize GLoscil 1,360,1
trot1 GLoscil 1,300,1
;Este instrumento 2 es muy similar al usado en el tutorial anterior. La asignación de campos-p es algo
;diferente, y se usarán osciladores independientes para controlar la rotación y el tamaño. Note la diferencia
;de frecuencia en ambos.
glTranslate ix,iy,-6
glRotate (trot1*360),1,0,1
;Note que rotamos en el eje x y en el z simultáneamente, lo que produce mucho movimiento en 3D.
glColor ired,igreen,iblue,1
glScale (tsize*3) , (tsize*3) ,(tsize*3)
;La instrucción glScale recibe tres valores que indican cuanto se modifica la escala de cada eje.
;Si los valores son iguales, la forma relativa permanece igual. Si son diferentes, el aspecto se modifica,
;y las rotaciones también empiezan a funcionar diferente. Lo que sucede aquí es que el objeto va a tener un tamaño
;variable entre 0 y 3 veces su tamaño normal. Cuando el oscilador tiene valores negativos (0 a -3) el tamaño
;se modifica entre 0 y 3, pero la figura se dibuja en el cuadrante opuesto. Vea el resultado para entender esto mejor.
glLineWidth 6
;Esta instrucción determina que tan gruesa se dibuja una línea. Es útil cuando dibujamos líneas en vez de polígonos.
glBegin $GL_LINE_LOOP
;Note que esta vez en vez de $GL_QUADS hemos usado $GL_LINE_LOOP. Esto crea lineas conectando
;los puntos en vez de un polígono relleno.
glVertex3 0,0,0
glVertex3 1,0,0
glVertex3 1,1,0
glVertex3 0,1,0
glEnd
GLinsert 1.5
endin



</CsInstruments>
<CsScore>

i 2 2 38 1 0 0 1 -1
i 2 3 37 0.8 0.2 0 0.8 -0.8
i 2 4 36 0.6 0.4 0 0.6 -0.6
i 2 5 35 0.4 0.6 0 0.4 -0.4
i 2 6 34 0.2 0.8 0 0.2 -0.2
i 2 7 33 0 1 0 0 0
i 2 8 32 0 0.8 0.2 -0.2 0.2
i 2 9 31 0 0.6 0.4 -0.4 0
i 2 10 30 0 0.4 0.6 -0.6 0
i 2 11 29 0 0.2 0.8 -0.8 0
i 2 12 28 0 0 1 -1 0
i 2 13 27 0.2 0 0.8 -1.2 0
i 2 14 26 0.4 0 0.6 -1.4 0
;Note como el color cambia gradualmente y como esto se refleja en el color de los objetos.

</CsScore>
</CsoundSynthesizer>

Como dije antes, este tutorial no introduce conceptos nuevos, pero muestra otros usos de instrucciones ya vistas. También se ve más interesante porque se mueve de una manera más inusual. Como siempre puede experimentar cambiando valores para ver los diferentes resulados


Regreso al menú de tutoriales de Video