Archivos de Tags: __STDC_CONSTANT_MACROS @es

Instalar OpenSceneGraph 2.8.3 con soporte para Collada en Ubuntu 12.04

Vamos a instalar OpenSceneGraph 2.8.3 (de ahora en adelante OSG) para usarlo con osgART 2.0 RC3. Hasta donde yo se la última versión de OSG que funciona con osgART es la 2.9.6 (ya que las posteriores no consiguen poner de fondo la imagen que entra por la cámara y se ve todo negro ACTUALIZACIÓN: he encontrado la solución a este error, más información en este post), pero yo de todas maneras recomiendo instalar la versión 2.8.3. Descargárselo de aquí y descomprimirlo.

Instalar las siguientes dependencias:

sudo apt-get install cmake cmake-curses-gui libopenal-dev libopenal1 libcurl4-openssl-dev libpoppler-dev libpoppler-glib-dev librsvg2-dev libgtkglext1 libgtkglext1-dev libgtkglextmm-x11-1.2-0 libgtkglextmm-x11-1.2-dev libwxgtk2.8-dev libopenthreads-dev libtiff4-dev libinventor0 inventor-dev libgif-dev libgif4 libjasper-dev libjasper1 libopenexr-dev libopenexr6 libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev libavdevice53 libavcodec53 libavformat53 libavutil51 libswscale2 gstreamer0.10-ffmpeg ffmpeg libxine-dev libquicktime-dev winff dvdrip libavbin-dev libavbin0 libavifile-0.7c2 ffmpeg-dbg ffmpeg libavcodec-dev libavfilter-dev libxine1-ffmpeg moc-ffmpeg-plugin ffmpeg-dbg gstreamer0.10-fluendo-mp3 gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly libavbin-dev libavbin0 libavfilter-dev libavifile-0.7c2 libbabl-0.0-0 libcdaudio1 libmpeg2-4 libmpcdec6 libmp3lame0 libquicktime2 libxine1 libxine1-console libxine1-ffmpeg libxine1-misc-plugins libxine1-x moc-ffmpeg-plugin moc mjpegtools ogmtools xine-ui winff dvdrip libavbin-dev libavbin0 libavifile-0.7c2 ffmpeg-dbg ffmpeg-dbg ffmpeg libavcodec-dev libavfilter-dev libxine1-ffmpeg moc-ffmpeg-plugin

Instalar collada-dom como expliqué en “Instalar la librería collada-dom en Ubuntu 10.04, 10.11, 11.04, 11.10 y 12.04“.

Algunas de las librerías de las que depende OSG han cambiado por lo que hace falta cambiar algunas partes del código para que funcione:

/src/osgPlugins/curl/ReaderWriterCURL.cpp
– Eliminar la línea 24 (#include <curl/types.h>").
/src/osgPlugins/ffmpeg/FFmpegDecoder.cpp
– Añadir el siguiente include en la línea 2:

#include <libavutil/mathematics.h>

– Cambiar CODEC_TYPE_AUDIO por AVMEDIA_TYPE_AUDIO en la línea 220.
– Cambiar CODEC_TYPE_VIDEO por AVMEDIA_TYPE_VIDEO en la línea 238.
– Reemplazar el contenido de las líneas de 84 a la 96 (la sentencia switch) por:

error_str = AVERROR(error);

/src/osgPlugins/ffmpeg/FFmpegHeaders.hpp
– Añadir el siguiente define debajo de “#define __STDC_CONSTANT_MACROS“:

#define FF_API_OLD_SAMPLE_FMT 0

Si quieres instalar OSG 2.9.6 mete también estos cambios al código.

Ahora ya puede ir dentro de la carpeta del código fuente de OSG 2.8.3 y ejecutar:

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-D__STDC_CONSTANT_MACROS
make
sudo make install

He añadido “-DCMAKE_CXX_FLAGS=-D__STDC_CONSTANT_MACROS” al comando cmake para solucionar un error con la definición de UINT64_C. Puede añadir la opción “-DBUILD_OSG_EXAMPLES=1” para compilar los ejemplos (se instalan en “/usr/local/share/OpenSceneGraph/bin/“). Si los compilas descárgate también los OpenSceneGraph-Data así:

sudo svn checkout http://www.openscenegraph.org/svn/osg/OpenSceneGraph-Data/tags/OpenSceneGraph-Data-2.8.0/ /usr/local/share/OpenSceneGraph/OpenSceneGraph-Data

Si quieres comprobar que la librería collada-dom se detecta correctamente al configurar OSG con cmake ejecuta ccmake .. y verifica que los datos de Collada son correctos:

COLLADA_BOOST_FILESYSTEM_LIBRA   /usr/lib/libboost_filesystem.so              
COLLADA_BOOST_FILESYSTEM_LIBRA   COLLADA_BOOST_FILESYSTEM_LIBRARY_DEBUG-NOTFOU
COLLADA_BOOST_SYSTEM_LIBRARY     /usr/lib/libboost_system.so                  
COLLADA_BOOST_SYSTEM_LIBRARY_D   COLLADA_BOOST_SYSTEM_LIBRARY_DEBUG-NOTFOUND  
COLLADA_DOM_ROOT                 /dom                                         
COLLADA_DYNAMIC_LIBRARY          /usr/local/lib/libcollada14dom.so            
COLLADA_DYNAMIC_LIBRARY_DEBUG    COLLADA_DYNAMIC_LIBRARY_DEBUG-NOTFOUND       
COLLADA_INCLUDE_DIR              /usr/local/include/colladadom                 
COLLADA_MINIZIP_LIBRARY          /usr/local/lib/libminizip.so                 
COLLADA_MINIZIP_LIBRARY_DEBUG    COLLADA_MINIZIP_LIBRARY_DEBUG-NOTFOUND       
COLLADA_PCRECPP_LIBRARY          /usr/lib/i386-linux-gnu/libpcrecpp.so        
COLLADA_PCRECPP_LIBRARY_DEBUG    COLLADA_PCRECPP_LIBRARY_DEBUG-NOTFOUND       
COLLADA_PCRE_LIBRARY             /usr/lib/i386-linux-gnu/libpcre.so           
COLLADA_PCRE_LIBRARY_DEBUG       COLLADA_PCRE_LIBRARY_DEBUG-NOTFOUND          
COLLADA_STATIC_LIBRARY           COLLADA_STATIC_LIBRARY-NOTFOUND              
COLLADA_STATIC_LIBRARY_DEBUG     COLLADA_STATIC_LIBRARY_DEBUG-NOTFOUND 

Cuando terminas de compilar e installar OSG deberías tener un fichero llamado “osgdb_dae.so” en tu carpeta de plugins de OSG (“/usr/local/lib/osgPlugins-2.8.3“). Si no lo tienes comprueba que has instalado bien la librería collada-dom y que OSG está configurado para usarla.

Una vez instalado añade las carpetas de las librerías (/usr/local/lib y /usr/local/lib/osgPlugins-2.8.3) a la variable de entorno LD_LIBRARY_PATH en el fichero ~/.bashrc o ~/.profile:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib/osgPlugins-2.8.3

Si te descargaste OpenSceneGraph-Data añade también:

export OSG_FILE_PATH=/usr/local/share/OpenSceneGraph/OpenSceneGraph-Data

Puede comprobar que OSG funciona correctamente ejecutando uno de los ejemplos (si es que los compilaste):

/usr/local/share/OpenSceneGraph/bin/osglogo

Se debería ver algo como esto: