lunes, 26 de septiembre de 2011

Instalar Bullet Physics para Codeblocks

1. Bajar la última versión de bullet en:
En mi caso bullet2.79.


2. Descomprimir Bullet preferiblemente en una carpeta de ruta corta, yo cree una carpeta en C:\Bulletcodeblocks
La ruta para bullet quedo C:\Bulletcodeblocks\bullet 2.79
Bajar CMake de:
http://www.cmake.org/cmake/resources/software.html la versión que yo tengo es CMake 2.8.5


3. Poner en las variables de entorno en path minGW/bin con la version de minGW que se quiera compilar, en mi caso configure el path para minGW 32 bits por problemas con las versión de bullet 2.78 para compilar en 64bits. 

Nota: En el siguiente paso es importante lo del punto 3 debido a que Cmake se configura de acuerdo a esto y nos ahorra el tener que hacerlo a mano.


4. Configuración Cmake
Despues de instalar Cmake abrir CMake-gui
  •     where is the source code: En mi caso C:\Bulletcodeblocks\bullet 2.7
  •     Where to build the binaries: en mi caso C:\Bulletcodeblocks

Dar en configure, saldrá otra ventana donde debemos poner el compilador en nuestro caso codeblocks 
minGW y dejar el radio button en Use default native compilers. Después habrá errores debido a que no esta
completamente configurado.  “Los errores aparecen en rojo”.

Es necesario chekear advanced para que salgan el resto de opciones y también chekear grouped para mayor orden.


pestaña BUILD:
Se checkea los demos que se quieran construir pero hay que tener cuidado en tener instalado antes lo que se requiere por ejemplo para nvidia opencl demos tener ya instalado Cuda. 
Si se chekea build opencl demos es necesario tener opencl ya sea para Nvidia o para intel  instalado. En el caso de chekear para nvidia configurar como sigue:
  • Nvidia Opencl_ICD_CFG colocar la ruta C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v4.0/lib/Win32
  • Nvidia Opencl_INCLUDES C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v4.0/include/CL
  • libraries C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\lib\Win32\Opencl.lib.


Pestaña Cmake:
Ya estara todo configurado si se puso minGW/bin en el path. Unicamente en:
  • Cmake_Codeblocks_executable poner la ruta de codeblocks. 


Pestaña GLUT:
Si se checkea Los Demos y extras es necesario configurar la ruta de glut y checkear glut, aquí simplemente poner las rutas a las librerías de glut. Ojo, bullet trae una carpeta llamada Glut por lo tanto sacar las librerías y headers de aquí y copiarlas en minGW y configurar las ruta de mingw, también son necesarias las librerias glew.lib así que copiarlas tambien , después borra la carpeta ya que si se deja compilara con errores en esta carpeta.


Pestaña NVIDIA:

Si se chekea build opencl demos es necesario tener opencl ya sea para Nvidia o para intel  instalado. En el caso de chekear para nvidia configurar como sigue:
  • Nvidia Opencl_ICD_CFG colocar la ruta C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v4.0/lib/Win32
  • Nvidia Opencl_INCLUDES C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v4.0/include/CL
  • libraries C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\lib\Win32\Opencl.lib.
  • Para intel hacer algo parecido pero con el sdk de Intel.


Pestaña USE
Si se quiere se puede chekear  Use_custom_Vector_Math, esto no es indispensable pero si se checkea estar seguro que se escoge la ruta: C:/Bulletcodeblocks/bullet-2.79/src/vectormath/scalar ya que sse genera errores en la compilación. esta ruta puede ser cambiada en la pestaña Ungrouped entries.
¿Utilizar o no utilizar doble precisión?
Yo creo que los computadores de nuestro tiempo ya son lo suficientemente adelantados como para utilizar doublés pero si se quiere crear un juego o aplicación para un teléfono u otro dispositivo  es necesario utilizar floats.
Finalmente Chekear use glut y graphical_Benchmark.
Por ultimo presionar Configure y si ya no hay nada en rojo podemos proceder a dar en Generate.
A continuación las imágenes para mayor comprensión:



5. Construyendo el proyecto
  •  Ahora ir a la carpeta en mi caso C:\Bulletcodeblocks\ y abrir el archivo .cbp. se abrirá codeblocks con el proyecto.
  • Si le damos en build nos compilara el proyecto pero si aparece nada para compilar entonces debemos configurar el compilador. El problema se debe a que muchas veces nosotros tenemos mingw32-g++.exe  en codeblocks y   g++.exe en las opciones de CMake. No cambiar la opciones de CMake, cambiar las opciones de Codeblocks y poner g++.exe en vez de mingw32-g++.exe  y asi con todos los demás para que la configuración de Codeblocks coincida con la de CMake.
  • Le damos build y listo. No debe aparecer ningún error si se elimino la carpeta de Glut de bullet.
  • Puede haber un error si se configuro con Use_custom _math _vector en cmake. Cambiar la linea 8 de C:\Bulletcodeblocks\bullet\src\vectormath\vmInclude.h por: #include "scalar/vectormath_aos.h".
  • Si le dimos que compile los demos de opencl estos no apareceran compilados debido a que no encontraron la libreria glew32.lib o glew34.lib esto se debe a que eliminamos la carpeta glut. Pero el haber eliminado la carpeta no esta mal ya que de igual manera al enlazar con glew32.lib nos genera errores.
  • Para solucionar el problema debemos enlazar con glew32.dll para esto debemos
  • abrir el archivo C:\Bulletcodeblocks\Demos\ParticlesOpenCL\NVidia\CMakeFiles\AppParticlesOCL_Nv.dir\link.txt
  • Poner C:\Bulletcodeblocks\bullet-2.79\glew32.dll después de ..\lib\libLinearMath.a y eliminar la ruta anterior que se enlazaba a la carpeta glut\glew32.lib.
  • Por ultimo construir en codeblocks unicamente para appParticlesOCL_Nv hay que hacer esto con cada demo que no se construyo, seguramente porque utilizan glew. Ojo se puede construir cada demo no es nesesario darle bulild a todo el proyecto.

6. Probando bullet
Copiar el ejemplo de getting started de la wiki de la pagina web de bullet.
en un nuevo proyecto bullet es necesario poner la definición  en la pestaña compiler settings -> #defines poner BT_USE_DOUBLE_PRECISION si se construyeron las librerías para que funcionen con doble precisión. Si todo funciona correcto ya podemos trabajar con bullet.
No olvidar enlazar las librerías creadas, pero tomar atención al orden sin no no enlazara bien el programa.

  • libBulletWorldImporter.a (opcional)
  • libBulletFileLoader.a (opcional)
  • libBulletMultiThreaded.a (opcional)
  • libBulletSoftBody.a (opcional)
  • libBulletDynamics.a
  • libBulletCollision.a
  • libLinearMath.a
el orden de enlazar es importante por ejemplo si enlazan bulletFileLoader en la parte superior bulletWorldImporter no funcionara debido a que necesita de bulletFileLoader.



Y listo a programar con física!