Обучение OpenGL в Ubuntu

40

Я пытаюсь изучить OpenGL и улучшить свои навыки на С++, пройдя Nehe guide, но все примеры для Windows, и я сейчас в Linux. Я действительно не знаю, как заставить работу работать под Linux, а код на сайте, который был портирован для Linux, имеет больше кода в нем, который не объясняется (до сих пор я единственный, работа - это SDL: http://nehe.gamedev.net/data/lessons/linuxsdl/lesson01.tar.gz). Есть ли другой ресурс, который немного более специфичен для OpenGL под Linux?

  • 0
    Я признаю, что закрытие темы о переполнении стека становится немного нацистским, но я уверен, что у многих людей есть эта проблема; это было бы лучше подходит на GameDev StackExchange
Теги:
opengl

4 ответа

65
Лучший ответ

Первое, что нужно сделать, это установить библиотеки OpenGL. Я рекомендую:

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

Как только вы их установили, соединитесь с ними при компиляции:

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

В example.cpp включите библиотеки OpenGL, например:

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

Затем, чтобы включить более продвинутые опции opengl, такие как шейдеры, поместите это после вызова 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");

Это должно включить все функции OpenGL, а если это не так, то это должно сообщить вам о проблемах.

  • 0
    Есть ли способ получить функциональность OpenGL 4.5? или хотя бы 4.1?
  • 0
    fprintf(stdout, "%s\n", glGetString(GL_VERSION)); выводит 3.0 Mesa 17.3.0-devel хотя у меня есть OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.3.0-devel 4.5 OpenGL core profile version string: 4.5 (Core Profile) Mesa 17.3.0-devel
8

Я предполагаю, что именно процесс компиляции является самой большой разницей изначально. Вот полезный Makefile для компиляции простых приложений OpenGL на 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

Сохраните этот файл с именем Makefile и должен находиться в том же каталоге. Скомпилируйте, написав make из терминала или: сделайте из Vim.

Удачи.

3

небольшое обновление для make файла, потому что я нашел эти старые ответы от @Millthorn, и это не сработало: вам не нужно указывать путь include, поскольку он находится в стандартном lib https://stackoverflow.com/questions/2182790/where-are-the-opengl-libraries-get-stored-on-ubuntu-i-need-this-to-mention-in

минимальный make файл для компиляции открытого GL может выглядеть так:

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

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

1

Возможно, вы хотели бы использовать Qt для рисования окон и виджетов.

Здесь учебник, основанный на руководствах Nehe, чтобы показать вам, как создавать образы OpenGL с помощью Qt.

Чтобы узнать OpenGL, необходимо прочитать OpenGL Red Book. Там онлайн-версия. Он имеет очень хорошие объяснения и примеры.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню