Вопросы по использованию OpenGL в Lazarus ...

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вопросы по использованию OpenGL в Lazarus ...

Сообщение Andreich » 02.11.2008 17:45:19

Хотелось бы обратиться к форумчанам со следующим вопросом:
Наверное многие пробовали работать с библиотекой OpenGL средствами FPC или Lazarus, - быть может кто-то использовал режим полноэкранного сглаживания (MULTISAMPLE), если да, то как?

P.S. И еще, бы может кто-то работал с расширениями OpenGL ,.. как их задействовать?
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение FedeX » 02.11.2008 19:19:12

1. http://pmg.org.ru/nehe/nehe46.htm
а вообще в Google много есть по теме
2. модуль GLext тебе в помощь. Чтобы проверить например наличие расширения GL_ARB_texture_compression и загрузить его просто вызываеш Load_GL_ARB_texture_compression и проверяеш результат - если true, то можеш использовать функции расширения (они уже будут загружены)
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение Andreich » 02.11.2008 20:25:24

FedeX писал(а):1. http://pmg.org.ru/nehe/nehe46.htm

Я уже перечитал эту статью в обоих направлениях (причем много раз)... но задействовать сглаживание в Lazarus пока так и не получилось! :(
Работаю под Linux. После инициализации вызываю функцию Load_GL_ARB_MULTISAMPLE, а для сглаживаемых объектов glEnable(GL_Multisample_ARB), но никакого результата не наблюдается!
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение NXP » 02.11.2008 21:13:15

Andreich писал(а):Работаю под Linux.

А у вас не Radeon? Вдруг дрова глючал :D
Andreich писал(а):Load_GL_ARB_MULTISAMPLE

Andreich писал(а):glEnable(GL_Multisample_ARB)

проверьте, описаны ли эти методы в источнике (файл gl??.pas), вдруг она Load_GL_ARB_MULTISAMPLE = nil и загружается ли она.

ps Проходил мимо...
Аватара пользователя
NXP
постоялец
 
Сообщения: 187
Зарегистрирован: 02.01.2008 16:11:56
Откуда: Воронеж

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение Andreich » 02.11.2008 21:20:15

NXP писал(а):А у вас не Radeon?

Vendor: Tungsten Graphics, Inc.
Renderer: Mesa DRI Intel(R) 945GM 20061017 x86/MMX/SSE2
Version: 1.3 Mesa 7.0.3-rc2

Добавлено спустя 2 минуты 24 секунды:
NXP писал(а):проверьте, описаны ли эти методы в источнике (файл gl??.pas), вдруг она Load_GL_ARB_MULTISAMPLE = nil

Проверил, все в порядке... описание присутствует!

Добавлено спустя 3 часа 10 минут 5 секунд:
Думаю, стоит привести исходный код примера, который (если я все правильно понимаю) должен работать со сглаживанием. Из текста программы выбросил все лишнее, просто рисуется сфера в режиме wire.

Код: Выделить всё
program multisampling;



{$mode objfpc}{$H+}



uses gl, glu, glut, glext;



const FSMode = '640x480:32@60';



procedure InitializeGL;

begin

  glClearColor(0.5, 0.5, 0.5, 0.5);

  glEnable(GL_DEPTH_TEST);

end;



procedure DrawGLScene; cdecl;

begin

  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  glEnable(GL_Multisample_ARB);

  glutWireSphere(40,15,15);

  glDisable(GL_Multisample_ARB);

  glutSwapBuffers;

end;



procedure ReSizeGLScene(Width, Height: Integer); cdecl;

begin

  if Height = 0 then

    Height := 1;

  glViewport(0, 0, Width, Height);

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity;

  gluPerspective(45, Width / Height, 0.1, 1000);

  glMatrixMode(GL_MODELVIEW);

  glLoadIdentity;

  gluLookAt(0, 200, 300, 0, 0, 0, 0, 1, 0);

end;



procedure GLKeyboard(Key: Byte; X, Y: Longint); cdecl;

begin

  if Key = 27 then

  begin

    glutLeaveGameMode;

    Halt(0);

  end;

end;



procedure glutInitPascal(ParseCmdLine: Boolean);

var

  Cmd: array of PChar;

  CmdCount, I: Integer;

begin

  if ParseCmdLine then

    CmdCount := ParamCount + 1

  else

    CmdCount := 1;

  SetLength(Cmd, CmdCount);

  for I := 0 to CmdCount - 1 do

    Cmd[I] := PChar(ParamStr(I));

  glutInit(@CmdCount, @Cmd);

end;



begin

  glutInitPascal(False);

  glutInitDisplayMode(GLUT_DOUBLE or GLUT_RGB or GLUT_DEPTH);

  glutGameModeString(FSMode);

  glutEnterGameMode;

  glutSetCursor(GLUT_CURSOR_NONE);

  InitializeGL;

  Load_GL_ARB_MULTISAMPLE;

 

  glutDisplayFunc(@DrawGLScene);

  glutReshapeFunc(@ReSizeGLScene);

  glutKeyboardFunc(@GLKeyboard);

  glutIdleFunc(@DrawGLScene);

  glutMainLoop;

end.


Первый раз пробую использовать gl-расширения, так что если какая глупость в коде - сразу приношу свои извинения.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение FedeX » 03.11.2008 01:13:23

Конечно не верно :wink:
Хоть я сам с полноэкранным сглаживанием никогда не имел дела, но с первого взгляда на статью и на твой код видно ошибку.
Вот урывок из статьи:
Наш процесс выглядит следующим образом:

· Создается обычное окно

· Собираем возможные значения форматов пикселей для последующего сглаживания (InitMultisample)

· Если сглаживание возможно, то уничтожаем окно и создаем его заново, с новым форматом пикселя.

· Для частей, которые мы хотим сгладить, просто вызываем функцию glEnable(GL_ARB_MULTISAMPLE).

А где в твоём коде сбор сведений о форматах пикселей и уничтожение временного окна? :wink:
К томуже я думал, что ты работаеш с OGL напрямую, а раз ты используеш ГЛУТ, то там должен быть встроенный механизм инициализации сглаживания.
[*проверил*]
да - так и есть, в ГЛУТ достаточно добавить флаг GLUT_MULTISAMPLE в glutInitDisplayMode. Только как управлять уровнем сглаживания непонятно. Видимо в ГЛУТ - никак :roll:
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение Andreich » 03.11.2008 02:23:28

FedeX писал(а):А где в твоём коде сбор сведений о форматах пикселей и уничтожение временного окна?

Вот то-то я и думаю... Хотя в примерах которые я брал за основу, про формат пикселя нет ни слова! Ладно, будем копать...

FedeX писал(а):в ГЛУТ достаточно добавить флаг GLUT_MULTISAMPLE в glutInitDisplayMode. Только как управлять уровнем сглаживания непонятно

И что, работает!? У меня после добавления как все было, так и осталось! :(

Добавлено спустя 3 минуты 39 секунд:
P.S. Если не сложно, киньте в меня каким-нибудь рабочим примером по OpenGL для FreePascal, в котором есть реализация настройки формата пикселя.
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение FedeX » 03.11.2008 12:22:00

>И что, работает!?
да, проверил на твоём примере (только в оконном режиме, а не "game mode" - там у меня даже сфера почем-то не появилась), работает. Хотя странно немного (как-то оно выглядит больше как размытие). Возможно у тебя и вправду видеокарта или дрова не поддерживают... А ещё кстати, чтоб ты зря время не терял скажу - в глут ты сам никак не можеш оперировать с форматами пикселей и процессом создания окна, так что ещё раз советую либо писать на чистом системном АПИ+OpenGL либо пользоваться ИМХО хоть немного более гибким SDL.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение Andreich » 03.11.2008 15:58:39

FedeX писал(а):как-то оно выглядит больше как размытие

У меня вообще не сглаживается. (может и правда с драйверами непорядки)

Поэтому еще вопрос... имеется код:
Код: Выделить всё
glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glutSolidSphere(60,20,20);
glDisable(GL_BLEND);
glDisable(GL_ALPHA_TEST);

Должна ли быть выводимая сфера прозрачной?

P.S. Возможно это уже оффтоп, но посмотрев по форуму, я нашел огромное количество тем по программированию графики и OpenGL средствами FreePascal и Lazarus! Отсюда, вполне уместное на мой взгляд предложение/пожелание к администраторам: почему бы не создать под это направление отдельную ветку на форуме?!
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение NXP » 03.11.2008 16:06:24

Andreich писал(а):почему бы не создать под это направление отдельную ветку на форуме?!

Поддерживаю. Было бы удобно 8)
Аватара пользователя
NXP
постоялец
 
Сообщения: 187
Зарегистрирован: 02.01.2008 16:11:56
Откуда: Воронеж

Re: Вопросы по использованию OpenGL в Lazarus ...

Сообщение FedeX » 03.11.2008 17:59:34

Должна ли быть выводимая сфера прозрачной?

вроде бы да, если отключена текстура и выставлен текущий цвет с прозрачностью (напр. glColor(1,1,1,0.5)- последнее число значение прозрачности)
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

Рейтинг@Mail.ru