Форум русскоязычного сообщества Ubuntu


Автор Тема: Программирование OpenGL, проблема  (Прочитано 3073 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн newx

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Программирование OpenGL, проблема
« : 30 Августа 2010, 13:59:49 »
Совсем недавно перешел на Ubuntu. Хочу прогрмаммировать OpenGL графику, но при компиляции всех примеров ругается, что не найдено нужных библиотек. Какие пакеты надо установить для нормального программирования на OpenGL в C++
Зарание огромное спасибо
« Последнее редактирование: 31 Августа 2010, 13:06:34 от Владимир Николаевич »

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #1 : 30 Августа 2010, 14:26:36 »
Будет лучше если ты ругань запостишь.

Скорей всего ругань на не найденные хедеры. В этом случае просто зайди на http://packages.ubuntu.com и воспользуйся формой поиска пакетов по содержимому. Ищи хедеры на отсутствие которых ругается компилятор и ставь соответствующие пакеты.

Предположительно тебе нужны следующие пакеты: mesa-common-dev, libglu1-mesa-dev, freeglut3-dev

Оффлайн -=Иван=-

  • Участник
  • *
  • Сообщений: 134
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #2 : 30 Августа 2010, 19:24:33 »
А че так резко под OpenGL раз новичок? Или уже есть твердые знания С++ ? А по поводу вопроса смотришь на что ругается и устанавливаешь недостоющие пакеты.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #3 : 31 Августа 2010, 07:04:07 »
а есть разница вызывать printf() или glBegin()?

Оффлайн newx

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #4 : 31 Августа 2010, 09:59:56 »
Короче, вот код программы:

#include <GL/glut.h>
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
 
    glBegin(GL_POINTS);
        glColor3f(0.0, 0.0, 0.0);
        glVertex2f(0.25, 0.25);
    glEnd;
    glFlush();
}
 
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
 
    glutInitWindowSize(240, 240);
    glutInitWindowPosition(100, 100);
 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutCreateWindow("Test");
 
    glClearColor(0, 0, 0, 0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

Вот так я компилю и запускаю:
root@newx-pc:/home/newx/temp# g++ first.cpp -o first -lGL -lGLU -lglut
root@newx-pc:/home/newx/temp# ls
first  first.cpp
root@newx-pc:/home/newx/temp# ./first



Внизу экрана появляется как бы свернутое окно Test. При разворачивании текущее окно теряет фокус, но окна Test так и не появляется (как будто оно в инвизе  :-[) Помогите

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #5 : 31 Августа 2010, 13:05:03 »
Такое ощущение, что проблема в отсутствии колбека для изменения размера окна задаваемого функцией glutResizeFunc. Я сейчас на работе, поэкспериментировать с твоим кодом не могу.
« Последнее редактирование: 31 Августа 2010, 13:32:35 от VestniK »

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #6 : 15 Сентября 2010, 19:08:27 »
Думаю нужно так:

(Нажмите, чтобы показать/скрыть)

Думаю, что уже поздно но все равно....

Пользователь решил продолжить мысль 16 Сентября 2010, 10:55:59:
Решил вот после этой темы попрограммировать. Вобщем вызываю glGenLists(1), которая всегда возвращает 0. (что за фигня?)
Снес атишные дрова, сново поробовал прогу запустить, так вот внутри glGenLists происходит Segmentation fault, блин дрова получаются кривые, что открытые что атишные. Видяха встроеная hd3300
« Последнее редактирование: 16 Сентября 2010, 10:55:59 от __v1tos »
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #7 : 16 Сентября 2010, 12:34:45 »
@__v1tos создай новую тему и опиши свою проблему желательно с минимальным нерабочим примером который можно скомпилить и запустить.

Оффлайн __v1tos

  • Участник
  • *
  • Сообщений: 105
  • Ubuntuu 10.10 x86-64
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #8 : 16 Сентября 2010, 17:09:49 »
Да не, я разобрался в чем дело. А дело в том, что я вызываю openGl-ные функции до того, как глют создаст окно (в том числе я вызывал glGenLists, который в некоторых случаях и сваливался). Я ж вроде знал, что функции опенЖл низя использовать до создания или захвата окна, но вот проглядел тут. А вот странно что другие функции не вызывают фатальных ошибок, а только glGenLists.
AMD Phenom II 945, GA-MA790GPT-UD3H (HD 3300), 5 GiB ram

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #9 : 16 Сентября 2010, 17:28:13 »
А ничего странного нет. Такие вещи просто зависят от реализации. В OpenGL вряд ли кто-то будет делать ненужных проверок на то создан ли контекст или нет, если вызов функции вне контекста не приведёт к самоуничтожению вселенной. Проверки требую времени, а его лучше экономить оптимизируя производительность OpenGL по максимуму. Поэтому если читать доки по OpenGL можно заметить, что там часто встречается фраза поведение этой функции при таких-то условиях неопределено. Так что если доктор сказал это делать в init callback, это делать в resize callback, а это в display callback то так и делаем не вынося код для экономии в main.

Оффлайн blue_jet

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #10 : 21 Сентября 2010, 18:24:07 »
Доброго времени суток всем. Помогите мне ктонибуть запустить мою первую прогу для опенжл) я поставил eclipse ide, установил g++ и библиотеки с gl.h и glut.h(то что посоветовал гугл) и пример ни компилится ни с консоли мейком ни в еклипсе. вот что пишет

dany@dany-laptop:~/Cube$ make
g++ -Wall -o cube main.cpp imageloader.cpp -lglut
imageloader.cpp: In function ‘Image* loadBMP(const char*)’:
imageloader.cpp:141: warning: suggest parentheses around ‘&&’ within ‘||’
/tmp/ccF5XZRj.o: In function `handleResize(int, int)':
main.cpp:(.text+0x183): undefined reference to `gluPerspective'
collect2: ld returned 1 exit status
make: *** [cube] Помилка 1



а вот при запуске другого примера
dany@dany-laptop:~/workspace/basicshapes$ make
g++ -Wall -o basicshapes main.cpp -lglut
/tmp/ccZ1ccPw.o: In function `handleResize(int, int)':
main.cpp:(.text+0x96): undefined reference to `gluPerspective'
collect2: ld returned 1 exit status
make: *** [basicshapes] Помилка 1

« Последнее редактирование: 21 Сентября 2010, 18:28:02 от blue_jet »

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #11 : 21 Сентября 2010, 18:32:00 »
Цитировать
dany@dany-laptop:~/Cube$ make
g++ -Wall -o cube main.cpp imageloader.cpp -lglut
Ну с glut'ом ты линкуешься, а где "-lGL -lGLU" Makefile генерился эклипсом или сам писал? Если второе, то запости его. Если первое, то разберись как эклипс заставить добавить эти библиотеки.

Оффлайн blue_jet

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #12 : 21 Сентября 2010, 18:36:17 »
я скачал готовые примеры и там был makefile, eclipse просто пишет "binary not found"   а что такое -lGL -lGLU ???

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #13 : 21 Сентября 2010, 18:51:00 »
Это флаги компилятора которых тебе не хватает. Они говорят, что твоё приложение использует библиотеки GL и GLU, у тебя при компиляции указанно, что ты используешь только glut собственно поэтому линкер и не межет найти функцию gluPerspective, о чём он радостно и сообщает. Попробуй вместо просто make запустить
make LDFLAGS="-lGL -lGLU -lglut"
Если поможет то попробуй прописать это в Makefile примеров которые ты скачал. Если это не помогло, то Makefile написан через задний проход выкинь его и возьми мой отсюда: https://forum.ubuntu.ru/index.php?topic=100976.0

Оффлайн blue_jet

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Программирование OpenGL, проблема
« Ответ #14 : 21 Сентября 2010, 23:50:35 »
оу, спасибо большое за твой труд. завтра уже больше времени уделю, вот мой мейкфайл,
CC = g++
CFLAGS = -Wall
PROG = cube

SRCS = main.cpp imageloader.cpp

ifeq ($(shell uname),Darwin)
LIBS = -framework OpenGL -framework GLUT
else
LIBS = -lglut
endif

all: $(PROG)

$(PROG): $(SRCS)
$(CC) $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS)

clean:
rm -f $(PROG)

хотя пример вот отсюда http://www.videotutorialsrock.com/ и у него на видео все вроде как заработало :-\

 

Страница сгенерирована за 0.044 секунд. Запросов: 25.