Archivos de Tags: Eclipse @es @es

Solución a texturas negras en modelos 3D de Collada-dom

Antes tenía problemas al cargar modelos 3D con Collada-dom porque salían algunas texturas en negro. Como en este caso por ejemplo:

Hace un tiempo descubrí que se debía al locale (idioma) en el que estaba instalado el sistema operativo Ubuntu. Yo siempre lo instalo en inglés y por eso no había tenido el probema, pero una vez un compañero me dejo su Ubuntu en español para que le instalara todo y me surgió el fallo. Estuve todo el fin de semana intentando encontrar el problema, pero como no recibía ningún tipo de mensaje de error no tenía ninguna pista. Al final me di cuenta de que el problema era el idioma y como no teníamos tiempo para encontrar otra solución mejor instalamos el Ubuntu en inglés y listo.

Hoy he cometido el error de instalar las locales de español junto con las de inglés para poder ver las fechas y los números a nuestra manera y entonces… texturas en negro otra vez. Así que sin más he quitado las locales en español y entonces la aplicación cascaba al intentar cargar un modelo 3D con Collada-dom… pero esta vez si que tenía un mensaje de error en la consola!

locale::facet::_S_create_c_locale name not valid

Con esto ya podía empezar a buscar. Y he descubierto que el causante del problema es la librería boost. En función de la versión que uses (yo uso la 1.46 pero se supone que en la 1.48 esto ya está arreglado) falla si no tienes la locale configurada a “C”.

Así que un arreglo rápido es configurar la variable de entorno LC_ALL al valor C. Se puede hacer de manera permanente en el sistema poniéndolo en tu fichero profile (en tu carpeta home) o sin más ejecutando esto en el terminal antes de ejecutar tu aplicación (en ese mismo terminal claro):

export LC_ALL=C

Como yo uso Eclipse-CDT para desarrollar la manera más fácil es configurar la variable de entorno solo para mi aplicación usando las Debug/Run Configurations. Haz click en la flecha pequeña de los botones Degug o Run y selecciona “Debug Configurations…” o “Run Configurations…”. Luego ve a la pestaña de “Environment” y configura la variable así:

Espero que esto os sirva de ayuda porque la verdad ¡a mi me ha dado muchos dolores de cabeza! Y así es como se debería ver el modelo en 3D:

UPDATE: Una vez había cambiado los locales me di cuenta de que al intentar instalar cualquier cosa con apt-get me aparecía el siguiente error diciendo que mis locales no estaban bien configuradas:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = "en_US:en",
	LC_ALL = (unset),
	LC_TIME = "es_ES.UTF-8",
	LC_MONETARY = "es_ES.UTF-8",
	LC_ADDRESS = "es_ES.UTF-8",
	LC_TELEPHONE = "es_ES.UTF-8",
	LC_NAME = "es_ES.UTF-8",
	LC_MEASUREMENT = "es_ES.UTF-8",
	LC_IDENTIFICATION = "es_ES.UTF-8",
	LC_NUMERIC = "es_ES.UTF-8",
	LC_PAPER = "es_ES.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

Como se puede ver mis locales para time, monetary, address, telephone, name, measurement, identification, numeric y paper están configuradas a español (es_ES.UTF-8), mi idioma está configurado a inglés (es_US.UTF-8) pero no tengo nada configurado para LC_ALL. Para arreglar este error ejecuté los siguientes comandos en un terminal:

export LC_ALL=en_US.UTF-8
sudo locale-gen en_US.UTF-8
sudo dpkg-reconfigure locales

Y ahora ya el problema está solucionado porque todas mis locales están configuradas a en_US.UTF-8. Se puede ver como se tienen configuradas las variables de locale ejecutando “locale”:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Sources: https://svn.boost.org/trac/boost/ticket/4688
https://svn.boost.org/trac/boost/ticket/5928
http://www.becodemyfriend.com/2011/11/perl-warning-falling-back-to-the-standard-locale-%E2%80%9Cc%E2%80%9D/

Usar OpenCV en Eclipse CDT

Instalar OpenCV (ver los post de cómo hacerlo en Ubuntu 10.10, Ubuntu 11.10, Ubuntu 12.04 y OpenCV 2.4 en Ubuntu 12.04).

Instalar Eclipse CDT:

sudo apt-get install eclipse-cdt

Abrir Eclipse CDT y seleccionar un workspace (no es más que una ruta donde poder guardar varios proyectos juntos). Crear un nuevo proyecto “C++ Project”, darle un nombre y seleccionar “Empty Project” para “Project type” y “Linux GCC” para “Toolchains”.

Hacer click con el botón derecho del ratón sobre la carpeta del proyecto y seleccionar “Properties”. Ir a “C/C++ Build->Settings”. Ahí, dentro de la pestaña de “Tool Settings”, ir a “GCC C++ Compiler->Includes” y rellenar la opción “Include paths (-l)” con la ruta donde estén instalados los includes de OpenCV. Si instalaste OpenCV desde el código fuente lo más probable es que la ruta sea “/usr/local/include/opencv2” (o la ruta indicada en CMAKE_INSTALL_PREFIX al configurar con CMake), pero si lo instalaste desde los repositorios la ruta debería ser “/usr/include/opencv2“.

Ahora ir a “GCC C++ Linker->Libraries” y rellenar el campo “Libraries (-l)” con (al menos) estas librerías de OpenCV:

opencv_core
opencv_highgui

La opción “Library search paths (-L)” debe tener la ruta donde se encuentren los binarios de las librerías de OpenCV. Como antes, si instalaste OpenCV desde el código fuente la ruta debería ser “/usr/local/lib” (pasa lo mismo que antes aquí con la opción CMAKE_INSTALL_PREFIX) y si lo instalaste desde los repositorios “/usr/lib“.

Ya es hora de programar un poco. Ir a “File->New->Source file” y crear un nuevo fichero llamada “main.cpp“. Rellenarlo con lo siguiente:

#include "opencv.hpp"

int main(int argc, char* argv[])  {

	IplImage* img = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 3 );

	cvCircle( img, cvPoint( 320, 240 ), 100, cvScalar( 255, 0, 0 ), 5 );

	cvNamedWindow( "OpenCV Window", CV_WINDOW_NORMAL );
	cvShowImage( "OpenCV Window", img );

	cvWaitKey(0);

	cvDestroyWindow( "OpenCV Window" );
	cvReleaseImage( &img );

	return 0;
}

Este código tan solo mostrará una ventana negra con un círculo azul en el centro y esperará a que pulses una tecla para salir. No es demasiado elaborado pero solo queremos comprobar que todo funciona bien.

Eclise CDT viene con la opción de construir automáticamente la aplicación, pero yo siempre lo deshabilito desmarcando “Project->Build Automatically”. Construir la aplicación pulsando Control+B o mediante la opción “Project->Build All”. Antes de debugger/ejecutar nuestra aplicación tenemos que configurar un entorno de debug/ejecución. Ir a “Run->Debug Configurations…” y hacer doble click en “C/C++ Application”. Se creará una configuración de entorno de debug nuevo, pero el parámetro “C/C++ Application” puede que no se rellene automáticamente (al menos a mi me pasó esto), así que haz click en el botón “Browse…” para elegir un “Project”, seleccionar tu proyecto, y ahora (si el binario de tu aplicación existía al haber construido antes correctamente todo) todo debería estar bien y el botón de “Debug” debería poder pulsarse.

Ahora ya tu aplicación debería poder ejecutarse sin problemas. Usar cualquier otra librería dentro de Eclipse CDT es más o menos parecido.