Compilar C/C++ con OpenGL + cmake

OpenglContinuando con la automatización del proceso de compilado con cmake y C++. Para seguir esta guía tienes que leer dos entradas anteriores que son necesarias para que puedas entender el tema del cual escribiré este día y mencionadas entradas las dejo en estos 2 links

Cuando los hayas leído y practicado puedes continuar con la presente guía, la cual describiré el proceso para compilar programas en C++ usando la librería OpenGL y GLUT.

Como pudiste observar en la entrada donde inicio explicando el proceso de compilado con cmake, se crea un archivo de nombre CMakeLists.txt, en este archivo agregaremos las lineas necesarias para poder compilar usando las librerías OpenGL y GLUT. EL proceso es muy sencillo la mayor parte del trabajo se tiene que realizar en el archivo CMakeList.txt el cual detallo los pasos a continuación.

Paso1: Creando estructura de directorios, lo primero que debes hacer es crear el directorio en el cual trabajaras tus script, para este caso le llamaremos opengl

mkdir /home/$USER/opengl

Con el directorio opengl creado procede a crear la carpeta donde se crearan los archivos necesarios para la compilación del proyecto, el ya conocido por todos la carpeta build/

mkdir /home/$USER/opengl/build

Listo ya tenemos el esquema de directorios procedemos al siguiente paso.

Paso 2: Preparando el archivo CMakeLists.txt, procede a crear el mencionado archivo en la carpeta opengl/ 

nano CMakeLists.txt

Inserta las siguientes lineas y guarda

cmake_minimum_required(VERSION 2.8) #Versión mínima de cmake 
# Project Name
PROJECT(Hello_OPenGL)

#########################################################
# INCLUYENDO LIBRERIA GLUT
#########################################################
find_package(GLUT REQUIRED) #buscar la libreria GlUT
include_directories(${GLUT_INCLUDE_DIRS}) # incluir los directorios 
link_directories(${GLUT_LIBRARY_DIRS}) #Linkeo de directorios 
add_definitions(${GLUT_DEFINITIONS}) #Agregar las definiciones 
#########################################################
# INCLUYENDO LIBRERIA OPENGL
#########################################################
find_package(OpenGL REQUIRED)
include_directories(${OpenGL_INCLUDE_DIRS})
link_directories(${OpenGL_LIBRARY_DIRS})
add_definitions(${OpenGL_DEFINITIONS})
#########################################################
# Incluyendo archivos 
#########################################################
add_executable(hello main.cpp) # Agregando nombre del script y compilado

########################################################
# Linkeo de librerías 
#########################################################
# creación del ejecutable "hello"
 target_link_libraries(hello ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} )

Paso 3: Crear el script main.cpp a compilar

#include <GL/gl.h>
#include <GL/glut.h>
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPointSize(60);
    glBegin(GL_POINTS);
    glVertex3f(0.5f,0.5f,0.0f);
    glVertex3f(-0.5f,-0.5f,0.0f);
    glVertex3f(0.7f,0.7f,0.0f);
    glVertex3f(-0.7f,-0.7f,0.0f);
    glEnd();
    glFlush ();

}
void init (void)
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize (250, 250);
    glutInitWindowPosition (100, 100);
    glutCreateWindow ("Ejemplo Puntos");
    init ();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

Paso 4: Construir el ejecutable en el directorio build/

cmake ..

Si todo ha salido bien tendrás una salida como la siguiente, de lo contrario tienes que leer sobre el problema.

-- The C compiler identification is GNU 5.3.1
-- The CXX compiler identification is GNU 5.3.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found GLUT: /usr/lib/x86_64-linux-gnu/libglut.so  
-- Found OpenGL: /usr/lib/x86_64-linux-gnu/libGL.so  
-- Configuring done
-- Generating done

Puedes observar que se cargaron las 2 librerías OpenGL y GLUT, lo cual esta listo para compilar.

Paso 5: Compilar

make

Obtendrás una salida como la siguiente

Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello

Paso 6: En el directorio build/ ejecuta el programa

./hello

El resultado final seria como el que se muestra en la siguiente imagen, el cual dibuja 2 puntos alineados con un tamaño pre definido.

puntos

Eso es todo por este día, sigue practicando hasta dominar el arte… hasta la próxima.

Comparte este contenido!.Tweet about this on TwitterShare on Google+Share on FacebookEmail this to someone

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *