jueves, 30 de junio de 2011

C++: Uso del string

Hola, recientemente que estuve trabajando en un proyecto con cadenas de texto me encontré con ciertos detalles que se deben tener en cuenta:

1. Para trabajar con "strings" se puede utilizar la cabecera string, es decir, #include < string >
Cabe aclarar que no es lo mismo que ya que este ultimo no posee la declaración "string".
2. Usar "using namespace std" o utilizar "std::string"

Si se utiliza el archivo de cabecera iostream no es necesario incluir el archivo string

el código quedaría así:

#include <string>

using namespace std;
...
...

string [[nombre del objeto]];

Hasta pronto.

martes, 28 de junio de 2011

Dibujar círculos con OpenFrameworks

Volviendo del fin de semana y casi que continuando la practica del sonido, vuelvo a coger OpenFrameworks para dibujar figuras en pantalla y esta ves le toco al circulo.

Voy a montar una clase que hice para esta practica (si a alguien le interesa complementarlo, bienvenido sea, pero espero que se vuelva a montar lo que se complementó para que sea como un repositorio, la idea es aprender).

La clase se puede descargar desde esta url: https://sites.google.com/site/notasof/circulos-of

para iniciar la clase hay que escribir en la clase "testApp.cpp"...

En el metodo setup:

vector2D* center_pos = new vector2D(ofGetWidth()/2, ofGetHeight()/2);
Circle* aux_circle = new Circle(5, *center_pos, [[radio maximo permitido para los circulos como parametro]]);
circle = *aux_circle;
circle.setup();

En el metodo update:

circle.update([[incremento del radio de los circulos como parametro]]);

En el metodo draw:

circle.draw();

La clase esta debidamente comentada por si cualquier duda.
Gracias.

jueves, 23 de junio de 2011

Depurar accediendo a los archivos de la carpeta data

Esto es algo importante y que no había tenido en cuenta (ni si quiera sabia como solucionarlo) para poder reproducir un sonido desde el mismo debug de la aplicación en el IDE... y el problema era que no me estaba cargando un archivo .mp3 que estaba en la carpeta "bin/data/sounds" y cuando ejecutaba la aplicación directamente fuera del IDE efectivamente estaba cargando el recurso.
Pues la solución es la siguiente:

1. Abrir la ventana de propiedades del proyecto
2. Click en Depuración
3. Escribir en la casilla de "Directorio de trabajo" lo siguiente: "$(ProjectDir)/bin" (sin comillas)
4. Aplicar y Aceptar

Ya con esta configuración el Debug de la aplicación en el mismo IDE cargará el recurso que se desea cargar.

Configurar las directivas de salida en VS2010

1. Click derecho en el proyecto principal de la solución del panel "Explorador de soluciones"
2. Click en propiedades
Muestra la ventana de propiedades del proyecto
3. Click en General > Directorio de salida
copiar "bin\" (sin comillas)
4. Click en General > Directorios intermedios
copiar "obj\$(Configuration)\" (sin comillas)
5. Click en General > Nombre de destino
copiar "$(ProjectName)_debug"
6. Click en Aplicar y Aceptar

ya esta...

Proyecto 1 - Aprendiendo con sonidos

Antes de iniciar a trabajar con un nuevo proyecto, seguir este enlace:

Programando main.cpp:

#include
#include
#include"testApp.h"

int main()
{
ofAppGlutWindow window; //define un objeto ofAppGlutWindow
ofSetupOpenGL(&window, 800, 600, OF_WINDOW); //establece el modo de visualización
ofRunApp(new testApp());//arranca la aplicación
}

OF_WINDOW = es una constante entera que le indica a OpenGL arrancar la aplicación en modo ventana.
OF_FULLSCREEN = es una constante entera que le indica a OpenGL arrancar la aplicación en modo pantalla completa.

Programación de testApp.h y testApp.cpp:

primero hay que agregar una nueva clase, al realizar esta acción configuramos el nombre de la clase con el wizard que nos facilita el IDE y automáticamente nos crea los archivos de cabecera y de código, en este caso como se la clase se llama "testApp" entonces crea los archivos "testApp.h" y "testApp.cpp", teniendo la siguiente estructura:
archivo testApp.h:

#pragma once
class testApp
{
public:
testApp(void);
~testApp(void);
};

lo primero que se debe hacer es codificar la siguiente condición:
#idndef _TEST_APP
#define _TEST_APP
...
#endif

quedaría de la siguiente manera:
#idndef _TEST_APP
#define _TEST_APP

#include

#pragma once
class testApp
{
public:
testApp(void);
~testApp(void);
};
#endif

Notar que se hizo una inclusión del archivo de cabecera "ofMain.h" para poder utilizar el framework

Adicionalmente a esto, esta clase debe ir heredada de la clase interna del framework "ofBaseApp"

quedaría de la siguiente manera:
#idndef _TEST_APP
#define _TEST_APP

#include

#pragma once
class testApp: public ofBaseApp
{
public:
testApp(void);
~testApp(void);
};
#endif

Para poder iniciar a programar OpenFrameworks como tal hay que tener en cuenta estos métodos:
Setup: Método para establecer los valores y las condiciones iniciales de la aplicación.
Update: Método para actualizar constantemente la aplicación durante su ejecución.
Draw: Método para "dibujar" los elementos gráficos que hay en el escenario de la aplicación.

Quedaría de la siguiente manera con la definición de los métodos anteriores:
#idndef _TEST_APP
#define _TEST_APP

#include

#pragma once
class testApp: public ofBaseApp
{
public:
testApp(void);
~testApp(void);
void setup(void);
void update(void);
void draw(void);
};
#endif

Programación testApp.cpp:

Cuando el IDE crea el archivo muestra la siguiente estructura inicial:
#include "testApp.h"

testApp::testApp(void){}
testApp::~testApp(void){}

aquí se programan todos los método que tenga la clase (coloco esto por si alguien es newbie en c++ con poo).
Escribimos lo siguiente:
#include "testApp.h"

testApp::testApp(void){}
testApp::~testApp(void){}
void testApp::setup(void){}
void testApp::update(void){}
void testApp::draw(void){}

definir el siguiente objeto en el archivo testApp.h con cualquier tipo de encapsulamiento, en este caso se colocara como privado:

private:
ofSoundPlayer test_sound;

En testApp.cpp programar lo siguiente:

void testApp::setup(void)
{
test_sound.loadSound([direccion o ruta donde este el sonido]);
test_sound.play();
}
void testApp::update(void)
{
ofSoundUpdate();//Actualiza todos los sonidos
}

compilar y ejecutar...

NOTA:
tener en cuenta configurar las directivas de salida
tener en cuenta configurar el debug para poder acceder a archivos de la carpeta data

Este proyecto se quedará aquí por el momento.
Espero que sea de su agrado y cualquier problema lo discutiremos en este mismo post

Andrés Camilo
24 de Junio de 2011

9 pasos para configurar OpenFrameworks en Ubunutu

Hola nuevamente estoy escribiendo ya que por fin pude compilar un proyecto de prueba en Ubuntu con code::blocks y estoy emocionado ya que primero que todo soy "primiparo" con linux el cual siempre me ha parecido algo complejo de manipular y de entenderlo después de llevar 25 años manejando puro windows (siempre he creído que linux es exclusivamente para profesionales) y segundo que todo por que me estoy cogiendo un poco mas de confianza con el sistema operativo y esa es una buena señal.

Entrando en materia, primero quiero decir que es un poco complejo de explicar esta parte ya que como no conosco muy bien ubuntu como tal, he decidido descomprimir los archivos del framework en un directorio que se puede visualizar desde windows, esto puede ser un problema al entender pero instale ubuntu encima de windows.

Descarga de OpenFrameworks para linux

(recordar que ya debe de estar instalado codeblocks)

1. Descargar el framework desde la página: http://www.openframeworks.cc/download en el link que dice "code blocks FAT" por si se tiene un procesador de 32 bits y "(64 bit) code blocks FAT" por si se tiene un procesador de 64 bits.
2. Descomprimir los archivos en el directorio donde se quiera trabajar.
Tener en cuenta que en la carpeta "apps" es donde deben ir los proyectos propios, y recordar que para mayor comodidad y orden con los proyectos, crear una carpeta (con cualquier nombre) dentro de "apps" para crear todos lo proyectos propios ahí.

Configurar OpenFrameworks en Codeblocks

3. Crear un nuevo proyecto vacío con codeblokcs
4. click derecho en el "iconito" del proyecto en el panel "Projects" (proyectos) - Add Files Recursively...
Muestra un cuadro de exploración donde tenemos que buscar los headers del framework con la ruta "libs/openframeworks"
5. Click en Abrir
Muestra un cuadro de dialogo mostrando todos los directorios que van a agregar al proyecto y dar click en Aceptar.
Muestra un segundo cuadro de dialogo mostrando los blancos a los que queremos incluir los archivos, seleccionamos "Debug" y "Release" y clickear en Aceptar.
Se agregan todos los headers del framework en el siguiente orden:
-Workspace:
---[Nombre del proyecto]:
--------Headers:
------------libs:
---------------openFrameworks:
---------------------app
---------------------communication
---------------------events
---------------------graphics
---------------------sound
---------------------utils
---------------------video
---------------------ofMain.h (archivo el cual tenemos que incluir en nuestro archivo main.cpp

6. Crear nuevo archivo main.cpp
7. escribir en main.cpp:

#include

int main()
{
}

Si compilamos nos va a salir este error:
|1|fatal error: ofMain.h: No existe el fichero o el directorio|

esto quiere decir que nos falta vincular los archivos headers o .h en la compilación:
para hacer esto vamos a hacer lo siguiente:

8. Click derecho en el icono del proyecto - Build Options... - (muestra un cuadro de propiedades) - [Seleccionar el nombre del proyecto dentro del cuadro de dialogo] - Search Directories - Compiler
9. Click en Add
Muestra un cuadro de dialogo donde tenemos que listar los directorios que contienen los headers:
-libs:
----openFrameworks
----openFrameworks/apps
----openFrameworks/communication
----openFrameworks/events
----openFrameworks/graphics
----openFrameworks/sound
----openFrameworks/utils
----openFrameworks/video

Con estos directorios no basta para poder compilar correctamente ya que nos saldrán los siguientes errores:
../../../libs/openFrameworks/utils/ofConstants.h|100|fatal error: GLee.h: No existe el fichero o el directorio|

Esto quiere decir que hay que agregar los demas directorios que estan en "libs":
-libs:
----fmodex/include
----FreeImage/include
----freetype/include
----glee/include
----gstappsink/include
----rtAudio/include
----poco/include/Poco
----poco/include

Al parecer todo esta bien, pero si compilamos mostrará el siguiente error:
../../../libs/openFrameworks/video/ofGstUtils.h|4|fatal error: gst/gst.h: No existe el fichero o el directorio|

hay que incluir estos directorios:
del directorio usr:
------include
------include/gstreamer-0.10
------include/glib-2.0
------include/lib/x86_64-linux-gnu/glib-2.0/include
------include/libxml2

Si compilamos ya no obtendremos ningun problema, hasta ahora...

Ya con esto OpenFrameworks queda instalado y configurado para ubuntu con codebloks, cualquier problema se puede discutir en este mismo post.
Ojala que les sea de su agrado.

Andrés Camilo
Junio 23 de 2011

Link de instalacion OpenFrameworks para linux con codeblokcs

Realmente hoy no he tenido tiempo de realizar paso a paso esta instalación, pero dejo aquí un link para tenerlo en cuenta:
por la noche cuando tenga tiempo, me propongo a realizar la instalación de OpenFrameworks para linux en Ubunutu con Code::Blocks y estaré comentando todo lo que hice así obtenga problemas y errores en compilación.

miércoles, 22 de junio de 2011

22 pasos para iniciar OpenFrameworks

Hola, he creado este blog para escribir mis notas acerca del framework "OpenFrameworks" el cual se trata de un conjunto de Apis, frameworks y/o bibliotecas de código para desarrollar aplicaciones gráficas interactivas. Actualmente este framework posee una gama de bibliotecas como OpenGL para gráficos 2d y 3d, OpenCV para procesamiento de imagen y video digital, entre otros. Hago énfasis en estos dos ya que actualmente son los que me interesa trabajar.
Yo soy novato con este framework y me interesa aprenderlo por diferentes razones los cuales me privo de comentarlos, pero por otro lado principalmente me interesa todo lo que tenga que ver con la conexión entre la ingeniería, la programación, el código y el arte, y creo que OpenFrameworks puede ser una excelente herramienta para desarrollar tal fin.
La página web de OpenFrameworks es: http://www.openframeworks.cc/ ahí encontraremos diferentes ejemplos reales, documentación, wiki, foros, comunidad y la sección de descarga del framework para diferentes plataformas (windows, mac y linux) y para diferentes IDES de desarrollo (VS 2008, VS 2010, CodeBlocks y XCode de mac).
También existe otra herramienta que tiene los mismos objetivos llamada CINDER: http://libcinder.org/ por si a alguien le interesa mas que OpenFrameworks.

La idea con estas notas es conservar todas las experiencias con OpenFrameworks desde el inicio, colocando los problemas y obstáculos que se tengan durante el transcurso del tiempo, con un proyecto determinado y/o con el compilador de C++ el cual (no puedo desconocer) siempre tiene sus trabas, además siempre es mejor compartir estas experiencias con los demás desarrolladores, artistas y a fines para lograr nuevas y mejores experiencias y soluciones. Pero principalmente quiero anotar todo lo que haga con esta herramienta ya que muchas veces se me olvidan muchos detalles en el inicio, en el durante y en el después de la ejecución de un proyecto.

Quiero iniciar la secuencias de notas explicando y explicándome como instalar OpenFrameworks para windows con VS 2010 (el cual se puede descargar de la página: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express), pero la idea es también saber instalar OpenFrameworks en linux, sobre todo en Ubuntu ya que últimamente estoy trabajando desde esta plataforma. Cuando sepa o haya experimentado este caso, inmediatamente lo anotaré, a no ser que alguien se me anticipe y si es así quedaré totalmente agradecido.

1. Descargar el instalador de Visual C++ Express versión 2010
2. Instalar el IDE (aquí hay un ejemplo para la versión 2008 el cual es la misma cosa para la version 2010: http://www.openframeworks.cc/setup/vs-2008 )
3. Descargar OpenFrameworks de la página: http://www.openframeworks.cc/download el link que dice "visual studio 2010 FAT" (FAT quiere decir que incluira todos los Addons los cuales son complementos que tiene implementado el framework)
4. Descomprimir en cualquier parte donde desee

En este momento el framework ya quedó instalado, no hay que hacer nada mas...
En la carpeta "apps" están todos los ejemplos comentados para tener un mejor entendimiento acerca del framework, pero aquí es donde hay que crear todos los proyectos propio (personalmente yo cree una carpeta llamada "myApps" dentro de la carpeta "apps" para llevar un orden lógico)
5. Después de abrir el IDE, crear un nuevo proyecto vacío dentro de la carpeta "myApps" y desactivar el "checkbox" que dice "Crear directorios para la solución", esto permite tener una mejor integración con los headers del framework.
6. click en Aceptar

Vincular el proyecto OpenFramewoks compilado:

7. Click derecho en la solucion del panel "Explorador de soluciones" > Agregar > Proyecto existente
8. Nos muestra una ventana de exploración y buscamos el proyecto OpenFrameworks compilado en la siguiente ruta: "libs\openframeworksCompiled\project\vs2010\" y seleccionamos el archivo "openframeworksLib"
9. Click en Abrir

Automáticamente agrega el proyecto en la solución creada, esto permite que podamos acceder a los archivos .h o cabeceras del frameworks e incluirlos en nuestro proyecto #include.

Configuración del proyecto:

Antes de configurar las propiedades del proyecto hay que crear el archivo main.cpp, el cual es el archivo de entrada en la ejecución de la aplicación.

10. Seleccionar el proyecto propio
11. Click en Proyecto > Propiedades
Nos muestra un cuadro de propiedades
12. Seleccionar Propiedades de configuración > C/C++ > General > Directorios de inclusión adicionales >
Nos muestra un cuadro de dialogo
13. En la lista ingresamos las rutas de los headers del frameworks:
..\..\..\..\libs\openFrameworks
..\..\..\..\libs\openFrameworks\graphics
..\..\..\..\libs\openFrameworks\app
..\..\..\..\libs\openFrameworks\sound
..\..\..\..\libs\openFrameworks\utils
..\..\..\..\libs\openFrameworks\communication
..\..\..\..\libs\openFrameworks\video
..\..\..\..\libs\openFrameworks\events
..\..\..\..\libs\glut\include
..\..\..\..\libs\rtAudio\include
..\..\..\..\libs\quicktime\include
..\..\..\..\libs\freetype\include
..\..\..\..\libs\freetype\include\freetype2
..\..\..\..\libs\freeImage\include
..\..\..\..\libs\fmodex\include
..\..\..\..\libs\videoInput\include
..\..\..\..\libs\glee\include
..\..\..\..\libs\glu\include
..\..\..\..\libs\poco\include
..\..\..\addons

14. Click en Aceptar
15. Seleccionamos C/C++ > Preprocesador > Definiciones de preprocesador >
Muestra un cuadro de dialogo donde tenemos que ingresar en el campo de texto lo siguiente:
WIN32
_DEBUG
_CONSOLE
POCO_STATIC

16. Click en Aceptar
17. Seleccionamos Vinculador > General > Directorio de bibliotecas adicionales >
Muestra un cuadro de dialogo con un campo de texto donde hay que colocar las rutas de las bibliotecas estaticas del framework:
..\..\..\libs\glut\lib\vs2010
..\..\..\libs\rtAudio\lib\vs2010
..\..\..\libs\FreeImage\lib\vs2010
..\..\..\libs\freetype\lib\vs2010
..\..\..\libs\quicktime\lib\vs2010
..\..\..\libs\fmodex\lib\vs2010
..\..\..\libs\videoInput\lib\vs2010
..\..\..\libs\glee\lib\vs2010
..\..\..\libs\glu\lib\vs2010
..\..\..\libs\openFrameworksCompiled\lib\vs2010
..\..\..\libs\poco\lib\vs2010

18. Click en Aceptar
19. Seleccionar Viculador > Entrada > Dependencias adicionales >
Muestra un cuadro de dialogo en el que hay colocar los nombres de la bibliotecas estaticas avincular:

openframeworksLibDebug.lib
OpenGL32.lib
GLu32.lib
kernel32.lib
setupapi.lib
glut32.lib
rtAudioD.lib
videoInput.lib
libfreetype.lib
FreeImage.lib
qtmlClient.lib
dsound.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
GLee.lib
fmodex_vc.lib
glu32.lib
PocoFoundationmtd.lib
PocoNetmtd.lib
PocoUtilmtd.lib
PocoXMLmtd.lib

20. Click en Aceptar
21. Seleccionar Vinculador > Entrada > Omitir bibliotecas predeterminadas específicas >
Muestra un cuadro dialogo donde hay que colocar lo siguiente:
atlthunk.lib
LIBC.lib
LIBCMT

22. click en Aceptar

Son 22 pasos los cuales explican como se puede iniciar un proyecto de OpenFrameworks con Visual C++ 2010. Mañana escribiré sobre la nueva experiencia que tenga programando OpenFrameworks.

Espero que sea de su agrado, si se encuentra con cualquier dificultad al realizar este proceso, lo podemos discutir en este mismo post.
Gracias
Andrés Camilo
23 Junio de 2011