Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OpenGL API и double buffer [D5, D6, Win95/98, WinME]


Woolen ©   (2001-12-23 23:19:00) 

Нужно решить довольно простую задачу с анимацией в 3D. Решил использовать OpenGL. Попытался разобраться для скорости взял книгу Краснова, а он пишет, что на большинстве машин невозможно под OpenGL получить двойной буфер. Попробовал - нет дабл буфера! На другой машине - нет! Интересно, а разработчики кваки или 3D Studio Max тоже исходят при разработке из того, что на большистве машин все должно моргать и мерцать. Ведь не мерцает ни на чем! Значит есть способ! Подскажите, кто знает! Очень надо!


NetBreaker666   (2001-12-25 16:14:00) [1]

OpenGL для того и сделан, что если что-то не поддерживается видяхой, то будет выполнено програмно.
Если программа запущенна в оконном режиме, то в большинстве случаев Double Buffer реализуется программно.


Flex   (2001-12-24 14:12:00) [2]

туфта полнейшая!!!
function SetDCPixelFormat(hdc:HDC):boolean;
var pfd:TPixelFormatDescriptor; // данные формата пикселей
nPixelFormat:Integer;
Begin
SetDCPixelFormat:=false;
FillChar(pfd,SizeOf (pfd),0);
With pfd do begin
nSize := sizeof(pfd);
nVersion := 1;
dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
iPixelType:= PFD_TYPE_RGBA;
cColorBits:= 24;
cDepthBits:= 32;
iLayerType:= PFD_MAIN_PLANE;
end;
nPixelFormat:=ChoosePixelFormat(hdc,@pfd);
if nPixelFormat=0 then exit;
SetPixelFormat (hdc,nPixelFormat,@pfd);
SetDCPixelFormat:=true;
End;
...
function Draw_Scene(dc:hdc):boolean;
begin
Draw_Scene:=false;
glClear(GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT);
glPushMatrix;
Draw_Plan; // отрисовка карты
glPopMatrix;
glFinish; // не обязательно
SwapBuffers(DC);
Draw_Scene:=true;
end;
Сколько машин видел - везде работает двойной буфер, даже где самых плохие видеокарты.
Может на четверкая и тройках так?
А работать лучше с нуля - понимать больше будешь...


Владимир Васильев   (2001-12-24 13:06:00) [3]

Краснова я прочитал для ознакомления с предметом. Но работать как он советует - с нуля!!- просто невозможно. Если нужны результаты - то
GLScene : http://glscene.org/- бесплатно и с исходниками. Отличный форум по предмету.


Наверх

Титульная страница Поиск, карта сайта Написать письмо