Tutorial 3

Rotación y campos-p (p-fields)

En este tutorial veremos cómo tuilizar la instrucción glRotation, y veremos qué son campos-p y para cómo se usan.

El programa comienza igual que los tutoriales anteriores, hasta la definición del instrumento 1.

<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


instr 1

islant = p4

;Hasta aquí he reciclado el código de los tutoriales pasados. Aquí vemos una variable

;de csound siendo definida. Csound trabaja con diferentes tipos de variables, que tienen

;diferentes usos y comportamiento. Las variables más simples se llaman de “actualización-i”

;o mejor el término en inglés: i-rate. Estas variables pueden considerarse constantes (ya que

;solo se pueden modificar al inicio de una nota, es decir permanecen constantes durante toda la nota).

;Una variable i-rate siempre empieza con el carater 'i'. Normalmente los caracteres que le

;siguen a esta 'i' dan alguna indicación del uso de la variable, aunque esto es sólo por conveniencia

;En este caso usaremos la variable islant. Note que a la variable islant le asignamos el valor p4.

;Esto significa que asignamos el campo-p numero 4 a la variable. Campos-p son valores entrados

;en el score en el momento de crear la nota. Se puede ver abajo en el score que aparte de los tres

;valores que hemos usado anteriormente (que son obligatorios), hay otros dos valores o columnas.

;Estos son los campos-p número 4 y 5. Todos los campos-p luego del tercero no tienen un uso definido,

;ya que es el instrumento el que define su uso. Los campos-p son útiles porque permiten la instaciación

;de un instrumento con diferentes parámetros, en vez de tener que crear un instrumento nuevo.

;Los campos-p deben estar separados de al menos u espacio en blanco ( pueden ser más o tab)


irotation = p5

;Lo anterior aplica aquí también. El quinto valor colocado al llamar el instrumento se escribe en la

;variable irotation. Note los valores usados en el score: para irotation tenemos multiplos de 45,

;y para islant tenemos 0 o 45. Note también que islant e irotation son variables locales, o sea que cada nota,

;así sea del mismo instrumento, tiene un valor propio e independiente de islant e irotation.


glLoadIdentity

;Recuerde que glLoadIdentity revierte todas las rotaciones y transformaciones anteriores (pero no lo

;que ya se ha dibujado)


glTranslate 0,0,-5

;Primero trasladamos nuestros ejes 5 unidades hacia la pantalla para poder ver los objetos

;que se dibujarán. Si no hicieramos esto, los objetos se dibujarían en el mismo punto en el que está

;la cámara y no los veríamos.

glRotate irotation,0,0,1

;Ahora usamos la instrucción glRotate. Los valores que se deben entrar son: el ángulo a rotar

;(siguiendo siempre la regla de la mano derecha), y luego los valores de escala en cada eje.

; En este primer caso rotamos irotation grados alrededor del eje z. Rotación en el eje z es rotar como

;rotan las manecillas de un reloj, o como se mueve la hélice de un avión visto de frente. Note que

;en el score cada nueva instanciación tiene 45 grados más de rotación que la anterior.

glRotate islant,0,1,0

;Ahora usaremos la variable islant para hacer una rotacion alrededor del eje y. Note que

;esta rotación ocurre después de la primera rotación y se aplica a los ejes de referencia que ya

;han sido rotados. En otras palabras no estamos rotando alrededor del eje y original sino alrededor

;del nuevo eje y producto de la primera rotación. Esto puede ser complejo al principio pero luego

;tiene mucha lógica. Se puede pensar que la rotación alrededor del eje y es como la rotación de un

;LP en el tornamesa. Imagine entonces que el tornamesa esta pegado a la hélice de un avión, que primero

;gira un poco u luego rotamos el disco.... tiene sentido lo que digo??


glBegin $GL_TRIANGLES

;Ahora que hemos colocado los ejes donde los queremos, dibujamos un triángulo. Esto se hace

;Igual que con QUADS en el tutorial anterior, pero require tres vértices. Note como glColor se usa para hacer el centro blanco y los extremos azules.

glColor 1,1,1,1

glVertex3 0,0,0

glColor 0,0,1,1

glVertex3 1,2,0

glVertex3 -1,2,0

glEnd

GLinsert 1.5

;Nunca se olvide de GLinsert.

endin

;Este es el único instrumento. Será llamado 8 veces en el score con diferentes parámetros de rotación,

;y diferentes tiempos de inicio

</CsInstruments>

<CsScore>

i 1 1 12 45 45

i 1 2 12 0 90

i 1 3 12 45 135

i 1 4 12 0 180

i 1 5 12 45 225

i 1 6 12 0 270

i 1 7 12 45 315

i 1 8 12 0 0



</CsScore>

</CsoundSynthesizer>

</CsoundSynthesizer>


Listo! Esto fue el tutorial 3. La rotación y el uso de campos-p se irá haciendo cada vez más clara con el uso.

Otros valores que se pueden usar con glBegin son:

$GL_POINTS

$GL_LINES

$GL_LINE_STRIP

$GL_LINE_LOOP

$GL_TRIANGLES

$GL_TRIANGLE_STRIP

$GL_TRIANGLE_FAN

$GL_QUADS

$GL_QUAD_STRIP

$GL_POLYGON



Para una definición completa de cada uno puede visitar (en inglés):

http://www.parallab.uib.no/SGI_bookshelves/SGI_Developer/books/OpenGL_PG/sgi_html/index.html



Regreso al menú de tutoriales de Video