web-dev-qa-db-fra.com

Apprendre OpenGL dans Ubuntu

J'essaie d'apprendre OpenGL et d'améliorer mes compétences en C++ en passant par les guides Nehe , mais tous les exemples sont pour Windows et je suis actuellement sous Linux. Je ne sais pas vraiment comment faire fonctionner les choses sous Linux, et le code sur le site qui a été porté pour Linux contient beaucoup plus de code qui n'est pas expliqué (jusqu'à présent, le seul auquel j'ai pu accéder le travail est l'exemple SDL : http://nehe.gamedev.net/data/lessons/linuxsdl/lesson01.tar.gz =). Existe-t-il une autre ressource un peu plus spécifique vers OpenGL sous Linux?

44
victor

La première chose à faire est d'installer les bibliothèques OpenGL. Je recommande:

 freeglut3 
 freeglut3-dev 
 libglew1.5 
 libglew1.5-dev 
 libglu1-mesa 
 libglu1-mesa-dev 
 libgl1-mesa-glx 
 libgl1-mesa-dev 

Une fois que vous les avez installés, liez-les lorsque vous compilez:

g++ -lglut -lGL -lGLU -lGLEW example.cpp -o example

Dans example.cpp, incluez les bibliothèques OpenGL comme ceci:

#include <GL/glew.h>
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glext.h>

Ensuite, pour activer les options opengl plus avancées comme les shaders, placez ceci après votre appel glutCreateWindow:

GLenum err = glewInit();
if (GLEW_OK != err)
{
    fprintf(stderr, "Error %s\n", glewGetErrorString(err));
    exit(1);
}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));

if (GLEW_ARB_vertex_program)
    fprintf(stdout, "Status: ARB vertex programs available.\n");

if (glewGetExtension("GL_ARB_fragment_program"))
    fprintf(stdout, "Status: ARB fragment programs available.\n");

if (glewIsSupported("GL_VERSION_1_4  GL_ARB_point_Sprite"))
    fprintf(stdout, "Status: ARB point sprites available.\n");

Cela devrait activer toutes les fonctionnalités d'OpenGL, et si ce n'est pas le cas, il devrait vous indiquer les problèmes.

67
Ned Bingham

Je suppose que c'est le processus de compilation qui est la plus grande différence au départ. Voici un utile Makefile pour compiler des applications OpenGL simples sur Ubuntu.

INCLUDE = -I/usr/X11R6/include/
LIBDIR  = -L/usr/X11R6/lib

FLAGS = -Wall
CC = g++                                  # change to gcc if using C
CFLAGS = $(FLAGS) $(INCLUDE)
LIBS =  -lglut -lGL -lGLU -lGLEW -lm

All: your_app                             # change your_app.

your_app: your_app.o
    $(CC) $(CFLAGS) -o $@ $(LIBDIR) $< $(LIBS) # The initial white space is a tab

Enregistrez-le dans un fichier appelé Makefile qui devrait être dans le même répertoire. Compiler en écrivant faire à partir du terminal ou: faire de Vim.

Bonne chance

9
Ben

une petite mise à jour pour le makefile car j'ai trouvé ces anciennes réponses de @Millthorn et cela n'a pas fonctionné: vous n'avez pas besoin de définir le chemin d'inclusion car il est en lib standard https://stackoverflow.com/a/2459788/1059828

un makefile minimal pour compiler open GL pourrait ressembler à ceci:

LDFLAGS=-lglut -lGL -lGLU -lGLEW -lm
all: your_app

http://surflab.cise.ufl.edu/wiki/Getting_Started_with_OpenGL_in_Ubunt

3
Karl Adler

Vous souhaitez peut-être utiliser Qt pour dessiner les fenêtres et les widgets.

Ici est un tutoriel basé sur les guides Nehe pour vous montrer comment créer des images OpenGL avec Qt.

Pour apprendre OpenGL, le OpenGL Red Book est une lecture incontournable. Il y a une version en ligne. Il a de très bonnes explications et exemples.

1
Gaston