FreePascal and OGL

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

Сообщение Sniper » 07.04.2006 20:14:11

давай мыло, зашлю glAux
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение SovNarKom » 07.04.2006 20:16:33

ANDREY.EXE
Я надеюсь что ты не одно из тупых детей, пробравшихся с ГДР, поэтому советую тебе не язвить, твои вопросы решаются путём 15 минутного гугления или на крайняк яндексения... Задавай их, пожалуйста, на специализированных форумах...
Да, и если не затруднит, оформь пожалусто тот исходник свой тегами [code][/code]

Romtek
Полезное дело делаешь. Для быстрых в разработке проектов, редакторов всяких... - глут весьма полезен. Статьи доступно написаны.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение ANDREY.EXE » 07.04.2006 20:49:18

andreyexe@rambler.ru Здеся моё мыло,а на счёт гугления сам попробуй погугли я нагуглелся там ничё нету.
Romtek
Есть один глюк научи свои программы корректно закрыватся а то чёта каждый раз после запуска преходится диспетчером пользоватся.
Код: Выделить всё
Так как ты не телепат вот ошибки и код.

553 / 9 pandem~1.pas
Error: Variable identifier expected
553 / 18 pandem~1.pas
Error: Incompatible types: got "Extended" expected "ShortInt"
554 / 9 pandem~1.pas
Fatal: Syntax error, ";" expected but "ELSE" found
554 / 9 pandem~1.pas
Fatal: Compilation aborted
Ну а это код для ясности.Компилилось на FP с использыванием Dev-Pas IDE
                   
{$mode delphi}{$H+}
program Sample;
uses
 Windows,
 Messages,
 Glu,
 GL;


const
 WND_TITLE = 'OpenGL';
 FPS_TIMER = 1;
 FPS_INTERVAL = 1000;
 Go = 3;


var
 h_Wnd  : HWND;
 h_DC   : HDC;
 h_RC   : HGLRC;
 keys : Array[0..255] of Boolean;
 FPSCount : Integer = 0;
 ElapsedTime : Integer;
 rtri: GLfloat;
 rquad: GLfloat;
 //=====================FOG_SETUP==================================
  filter: gluint;
 fogmode: array [0..2] of gluint = (GL_EXP,GL_EXP2,GL_LINEAR);
 fogcolor: array [0..3] of GLfloat = (0.5,0.5,0.5,1.0);
 fogfilter:gluint = 1;
//===================================================================



procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;


function IntToStr(Num : Integer) : String;
begin
 Str(Num, result);
end;
function Clear3DWorld();
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
end;

//==========================OGL_DRAW===============================
//P2Dquads();-nicaaiea 2A ?aoa??ooaieuieea
//P2DTriangle();-nicaaiea 2A o?aoaieuieea
//P3DCube();-nicaaiea 3A eoaa
//P3Dpiramid();-nicaaiea 3A ie?aieau
//================================================================




//=============================END OGL DRAW========================
//============================OPENGL INIT==========================
procedure glInit();
begin

//============================FOG==================================
glClearColor(0.5,0.5,0.5,1.0); //Oaao ooiaia
glEnable(GL_FOG);                       // Aee??aao ooiai (GL_FOG)
glFogi(GL_FOG_MODE, fogMode[fogfilter]);// Auae?aai oei ooiaia
glFogfv(GL_FOG_COLOR, fogColor);        // Onoaiaaeeaaai oaao ooiaia
glFogf(GL_FOG_DENSITY, 0.1);          // Ianeieuei aonoui aoaao ooiai
glHint(GL_FOG_HINT, GL_DONT_CARE);      // Aniiiiaaoaeuiay onoaiiaea ooiaia
glFogf(GL_FOG_START, 1.0);             // Aeoaeia, n eioi?ie ia?eiaaony ooiai
glFogf(GL_FOG_END, 5.0);               // Aeoaeia, aaa ooiai caeai?eaaaony.
//===================================================================
glShadeModel(GL_SMOOTH);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

end;

procedure glResizeWnd(Width, Height : Integer);
begin
 if (Height = 0) then
   Height := 1;
 glViewport(0, 0, Width, Height);
 glMatrixMode(GL_PROJECTION);
glLoadIdentity();
 gluPerspective(45.0, Width/Height, 1.0, 100.0);
  //==========================Camera==================================
  gluLookAt(0,0,Go, 0,0,0, 0,1,0);
  //=================================================================
glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();

end;

//==================================WINODOW PROCEDURE======================
function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;
begin
 case (Msg) of
   WM_CREATE:
     begin
     end;
   WM_CLOSE:
     begin
       PostQuitMessage(0);
       Result := 0
     end;
   WM_KEYDOWN:
     begin
       keys[wParam] := True;
       Result := 0;
     end;
   WM_KEYUP:
     begin
       keys[wParam] := False;
       Result := 0;
     end;
   WM_SIZE:
     begin
       glResizeWnd(LOWORD(lParam),HIWORD(lParam));
       Result := 0;
     end;
   WM_TIMER :
     begin
       if wParam = FPS_TIMER then
       begin
         FPSCount :=Round(FPSCount * 1000/FPS_INTERVAL);
         SetWindowText(h_Wnd, PChar(WND_TITLE + '   [' + intToStr(FPSCount) + ' FPS]'));
         FPSCount := 0;
         Result := 0;
       end;
     end;
   else
     Result := DefWindowProc(hWnd, Msg, wParam, lParam);
 end;
end;

procedure glKillWnd(Fullscreen : Boolean);
begin
 if Fullscreen then
 begin
   ChangeDisplaySettings(devmode(nil^), 0);
   ShowCursor(True);
 end;
//==============================ERROR=======================================
 if (not wglMakeCurrent(h_DC, 0)) then
   MessageBox(0, 'Release of DC and RC failed!', 'Error', MB_OK or MB_ICONERROR);

 if (not wglDeleteContext(h_RC)) then
 begin
   MessageBox(0, 'Release of rendering context failed!', 'Error', MB_OK or MB_ICONERROR);
   h_RC := 0;
 end;

 if ((h_DC > 0) and (ReleaseDC(h_Wnd, h_DC) = 0)) then
 begin
   MessageBox(0, 'Release of device context failed!', 'Error', MB_OK or MB_ICONERROR);
   h_DC := 0;
 end;

 if ((h_Wnd <> 0) and (not DestroyWindow(h_Wnd))) then
 begin
   MessageBox(0, 'Unable to destroy window!', 'Error', MB_OK or MB_ICONERROR);
   h_Wnd := 0;
 end;

 if (not UnRegisterClass('OpenGL', hInstance)) then
 begin
   MessageBox(0, 'Unable to unregister window class!', 'Error', MB_OK or MB_ICONERROR);
  // hInstance := 0;
 end;
end;

//==============================CREATE WINDOW===========================
function glCreateWnd(Width, Height : Integer; Fullscreen : Boolean; PixelDepth : Integer) : Boolean;
var
 wndClass : TWndClass;
 dwStyle : DWORD;
 dwExStyle : DWORD;
 dmScreenSettings : DEVMODE;
 PixelFormat : GLuint;
 h_Instance : HINST;
 pfd : TPIXELFORMATDESCRIPTOR;
begin
 h_Instance := GetModuleHandle(nil);
 ZeroMemory(@wndClass, SizeOf(wndClass));

 with wndClass do
 begin
   style         := CS_HREDRAW or
                    CS_VREDRAW or
                    CS_OWNDC;
   lpfnWndProc   := @WndProc;
   hInstance     := h_Instance;
   hCursor       := LoadCursor(0, IDC_ARROW);
   lpszClassName := 'OpenGL';
 end;

 if (RegisterClass(wndClass) = 0) then
 begin
   MessageBox(0, 'Failed to register the window class!', 'Error', MB_OK or MB_ICONERROR);
   Result := False;
   Exit
 end;


 if Fullscreen then
 begin
   ZeroMemory(@dmScreenSettings, SizeOf(dmScreenSettings));
   with dmScreenSettings do begin
     dmSize       := SizeOf(dmScreenSettings);
     dmPelsWidth  := Width;
     dmPelsHeight := Height;
     dmBitsPerPel := PixelDepth;
     dmFields     := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL;
   end;


   if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN) = DISP_CHANGE_FAILED) then
   begin
     MessageBox(0, 'Unable to switch to fullscreen!', 'Error', MB_OK or MB_ICONERROR);
     Fullscreen := False;
   end;
 end;


 if (Fullscreen) then
 begin
   dwStyle := WS_POPUP or
              WS_CLIPCHILDREN
              or WS_CLIPSIBLINGS;
   dwExStyle := WS_EX_APPWINDOW;
   ShowCursor(False);
 end
 else
 begin
   dwStyle := WS_OVERLAPPEDWINDOW or
              WS_CLIPCHILDREN or
              WS_CLIPSIBLINGS;
   dwExStyle := WS_EX_APPWINDOW or
                WS_EX_WINDOWEDGE;
 end;


 h_Wnd := CreateWindowEx(dwExStyle,
                         'Opengl',
                         WND_TITLE,
                         dwStyle,
                         0, 0,
                         Width, Height,
                         0,
                         0,
                         h_Instance,
                         nil);
 if h_Wnd = 0 then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to create window!', 'Error', MB_OK or MB_ICONERROR);
   Result := False;
   Exit;
 end;


 h_DC := GetDC(h_Wnd);
 if (h_DC = 0) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to get a device context!', 'Error', MB_OK or MB_ICONERROR);
   Result := False;
   Exit;
 end;

//=======================PIXEL FORMAT================================//
 with pfd do
 begin
   nSize           := SizeOf(TPIXELFORMATDESCRIPTOR);
   nVersion        := 1;
   dwFlags         := PFD_DRAW_TO_WINDOW
                      or PFD_SUPPORT_OPENGL
                      or PFD_DOUBLEBUFFER;
   iPixelType      := PFD_TYPE_RGBA;
   cColorBits      := PixelDepth;
   cRedBits        := 0;
   cRedShift       := 0;
   cGreenBits      := 0;
   cGreenShift     := 0;
   cBlueBits       := 0;
   cBlueShift      := 0;
   cAlphaBits      := 0;
   cAlphaShift     := 0;
   cAccumBits      := 0;
   cAccumRedBits   := 0;
   cAccumGreenBits := 0;
   cAccumBlueBits  := 0;
   cAccumAlphaBits := 0;
   cDepthBits      := 32;
   cStencilBits    := 0;
   cAuxBuffers     := 0;
   iLayerType      := PFD_MAIN_PLANE;
   bReserved       := 0;
   dwLayerMask     := 0;
   dwVisibleMask   := 0;
   dwDamageMask    := 0;
 end;


 PixelFormat := ChoosePixelFormat(h_DC, @pfd);
 if (PixelFormat = 0) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to find a suitable pixel format', 'Error', MB_OK or MB_ICONERROR);
   Result := False;
   Exit;
 end;


 if (not SetPixelFormat(h_DC, PixelFormat, @pfd)) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to set the pixel format', 'Error', MB_OK or MB_ICONERROR);
   Result := False;
   Exit;
 end;

 h_RC := wglCreateContext(h_DC);
 if (h_RC = 0) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to create an OpenGL rendering context', 'Error', MB_OK or MB_ICONERROR);
   Result := False;
   Exit;
 end;


 if (not wglMakeCurrent(h_DC, h_RC)) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to activate OpenGL rendering context', 'Error', MB_OK or MB_ICONERROR);
   Result := False;
   Exit;
 end;


 SetTimer(h_Wnd, FPS_TIMER, FPS_INTERVAL, nil);
 ShowWindow(h_Wnd, SW_SHOW);
 SetForegroundWindow(h_Wnd);
 SetFocus(h_Wnd);


 glResizeWnd(Width, Height);
 glInit();

 Result := True;
end;



function WinMain(hInstance : HINST; hPrevInstance : HINST;
                lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
var
 msg : TMsg;
 finished : Boolean;
 DemoStart, LastTime : DWord;
begin
 finished := False;

//====================GRAPHICS SET MODE=========================
 if not glCreateWnd(1042,768,true,32) then
 begin
   Result := 0;
   Exit;
 end;
//==============================================================

 DemoStart := GetTickCount();


 while not finished do
 begin
   if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then
   begin
     if (msg.message = WM_QUIT) then
       finished := True
     else
     begin
    TranslateMessage(msg);
       DispatchMessage(msg);
     end;
   end
   else
   begin
     Inc(FPSCount);

     LastTime :=ElapsedTime;
     ElapsedTime :=GetTickCount() - DemoStart;
     ElapsedTime :=(LastTime + ElapsedTime) DIV 2;
//=================================Rendering====================================
//Ana ooieoee ?eniaaiey aie?iu i?ioiaeou ia?ao Clear3DWorld() e SwapBuffers(h_DC);

Clear3DWorld();
//------------------------------------------------------------------------
P3DCube();
P2DTriangle();
P2Dquads();
P3Dpiramid();
//-------------------------------------------------------------------------
SwapBuffers(h_DC);// Ia?aee??aiea aooa?ia (Aaieiay aooa?ecaoey)
//=========================================================================
//Это и есть клава
        if keys[VK_UP] then
       go := go + 1.0;
       else

       end;

     if (keys[VK_ESCAPE]) then
       finished := True
     else

   end;

end;
//А здесь клава кончается

 glKillWnd(FALSE);
 Result := msg.wParam;
end;


begin
 WinMain( hInstance, hPrevInst, CmdLine, CmdShow );
end.


ANDREY.EXE
новенький
 
Сообщения: 60
Зарегистрирован: 18.03.2006 22:06:35

Сообщение SovNarKom » 07.04.2006 21:21:52

ANDREY.EXE
Кто ищет тот....

А тег правильный такой [/code] а то привычки я вижу бейсиковские "code end"...
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение ANDREY.EXE » 07.04.2006 21:48:07

P3DCube();
P2DTriangle();
P2Dquads();
P3Dpiramid();
Я убрал функции рисования сами допишите.
SovNarKom
А привычки есть изучал когдато. :D
Sniper
Ну давай шли на E-mail
ANDREY.EXE
новенький
 
Сообщения: 60
Зарегистрирован: 18.03.2006 22:06:35

Сообщение SovNarKom » 08.04.2006 01:54:01

ANDREY.EXE
Ещё такая кнопка смешная есть... "редактировать", будь другом а? Поправь пожалуйста...

go := go + 1.0;
go - константа, объяви в варе как Single ну короче дробное.

Дальше куча просто синтактических ошибок... нет моих сил
Научись чтоли код форматировать нормально, а книжку купи... и лучше купи учебник для ВУЗА... Я не хочу тебя обидеть, но так нельзя как ты делать... Это не программирование а садомазахизм... Твоя проблема - незнание языка этого.
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение Romtek » 08.04.2006 15:32:42

<!--QuoteBegin-ANDREY.EXE+--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата (ANDREY.EXE)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Есть один глюк научи свои программы корректно закрыватся а то чёта каждый раз после запуска преходится диспетчером пользоватся.[/quote]Вот по этому поводу я и хочу обсудить проблему. Смотрите тему <a href='http://freepascal.ru/forum/index.php?showtopic=782' target='_blank'>Приложение с glut не удаляется из памяти</a>
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение Romtek » 08.04.2006 15:34:56

Кстати, предпочитаю избавлять программы от WinAPI, применяя библиотеку GLUT. В результате они получаются гораздо компактнее и понятнее, а таакже их легче изменять.
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение ANDREY.EXE » 08.04.2006 17:02:18

SovNarKom
Ещё такая кнопка смешная есть... "редактировать", будь другом а? Поправь пожалуйста...
Совершенно непойму о чём ты.
ANDREY.EXE
новенький
 
Сообщения: 60
Зарегистрирован: 18.03.2006 22:06:35

Сообщение ANDREY.EXE » 08.04.2006 17:21:32

SovNarKom
Дальше куча просто синтактических ошибок... нет моих сил
Научись чтоли код форматировать нормально, а книжку купи... и лучше купи учебник для ВУЗА... Я не хочу тебя обидеть, но так нельзя как ты делать... Это не программирование а садомазахизм... Твоя проблема - незнание языка этого.
Заметь я никогда и ниде неговорил что я спец я только начал изучать Паскаль.Но полностью с тобой согласен на счёт книги.
ANDREY.EXE
новенький
 
Сообщения: 60
Зарегистрирован: 18.03.2006 22:06:35

Сообщение ANDREY.EXE » 08.04.2006 17:30:36

SovNarKom
go := go + 1.0;
go - константа, объяви в варе как Single ну короче дробное.
А с этого места попрошу поподробней :D
ANDREY.EXE
новенький
 
Сообщения: 60
Зарегистрирован: 18.03.2006 22:06:35

Сообщение Sniper » 08.04.2006 22:08:21

ANDREY.EXE писал(а): SovNarKom
go := go + 1.0;
go - константа, объяви в варе как Single ну короче дробное.
А с этого места попрошу поподробней :D

И чё тут не ясного?

var
go: single=0;
Sniper
постоялец
 
Сообщения: 472
Зарегистрирован: 28.05.2005 13:02:42

Сообщение ANDREY.EXE » 08.04.2006 22:12:30

Sniper
И чё тут не ясного?
Как чё я ж ещё книгу некупил :D .Спасибо.
ANDREY.EXE
новенький
 
Сообщения: 60
Зарегистрирован: 18.03.2006 22:06:35

Сообщение ANDREY.EXE » 08.04.2006 23:11:55

Всё работает компилица толь камера нехочит двигаться.
Код: Выделить всё
if keys[VK_UP] then
       go := go + 0.1;
      if (keys[VK_ESCAPE]) then
      finished := True
else

   end;

end;
ANDREY.EXE
новенький
 
Сообщения: 60
Зарегистрирован: 18.03.2006 22:06:35

Сообщение ANDREY.EXE » 09.04.2006 13:11:15

Помогите!
ANDREY.EXE
новенький
 
Сообщения: 60
Зарегистрирован: 18.03.2006 22:06:35

Пред.След.

Вернуться в Графика

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

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

Рейтинг@Mail.ru