viernes, 31 de octubre de 2014

Diagrama de clases de KinectFusionBasics-D2D

Tratando de comprender los demos de Microsoft, comienzo por hacer los diagramas de clases. ¿Quién es responsable de qué?

martes, 28 de octubre de 2014

Hola mundo Kinect con wxWidgets

Como paso inicial para un proyecto de visión por computadora, fue necesario separar claramente el código que controla el Kinect en DepthBasics-D2D © Microsoft, del código de la interfaz gráfica, que utiliza las Microsoft Foundation Classes (MFC). Con este objetivo, creé un pequeño programa que utiliza wxWidgets, el Kinect Developer Toolkit y Kinect SDK con los drivers oficiales para controlar el Kinect, que pueden ser descargados gratuitamente del sitio de Microsoft. Este programa únicamente lee la información de profundidad y la muestra en pantalla, manteniendo al mínimo el código requerido. La conexión al Kinect y lectura de información se realizan dentro de la clase definida en el archivo KinectManager.h. Las otras clases se encargan de crear y manejar la interfaz gráfica. Como wxWidgets requiere, se utiliza un timer para generar eventos que obliguen al programa a leer la información del Kinect. El proyecto de Visual Studio 2012 (Express) puede ser descargado de aquí.

domingo, 6 de julio de 2014

Cómo crear TabControl en CEGUI sólo con el archivo .layout

CEGUI incluye un buen ejemplo de cómo utilizar el TabControl, sin embargo require código.  Si se desea crear todas las pestañas con un .layout no hay instrucciones a la vista.  El orden correcto para insertar los elementos es:
<Window type="TaharezLook/TabControl" name="TabControl" >
           <Property name="TooltipText" value="This is the tab control" />
           <Property name="TabHeight" value="{0,-1}" />
           <Property name="MaxSize" value="{{1,0},{1,0}}" />
           <Property name="TabPanePosition" value="Top" />
           <Property name="Area" value="{{0.5,0},{0.15,0},{0.95,0},{0.95,0}}" />
           <Window name="PageArmor" type="TaharezLook/TabButtonPane">
                <Property name="Area" value="{{0.05,0},{0.05,0},{0.95,0},{0.95,0}}" />
                <Property name="Text" value="Armadura" />
           </Window>
           <Window name="PageItems" type="TaharezLook/TabButtonPane">
                <Property name="Area" value="{{0.05,0},{0.05,0},{0.95,0},{0.95,0}}" />
                <Property name="Text" value="Artículos" />
           </Window>
           <Window name="PageSkills" type="TaharezLook/TabButtonPane">
                <Property name="Area" value="{{0.05,0},{0.05,0},{0.95,0},{0.95,0}}" />
                <Property name="Text" value="Habilidades" />
           </Window>
</Window>
Ahora sí, dentro del TabButtonPane se puede incluir cualquier elemento que se necesite en el panel de esa pestaña.

sábado, 28 de junio de 2014

Cómo compilar CEGUI 8.3 con Ogre 1.9 localmente en linux

Compilar Ogre

Después de pelearme con la instalación de apt-get en Debian, he terminado por compilarlo desde la fuente.
  1. Instalar los Prerrequisitos. (Aguas con nvidia-cg-toolkit, si ya estaba instalado, tener cuidado de no arruinar lo que ya estaba, asegurarse de que todos los elementos de nvidia tengan la misma versión el comando nvidia-smi falla si hay inconsistencias, se puede usar para probar).
  2. En esta ocación me tocó descargar el código del repo en Mercurial, por lo que tuve que instalar la herramienta para crear el clon:sudo apt-get install hgsvn
  3. Se crea el clon con:
    hg clone https://bitbucket.org/sinbad/ogre
  4. cd ogre
    mkdir build
    mkdir compile
    cd compile
  5. cmake -D CMAKE_INSTALL_PREFIX=[/home/.../ogre/build/] ..
    make                  # Se puede usar make -j2 si el procesador tiene dos nucleos
    make install
  6. Intentar correr algunos ejemplos.Para ejecutar las aplicaciones, es necesario indicar dónde se encuentran las bibliotecas (dado que instalé en un directorio inusual).
    export LD_LIBRARY_PATH=/home/.../ogre/build/lib:$LD_LIBRARY_PATH
    Para no repetir este paso cada vez que se abre una terminal, se puede agregar esta línea al final del archivo ~/.bashrc. Ejecutar:
    ./SampleBrowser
  7. Si aparece el error
    terminate called after throwing an instance of 'std::runtime_error'
    what(): locale::facet::_S_create_c_locale name not valid
    Instalar:
    sudo apt-get install locales
    sudo dpkg-reconfigure locales   # Seleccionar alguno en inglés, aunque se puede dejar el español como locale por defecto

Compilar CEGUI

CEGUI utiliza cmake para encontrar una instalación a nivel sistema de Ogre, por lo que hay que indicar dónde encontrar los archivos que dicen dónde está y qué necesita Ogre.  Además, FindFreetype.cmake tiene un error.

  1. Primero hay que arreglar FindFreetype.cmake como se indica en https://bbs.archlinux.org/viewtopic.php?id=174300, para evitar el error:
    CEGUI was compiled without freetype support
  2. Luego, al utilizar cmake para compilar CEGUI se indica la ubicación de ogre:
    cd <CEGUI directory>
    mkdir compile
    mkdir build
    cd compile
    cmake -D CMAKE_INSTALL_PREFIX=/home/../cegui-0.8.3/build -D OGRE_HOME=/home/.../ogre/build ..
    make
    make install

lunes, 23 de junio de 2014

Cómo utilizar SmallCaps en latex, con fuente SansSerif

En varias ocasiones se me ha indicado que es mejor escribir mis reportes con un tipo de letra SansSerif, utilizando:

\renewcommand{\familydefault}{\sfdefault} % Mucha gente considera que las fuentes tipo sans son más fáciles de leer.
\renewcommand*{\sfdefault}{cmss}

Sin embargo cuando combino esto con títulos en SmallCaps inmediatamente surge el error:

Font shape `OTI/cms/m/sc'

ó, si no uso cmss:

Font shape `OTI/lmss/m/sc' in size <10.95> not available(Font) Font shape `OTI/lmr/m/sc' tried instead on input line...

Existen dos formas sencillas para resolverlo:
La primera es utilizar la fuente Helvetica.

\usepackage{Helvetic}

Sin embargo, a mí me agrada más utilizar lmss o cms para el texto.  Si sólo quiero cambiar de fuente para conseguir el efecto SmallCaps, la solución es redefinir únicamente el comando para este estilo, utilizando Helvetica (phv):

\usepackage{letltxmacro}
\LetLtxMacro{\oldtextsc}{\textsc}
\renewcommand{\textsc}[1]{{\fontfamily{phv}\selectfont\oldtextsc{#1}}} % Usa Helvetica para las small caps, ya que cmss no tiene esa opción.

jueves, 29 de enero de 2009

Java Sun en Ubuntu

Es trivial, pero hay que conocer los comandos:

sudo apt-get install sun-java6-jdk (para desarrolladores)
sudo apt-get install sun-java6-jre (si sólo se quiere ejecutar la JVM)
sudo apt-get install sun-java6-bin (no es necesario si se usó el primero)

Ahora, para que ésta sea la versión que se ejecuta por defecto [2]:

sudo update-alternatives --config java
sudo update-alternatives --config keytool

Resuelve:

Signing Key Creation: keytool error: java.lang.IllegalArgumentException: java.io.IOException: Invalid char:

[1] Ya no me acuerdo :(
[2] http://groups.google.com/group/android-developers/browse_thread/thread/398b4bedaaa3df3d

miércoles, 27 de febrero de 2008

Actualizando Glut

¡Hey! Esto sí está lejos de ser una solución oficial, pero funciona suficientemente bien.

Resulta que algunas personas hemos intentado utilizar la vieja biblioteca GLUT con versiones actuales del Visual Studio, díganse, 2003, 2005 o 2008. En el momento en el que uno intenta compilar alguna aplicación que dependa de GLUT, aparece el siguiente error:

c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(371) : error C2381: 'exit' : nueva definición; __declspec(noreturn) es diferente
c:\documents and settings\...\gl\glut.h(146) : vea la declaración de 'exit'

o una versión en inglés:

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdlib.h(371) : error C2381: 'exit' : redefinition; __declspec(noreturn) differs
c:\Documents and Settings\Owner\Desktop\FG WIN32 compile\3rdparty\include\GL/glut.h(146) : see declaration of 'exit'

Bueno, resulta que algunas definiciones en stdlib.h han sido actualizadas.

Lo primero que se me ocurrió fue recompilar GLUT, bajándo el código fuente de la liga citada arriba, sin embargo, apareció el mismo error, acompañado de otras advertencias. La solución es simple, hay que modificar la línea 146 de glut.h:

Cambiar:
extern _CRTIMP void __cdecl exit(int);

Por:
extern _CRTIMP __declspec(noreturn) void __cdecl exit(int);

Con esto, en lugar de error, se obtendrá otra advertencia, pero las aplicaciones compilan y corren. (También aparece el error de que no logra instalar glut.lib y glut.h en los directorios indicados, que son del visual studio viejo, pero es pecata minuta, en el peor de los casos se pueden copiar a mano.) Sospecho que incluso basta con hacer esta modificación en glut.h y no es necesario recompilar toda la biblioteca.

Sin embargo ojo, al compilar la biblioteca recuerdo haber visto inclusive advertencias sobre funciones deprecadas, por lo que puede que este parche no dure mucho y haya que hacer una revisión más cuidadosa de glut.