Программирование CUDA/OpenGL

reboot

Ословед





OpenGL (Open Graphics Library — открытая графическая библиотека) — спецификация, определяющая независимый от языка программирования кросс-платформенный программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.
Включает более 250-ти функций для рисования сложных трёхмерных сцен из простых примитивов. Используется при создании видео-игр, САПР, виртуальной реальности, визуализации в научных исследованиях. На платформе Windows конкурирует с DirectX. (Википедия)

Тема предназначена для обмена опытом использования данной библиотеки.

Учебники и статьи:

Opengl графика в проектах Delphi.zip 4.72 Мб (Книга)
Opengl Суперкнига.rar 10.31 Мб (Книга)
Opengl Red book.rar 7.43 Мб (Книга)
OpenGL. Руководство по программированию.pdf 56.79 Мб (книга)

delphi+opengl.rar 91.78 Мб (сборник статей, исходников и т.п.)
opengl.zip 523.70 Кб (статьи)

Видео уроки (для Delphi):
OpenGL_1.swf 25.03 Мб
OpenGL_2.swf 13.53 Мб
-----------------------------
NVIDIA_SDK10_OpenGL_10.52.0808.1735.exe 68.98 Мб

Инструменты:
Borland C++ Builder 6 CD1.mdf 720.97 Мб
Borland C++ Builder 6 CD2.mdf 343.27 Мб
Borland-Delphi-7.iso 676.31 Мб
 

    Neo_S

    очки: 14
    Нет комментариев

Neo_S

Ословед
Моя подборка инфы по OpеnGL (+вообще много чего по геймдеву). В основном статьи собранные со всего инета.
Delphi+OpenGL.rar 91.83 Мб 48.[12-15]
 

    reboot

    очки: 2
    +10

    NeDima

    очки: 9
    Благодарю :)

reboot

Ословед
Кстати, подскажити кто нибудь как проще инициализировать OpenGL в полноэкранном режиме
 
А есть что почитать на эту тему?

ОпенГЛ АПИ, в общем-то. Если под АПИ прогать - хоть на сях, хоть на дельфе, хоть на асме - почти одно и то же получается. Разве что на асме проще работать со типами данных (т.к. их целых 3). Зато отслеживать больше...
ЗЫ: или не три... это откуда посмотреть... Тут и АЛУ и сопроцессора... но они одинаковые какие-то.
 
Кстати, подскажити кто нибудь как проще инициализировать OpenGL в полноэкранном режиме

Также, как и в оконном... Просто окно на весь экран растягиваешь+поверх окон (если надо). Ну и окно, само собой, не оверлаппед (просто визибл).
 

reboot

Ословед
Также, как и в оконном... Просто окно на весь экран растягиваешь+поверх окон (если надо). Ну и окно, само собой, не оверлаппед (просто визибл).
Чуток не то, этот вариант использует оконные функции, а полноэкранный режил работает напрямую с видиопамятью.
 
Чуток не то, этот вариант использует оконные функции, а полноэкранный режил работает напрямую с видиопамятью.

Можно ли в OpenGL получить прямой доступ к видеопамяти, как это делается в DirectX ?

Нет, OpenGL - клиент-серверная идеология; связь между клиентом и сервером осуществляется по потенциально медленному каналу связи (как пример - скорость шин PCI и AGP намного ниже, чем внутренних трактов графического процессора, и шины 3D-чип - локальная видеопамять).

Видеопамять находится на сервере, в роли которого может выступать как Ваша видеокарта, так и другой компьютер. В связи с этим функции вроде glReadPixels, glDrawPixels, glTexImage... и т.д. работают ужасно медленно, и, кроме этого, вызывают блокировку 3D-конвейера до завершения операции.

ЗЫ: про второй ОпенГЛ слышал мало что, может, там и сделали уже.
 

reboot

Ословед
Сам нашёл ответ на свой вопрос. Вот кусок статьи, где рассказывается как это сделать:
Режим fullscreen дает нам несколько преимуществ. Во первых, как правило, в этом режиме OpenGL работает пошустрее. Во вторых, мы можем выставить такой режим, какой сочтем более подходящим для наших задач (или выберет юзер). Ну и самое главное, ничто не будет отвлекать юзера от нашего супершедевра. ;)
Переключение осуществляется APIшной функцией ChangeDisplaySettings. Нужные нам параметры указываем в структуре DevMode. Вот пример кода:
Код на языке Delphi
function DoFullscreen: boolean;
var
dm: DevMode;
hr: HRESULT;
DC: HDC;
begin
//устанавливаем режим экрана (800x600x32bpp 75Hz)
fillchar(dm, sizeof(dm),0);

dm.dmSize := sizeof(DevMode);
dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY;
dm.dmPelsWidth := 800;
dm.dmPelsHeight := 600;
dm.dmBitsPerPel := 32;
dm.dmDisplayFrequency := 75;
hr := AltChangeDisplaySettings(@dm, CDS_FULLSCREEN);
{ проверяем удалось ли переключить}
Result := hr = DISP_CHANGE_SUCCESSFUL;
end;

Вернуть видеорежим к тому, что был установлен на десктопе (мы же не забудем этого сделать) можно так:
Код на языке Delphi
AltChangeDisplaySettings(nil, 0);
Это конечно не примое обращение к видио памяти, но полноэкранный режим...
 

Neo_S

Ословед
Кстати, подскажити кто нибудь как проще инициализировать OpenGL в полноэкранном режиме
Если интересно вот моя функция для изменения экранных режимов:

Код:
//Вспомогательная процедура
procedure Restore(Width,Height: integer);
var
  Style : DWORD;
begin
  if Wnd_Handle=0 then exit;
  glFinish;
  if Wnd_FullScreen then Style:=WND_FSSTYLE
  else Style:=WND_STYLE;
  SetWindowLong(Wnd_Handle, GWL_STYLE, Style or WS_VISIBLE);
  Wnd_Width:=Width;
  Wnd_Height:=Height;
  Wnd_SetPosition(Wnd_Left,Wnd_Top);
  ShowWindow(Wnd_Handle, SW_SHOW);
  glViewport(0, 0, Wnd_Width, Wnd_Height);
end;
 
//Собственно сама функция
 
function Wnd_SetResolution(FullScreen: boolean; Width,Height,ColorDepth,Frequency: integer): boolean;
var
  DevMode : TDeviceMode;
  b: integer;
begin
  Result:=false;
  if Wnd_Handle=0 then exit;
  if Fullscreen then begin
    FillChar(DevMode, SizeOf(DevMode), 0);
    with DevMode do begin // Устанавливаем параметры экрана
      dmSize := SizeOf(DevMode);
      dmPelsWidth:=Width; // Ширина экрана
      dmPelsHeight:=Height; // Высота экрана
      dmBitsPerPel:=ColorDepth; // Глубина цвета
      dmDisplayFrequency := Frequency; //Частота
      dmFields := DM_BITSPERPEL or DM_PELSWIDTH  or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
    end;
    b:=ChangeDisplaySettings(DevMode, CDS_TEST or CDS_FULLSCREEN);
    if b=DISP_CHANGE_SUCCESSFUL then begin
      ChangeDisplaySettings(DevMode, CDS_FULLSCREEN);
      Wnd_FullScreen:=true;
      Wnd_Width:=Width;
      Wnd_Height:=Height;
      ToLog('FullScreen mode: ON',7);
      Restore(Width,Height);
      Result:=true;
      exit;
    end
    else
      Case b of
        DISP_CHANGE_RESTART: ToLog('FullScreen Error: Необходима перезагрузка для вступления изменений в силу (Видеоржим: '+IntToStr(Width)+'x'+IntToStr(Height)+'x'+IntToStr(ColorDepth)+'@'+IntToStr(Frequency)+')',7);
        DISP_CHANGE_BADFLAGS:  ToLog('FullScreen Error: Передан неверный набор флагов (Видеоржим: '+IntToStr(Width)+'x'+IntToStr(Height)+'x'+IntToStr(ColorDepth)+'@'+IntToStr(Frequency)+')',7);
        DISP_CHANGE_BADPARAM:  ToLog('FullScreen Error: Неверные параметры (Видеоржим: '+IntToStr(Width)+'x'+IntToStr(Height)+'x'+IntToStr(ColorDepth)+'@'+IntToStr(Frequency)+')',7);
        DISP_CHANGE_FAILED:  ToLog('FullScreen Error: Драйвер видеоустройства не смог установить режим (Видеоржим: '+IntToStr(Width)+'x'+IntToStr(Height)+'x'+IntToStr(ColorDepth)+'@'+IntToStr(Frequency)+')',7);
        DISP_CHANGE_BADMODE:  ToLog('FullScreen Error: Видеорежим не поддерживается (Видеоржим: '+IntToStr(Width)+'x'+IntToStr(Height)+'x'+IntToStr(ColorDepth)+'@'+IntToStr(Frequency)+')',7);
        DISP_CHANGE_NOTUPDATED:  ToLog('FullScreen Error: Windows NT/2000: Ошибка записи в реестр (Видеоржим: '+IntToStr(Width)+'x'+IntToStr(Height)+'x'+IntToStr(ColorDepth)+'@'+IntToStr(Frequency)+')',7);
      end;
  end
  else begin
    if Wnd_FullScreen then begin
      ChangeDisplaySettings(_devicemodeA(nil^), CDS_FULLSCREEN);
      Wnd_FullScreen:=false;
    end;
    Wnd_Width:=Width;
    Wnd_Height:=Height;
    ToLog('FullScreen mode: OFF',7);
    Restore(Width,Height);
  end;
end;

Вещь атличная, давно у меня лежит...
Кстати архив часто обновляю и выкладываю в осла ;)

Чуток не то, этот вариант использует оконные функции, а полноэкранный режил работает напрямую с видиопамятью.
Немного непонимаю при чем тут оконный/полноэкранный режим, но можно работать с видеопамятью через VBO (загрузка в видеопамять и рендеринг вертексных, нормальных и фэйсовых данных) и изменять эти данные через шейдерные программы. Да и с загрузкой текстурных данных напрямую в видеопамять тож в опенГЛ проблем нету: юзаем glBindTexture, glTexImage2D и т.п.
 

KL9YnEr

Ословед
Моя подборка инфы по OpеnGL (+вообще много чего по геймдеву). В основном статьи собранные со всего инета.
Delphi+OpenGL.rar 91.83 Мб 48.[12-15]
Неос, блин, я вот распоковываю твой архив и на 88%, начинаются какието кривые ошибки типо не удалось найти путь итд итп, ето тока у одного мя так или у всех?, ответьте плиз, а то судя по названию папок там, мне очень много хотелось бы от туда почитать)))
 

Neo_S

Ословед
Неос, блин, я вот распоковываю твой архив и на 88%, начинаются какието кривые ошибки типо не удалось найти путь итд итп, ето тока у одного мя так или у всех?, ответьте плиз, а то судя по названию папок там, мне очень много хотелось бы от туда почитать)))
Перезапаковал. Проблема была в том, что у нескольких файлов были слишком большие имена.
Delphi+OpenGL.rar 91.78 Мб
 

    KL9YnEr

    очки: 5
    Спасмбки

reboot

Ословед
Неос, блин, я вот распоковываю твой архив и на 88%, начинаются какието кривые ошибки типо не удалось найти путь итд итп, ето тока у одного мя так или у всех?, ответьте плиз, а то судя по названию папок там, мне очень много хотелось бы от туда почитать)))
Есть такая маза =))

Neo_S, добавляю этот архив в шапку (Вещь действительно кул)
 

Алексей 85-й

Ословед
13 августа этого года фирмой 3Dlabs была анонсирована спецификация OpenGL версии 3.0, с чем всех и поздравляю!

Самая свежатинка:
Segal M., Akeley K. OpenGL 3.0 specification.pdf 3.00 MB

А также новая версия языка программирования шейдеров:
Kessenich J. The OpenGL Shading Language 1.3.pdf 700.83 KB

Новая версия библиотеки GLU:
Chin N. etc The OpenGL Graphic System Utility Library 1.3.pdf 323.12 KB

Выкачено из инета:
Хилл Ф. OpenGL. Программирование компьютерной графики.djvu 16.46 MB

Энджел Э. Интерактивная компьютерная графика. Вводный курс на базе OpenGL.djvu 8.30 MB


В этой теме много чего не выложено, что есть в осле.
 

    Neo_S

    очки: 13
    Спасибо за столь важную инфу

    reboot

    очки: 2
    +10

KL9YnEr

Ословед
Хотелось бы получить сайт или документик со списком всех OpenGLовских команд, при возможности с описанием, какая команда за что отвечает, по возможности на русском:D
Помогите кто чем может!
ЗЫ Загнул, да?:megalol::megalol::megalol:
 

gureedo

Самец :)
Хотелось бы получить сайт или документик со списком всех OpenGLовских команд, при возможности с описанием, какая команда за что отвечает, по возможности на русском:D
Помогите кто чем может!
ЗЫ Загнул, да?:megalol::megalol::megalol:

мечтай мечта,й такого мега мануала я не видел ((
сам бы хотел заиметь такой.
 
Сверху