OPENFRAMEWORKS 07

Introducción OpenFrameworks en una herramienta de programación creativa basada en el lenguage C++. OF proporciona una interfaz sencilla y uniforme sobre una colección de librerías como openGL para dibujo 2D/3D, FreeImage para trabajo con imágenes, Quicktime para video y acceso a cámara u OpenCV para visión arti!cial. openFrameworks es código abierto con licencia MIT y mulitplataforma ( , OSX, Windows, iOS y Android)

Objectivos

t Conocer una serie de conceptos que hacen C++ diferente de otros lenguajes. t Adquirir los conocimientos necesarios para crear una aplicación sencilla. t Aprender a usar addons en openFrameworks

Estructura Una aplicación en C++ siempre comienza ejecutando la función main. En openFrameworks siempre existe una clase testApp que se llama desde main y tiene al menos las siguientes funciones: void setup() void update() void draw()

Aquí se inicializan las variables a Se ejecuta una vez por cada frame. Se ejecuta una vez por cada utilizar durante la aplicación y se En ella se realizan los calculos u otras frame. En ella se dibuja a abren los recursos, por ejemplo operaciones necesarias para actualizar pantalla. Ninguna operación un archivo de video, un sonido o el estado de la aplicación de dibujado funcionará si no se una cámara de video. Se ejecuta ejecuta dentro de draw. una única vez al principio de la aplicación.

.h y .cpp

En C++ siempre existen estos dos tipos de archivos, en los archivos .h o ‘headers’ se especi!ca, se declara, lo que vamos a hacer. En el .cpp implementamos o de!nimos lo declarado en los .h

Se puede comparar con una receta de cocina, el .h son los ingredientes y el .cpp la descripción de como utilizar esos ingredientes para cocinar la receta.

Compilador Cuando creamos un programa en C++ para que pueda ser ejecutado, necesitamos compilarlo. La compilación de C++ se divide en 3 etapas:

Preprocesado Compilado Linkado

Convierte las palabras clave que Proceso donde se convierte el codigo En este proceso se unen todos empiezan por # en texto compilable. en C++ a codigo maquina. En esta fase los archivos .o y librerias Por ejemplo #include “ofMain.h” encontraremos errores de sintaxis externas (normalmente .a) en un pega el texto de ofMain.h en el como un ; de menos o una palabra ejecutable. Los errores en esta !chero que tenga el include. Los clave mal escrita. El compilado genera fase normalmente empiezan por errores relacionados con esta fase 1 archivo .o por cada archivo .c o .cpp unde!ned symbol y se producen siempre suelen ser archivos que no por que falta implementar una existen o que existen pero no estan funcion (existe en el .h pero no en la ruta de busqueda que hemos en el .cpp) o porque falta una con!gurado en el IDE libreria externa.

Hangar Interaction Lab: Lu - Vi / 9h – 14h Ju / 18 - 21h Ph: 93 30840 41 ex 28 Alex Posada (electronics): [email protected] / Lluis Gomez (software): [email protected] La Pantalla Grà!ca

La pantalla de una aplicación OF tendrá el tamaño en pixels que especi!quemos en main. El sistema de coordenadas tiene el 0,0 en la esquina superior izquierda y aumenta hacia abajo y hacia la derecha Todas las primitivas de dibujo, polígonos, polylines, curvas y bezier pueden llevar tambien z si queremos dibujar en 3D. Funciones

Primitivas Polígonos Curvas

ofLine (x1,y1,x2,y2) ofBeginShape() ofBeginShape() ofTriangle (x1,y1,x2,y2,x3,y3) ofVertex(x,y) ofCurveVertex(x0,y0,x1,y1,x2,y2,x3,y3) ofRect (x1,y1,width,height) ...... ofCircle (x1,y1,radius) ofEndShape(close) ofEndShape(close) ofEllipse (x1,y1,radiusH,radiusV) close: true/false close: true/false

Bezier Transformaciones

ofBeginShape() ofTranslate(x,y) ofRotateZ(angleZ) ** ofBezierVertex(x1,y1,x2,y2,x3,y3) ofRotate(angle) * ofScale(x,y) ... ofRotate(angle,x,y,z) ofScale(x,y,z) ofEndShape() ofRotateX(angleX) ofPushMatrix() ofRotateY(angleY) ofPopMatrix()

Atributos

ofFill() Dibuja solo relleno o solo contorno. ofNoFill() ofEnableAlphaBlending() Habilita dibujado con transparencia. ofDisableAlphaBlending() Valor por defecto. Desabilita dibujado con transparencia. ofSetColor(r,g,b) r,g,b = 0..255 Llamada a dibujar todo con el color indicado. ofBackground(r,g,b) r,g,b = 0..255 Pinta el fondo de este color. ofClear(r,g,b) r,g,b = 0..255 Borra la pantalla rellenandola de este color. ofSetRectMode(mode) Dibuja rectangulos según indica mode. ofSetLineWidth(width) width = 1..x Ancho del contorno de polígonos y lineas en pixels. ofSetBackgroundAuto(auto) auto = true / false Se borra lo dibujado en cada frame.

Clases ofImage Permite cargar imagen desde disco o URL, dibujar/capturar la/en pantalla, y salvar en disco. ofPixels Facilita el trabajo con arrays de pixels ofTexture Permite subir un array de pixels a la targeta grá!ca para su dibujado. ofVideoGrabber Acceso a camaras de video, tanto a la información en pixels como dibujarlos en pantalla. ofVideoPlayer Acceso a camaras de video y numerosas funciones relacionadas incluyendo reproductor. ofSoundPlayer Reproducción de sonidos desde archivos y análisis FFT. ofSoundStream Sintesis de Audio. ofColor Conversion de entre distintos espacios de color (RGB, HSB...) ofFile Operaciones con archivos. ofDirectory Operaciones con directorios. ofVectorMath Conjunto de clases para trabajar con matemática vectorial (ofVec2f, ofVec3f, ofVec4f, ofMatrix4x4...) Addons Help ?? La funcionalidad básica de openFrameworks: el core, se complementa mediante addons. Existen addons o!ciales que vienen http://openframeworks.cc/documentation con la descarga y addons de la comunidad que se pueden descargar desde la seccion de addons de la página web o desde el foro de http://forum.openframeworks.cc openFrameworks. Al estar desarrollado en C++, openFrameworks permite el uso de Los archivos .h o headers tambien son una gran fuente cualquier libreria de C o C++ disponible, tanto de código abierto de ayuda como propietarias.

Hangar Interaction Lab: Lu - Vi / 9h – 14h Ju / 18 - 21h Ph: 93 30840 41 ex 28 Alex Posada (electronics): [email protected] / Lluis Gomez (software): [email protected]