Witam mam problem a mianowicie mam możliwość sterowania obiektem klawiszami lewo, prawo, góra dół

Mam jeszce problem a mianowicie jak zrobić przybliżanie i oddalenie do , od obiektu przy użyciu scroll myszy lub klawiatury.

Dodaje kod załącznik

unction WndProc(hWnd: HWND;                            // Handle okna
                 message: UINT;                         // Zpráva pro okno
                 wParam: WPARAM;                        // Doplňkové informace
                 lParam: LPARAM):                       // Doplňkové informace
                                  LRESULT; stdcall;
begin
  if message=WM_SYSCOMMAND then                         // Systémový příkaz
    begin
      case wParam of                                    // Typ systémového příkazu
        SC_SCREENSAVE,SC_MONITORPOWER:                  // Pokus o zapnutí šetřiče obrazovky, Pokus o přechod do úsporného režimu?
          begin
            result:=0;                                  // Zabrání obojímu
            exit;
          end;
      end;
    end;
  case message of                                       // Větvení podle příchozí zprávy
    WM_ACTIVATE:                                        // Změna aktivity okna
      begin
        if (Hiword(wParam)=0) then                      // Zkontroluje zda není minimalizované
          active:=true                                  // Program je aktivní
        else
          active:=false;                                // Program není aktivní
        Result:=0;                                      // Návrat do hlavního cyklu programu
      end;
    WM_CLOSE:                                           // Povel k ukončení programu
      Begin
        PostQuitMessage(0);                             // Pošle zprávu o ukončení
        result:=0                                       // Návrat do hlavního cyklu programu
      end;
    WM_KEYDOWN:                                         // Stisk klávesy
      begin
       xtrans:=3.0;
       ztrans:=-7.0;

       if wParam=VK_UP then  xrot := xrot + 1.0;
       if wParam=VK_DOWN then xrot:= xrot-1.0;

       if wParam=VK_LEFT then yrot:=yrot+1.0;
       if wParam=VK_RIGHT then yrot:=yrot-1.0;
                                // Oznámí to programu
       // keys[wParam] := TRUE;
        result:=0;                                      // Návrat do hlavního cyklu programu
      end;
    WM_KEYUP:                                           // Uvolnění klávesy
      begin
        keys[wParam] := FALSE;                            // Oznámí to programu
        result:=0;                                      // Návrat do hlavního cyklu programu
      end;
    WM_SIZe:                                            // Změna velikosti okna
      begin
        ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));     // LoWord=Šířka, HiWord=Výška
        result:=0;                                      // Návrat do hlavního cyklu programu
      end
    else
      // Předání ostatních zpráv systému
      begin
        Result := DefWindowProc(hWnd, message, wParam, lParam);
      end;
    end;
end;

procedure KillGLWindow;                                 // Zavírání okna
begin
  if FullScreen then                                    // Jsme ve fullscreenu?
    begin
      ChangeDisplaySettings(devmode(nil^),0);           // Přepnutí do systému
      showcursor(true);                                 // Zobrazí kurzor myši
    end;
  if h_rc<> 0 then                                      // Máme rendering kontext?
    begin
      if (not wglMakeCurrent(h_Dc,0)) then              // Jsme schopni oddělit kontexty?
        MessageBox(0,'Release of DC and RC failed.',' Shutdown Error',MB_OK or MB_ICONERROR);
      if (not wglDeleteContext(h_Rc)) then              // Jsme schopni smazat RC?
        begin
          MessageBox(0,'Release of Rendering Context failed.',' Shutdown Error',MB_OK or MB_ICONERROR);
          h_Rc:=0;                                      // Nastaví hRC na 0
        end;
    end;
  if (h_Dc=1) and (releaseDC(h_Wnd,h_Dc)<>0) then       // Jsme schopni uvolnit DC
    begin
      MessageBox(0,'Release of Device Context failed.',' Shutdown Error',MB_OK or MB_ICONERROR);
      h_Dc:=0;                                          // Nastaví hDC na 0
    end;
  if (h_Wnd<>0) and (not destroywindow(h_Wnd))then      // Jsme schopni odstranit okno?
    begin
      MessageBox(0,'Could not release hWnd.',' Shutdown Error',MB_OK or MB_ICONERROR);
      h_Wnd:=0;                                         // Nastaví hWnd na 0
    end;
  if (not UnregisterClass('OpenGL',hInstance)) then     // Jsme schopni odregistrovat třídu okna?
    begin
      MessageBox(0,'Could Not Unregister Class.','SHUTDOWN ERROR',MB_OK or MB_ICONINFORMATION);
    end;
end;

 function CreateGlWindow(title:Pchar; width,height,bits:integer;FullScreenflag:bool):boolean stdcall;
var
  Pixelformat: GLuint;            // Uklad formatu pixela
  wc:TWndclass;                   // Struktura Windows Class
  dwExStyle:dword;                // Rozmiar stylu okna
  dwStyle:dword;                  // Styl okna
  pfd: pixelformatdescriptor;     // NAstawienie formatu piksela
  dmScreenSettings: Devmode;
  h_Instance:hinst;
  WindowRect: TRect;
begin
  WindowRect.Left := 0;                               // Nastaví levý okraj na nulu
  WindowRect.Top := 0;                                // Nastaví horní okraj na nulu
  WindowRect.Right := width;                          // Nastaví pravý okraj na zadanou hodnotu
  WindowRect.Bottom := height;                        // Nastaví spodní okraj na zadanou hodnotu
  h_instance:=GetModuleHandle(nil);                   // Získá instanci okna
  FullScreen:=FullScreenflag;                         // Nastaví proměnnou fullscreen na správnou hodnotu
  with wc do
    begin
      style:=CS_HREDRAW or CS_VREDRAW or CS_OWNDC;    // Překreslení při změně velikosti a vlastní DC
      lpfnWndProc:[email protected];                          // Definuje proceduru okna
      cbClsExtra:=0;                                  // Žádná extra data
      cbWndExtra:=0;                                  // Žádná extra data
      hInstance:=h_Instance;                          // Instance
      hIcon:=LoadIcon(0,IDI_WINLOGO);                 // Standardní ikona
      hCursor:=LoadCursor(0,IDC_ARROW);               // Standardní kurzor myši
      hbrBackground:=0;                               // Pozadí není nutné
      lpszMenuName:=nil;                              // Nechceme menu
      lpszClassName:='OpenGl';                        // Jméno třídy okna
    end;
  if  RegisterClass(wc)=0 then                        // Registruje třídu okna
    begin
      MessageBox(0,'Failed To Register The Window Class.','Error',MB_OK or MB_ICONERROR);
      Result:=false;                                  // Při chybě vrátí false
      exit;
    end;
  if FullScreen then                                  // Budeme ve fullscreenu?
    begin
      ZeroMemory( @dmScreenSettings, sizeof(dmScreenSettings) );  // Vynulování paměti
      with dmScreensettings do
        begin
          dmSize := sizeof(dmScreenSettings);         // Velikost struktury Devmode
          dmPelsWidth  := width;                        // Šířka okna
            dmPelsHeight := height;                     // Výška okna
          dmBitsPerPel := bits;                       // Barevná hloubka
          dmFields     := DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT;
        end;
      // Pokusí se použít právě definované nastavení
      if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN))<>DISP_CHANGE_SUCCESSFUL THEN
        Begin
          // Nejde-li fullscreen, může uživatel spustit program v okně nebo ho opustit
          if MessageBox(0,'This FullScreen Mode Is Not Supported. Use Windowed Mode Instead?'
                                             ,'NeHe GL',MB_YESNO or MB_ICONEXCLAMATION)= IDYES then
                FullScreen:=false                     // Běh v okně
          else
            begin
              // Zobrazí uživateli zprávu, že program bude ukončen
              MessageBox(0,'Program Will Now Close.','Error',MB_OK or MB_ICONERROR);
              Result:=false;                          // Vrátí FALSE
              exit;
            end;
          end;
    end;
  if FullScreen then                                  // Jsme stále ve fullscreenu?
    begin
      dwExStyle:=WS_EX_APPWINDOW;                     // Rozšířený styl okna
      dwStyle:=WS_POPUP or WS_CLIPSIBLINGS or WS_CLIPCHILDREN; // Styl okna
      Showcursor(false);                              // Skryje kurzor
    end
  else
    begin
      dwExStyle:=WS_EX_APPWINDOW or WS_EX_WINDOWEDGE;   // Rozšířený styl okna
      dwStyle:=WS_OVERLAPPEDWINDOW or WS_CLIPSIBLINGS or WS_CLIPCHILDREN; // Styl okna
    end;
  AdjustWindowRectEx(WindowRect,dwStyle,false,dwExStyle); // Přizpůsobení velikosti okna
  // Vytvoření okna
  H_wnd:=CreateWindowEx(dwExStyle,                    // Rozšířený styl
                               'OpenGl',              // Jméno třídy
                               Title,                 // Titulek
                               dwStyle,               // Definovaný styl
                               0,0,                   // Pozice
                               WindowRect.Right-WindowRect.Left,  // Výpočet šířky
                               WindowRect.Bottom-WindowRect.Top,  // Výpočet výšky
                               0,                     // Žádné rodičovské okno
                               0,                     // Bez menu
                               hinstance,             // Instance
                               nil);                  // Nepředat nic do WM_CREATE
  if h_Wnd=0 then                                     // Pokud se okno nepodařilo vytvořit
    begin
      KillGlWindow();                                 // Zruší okno
      MessageBox(0,'Window creation error.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;                                  // Vrátí chybu
      exit;
    end;
  with pfd do                                         // Oznámíme Windows jak chceme vše nastavit
    begin
      nSize:= SizeOf( PIXELFORMATDESCRIPTOR );        // Rozmiar struktury
      nVersion:= 1;                                   // Znaczniki wlasciwosci buffora pikseli
      dwFlags:= PFD_DRAW_TO_WINDOW                    // Podpora okna
        or PFD_SUPPORT_OPENGL                         // Podpora OpenGL
        or PFD_DOUBLEBUFFER;                          // Podpora Double Bufferingu
      iPixelType:= PFD_TYPE_RGBA;                     // Typy danych piksela
      cColorBits:= bits;                              // Liczba bitow piksela
      cRedBits:= 0;                                   // Liczba bitów koloru czerwonego oraz przesunięcie bitów koloru czerwonego
      cRedShift:= 0;                                  //
      cGreenBits:= 0;
      cBlueBits:= 0;
      cBlueShift:= 0;
      cAlphaBits:= 0;                                 // liczba bitów bufora akumulacji
      cAlphaShift:= 0;                                // Ignorován Shift bit
      cAccumBits:= 0;                                 // liczba bitów akumulacji czerni
      cAccumRedBits:= 0;
      cAccumGreenBits:= 0;
      cAccumBlueBits:= 0;
      cAccumAlphaBits:= 0;
      cDepthBits:= 16;                                // liczba bitów bufora głębi
      cStencilBits:= 0;                               // liczba bitów bufora powielania
      cAuxBuffers:= 0;                                // liczba buforów pomocniczych
      iLayerType:= PFD_MAIN_PLANE;                    // nie jest już wykorzystywany
      bReserved:= 0;                                  // liczba podkładanych i nakładanych jednostek
      dwLayerMask:= 0;                                // nie jest już wykorzystywany
      dwVisibleMask:= 0;
      dwDamageMask:= 0;
    end;
  h_Dc := GetDC(h_Wnd);                               // Zkusí připojit kontext zařízení
  if h_Dc=0 then                                      // Podařilo se připojit kontext zařízení?
    begin
      KillGLWindow();                                 // Zavře okno
      MessageBox(0,'Cant''t create a GL device context.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;                                  // Ukončí program
      exit;
    end;
  PixelFormat := ChoosePixelFormat(h_Dc, @pfd);       // przyporządkowanie  wartosci całkowitej indeksu dostępnego formatu pikseli
  if (PixelFormat=0) then
    begin
      KillGLWindow();                                 //  sprawdzić wartość przypisania
      MessageBox(0,'Cant''t Find A Suitable PixelFormat.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;
      exit;
    end;
  if (not SetPixelFormat(h_Dc,PixelFormat,@pfd)) then  // Podařilo se nastavit Pixel Format?
    begin
      KillGLWindow();
      MessageBox(0,'Cant''t set PixelFormat.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;                                  // Ukončí program
      exit;
    end;
  h_Rc := wglCreateContext(h_Dc);                     // Podařilo se vytvořit Rendering Context?
  if (h_Rc=0) then
    begin
      KillGLWindow();                                 // Zavře okno
      MessageBox(0,'Cant''t create a GL rendering context.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;                                  // Ukončí program
      exit;
    end;
  if (not wglMakeCurrent(h_Dc, h_Rc)) then            // Podařilo se aktivovat Rendering Context?
    begin
      KillGLWindow();                                 // Zavře okno
      MessageBox(0,'Cant''t activate the GL rendering context.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;                                  // Ukončí program
      exit;
    end;
  ShowWindow(h_Wnd,SW_SHOW);                          // Zobrazení okna
  SetForegroundWindow(h_Wnd);                         // Do popředí
  SetFOcus(h_Wnd);                                    // Zaměří fokus
  ReSizeGLScene(width,height);                        // Nastavení perspektivy OpenGL scény
  if (not InitGl()) then                              // Inicializace okna
    begin
      KillGLWindow();                                 // Zavře okno
      MessageBox(0,'initialization failed.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;                                  // Ukončí program
      exit;
    end;
  Result:=true;                                       // Vše proběhlo v pořádku
end;

function WinMain(hInstance: HINST;                    // Instance
         hPrevInstance: HINST;                            // Předchozí instance
         lpCmdLine: PChar;                                // Parametry příkazové řádky
         nCmdShow: integer):                              // Stav zobrazení okna
                        integer; stdcall;
var
  msg: TMsg;                                          // Struktura zpráv systému
  done: Bool;                                         // Proměnná pro ukončení programu

begin
  done:=false;
  // Dotaz na uživatele pro fullscreen/okno
  if MessageBox(0,'Would You Like To Run In FullScreen Mode?','Start FullScreen',
                             MB_YESNO or MB_ICONQUESTION)=IDNO then
    FullScreen:=false                                 // Běh v okně
  else
    FullScreen:=true;                                 // Fullscreen
  if not CreateGLWindow('NeHe''s OpenGL Framework',640,480,16,FullScreen) then // Vytvoření OpenGL okna
    begin
      Result := 0;                                    // Konec programu při chybě
      exit;
    end;
  while not done do                                   // Hlavní cyklus programu
    begin
      if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then  // Přišla zpráva?
        begin
          if msg.message=WM_QUIT then                 // Obdrželi jsme zprávu pro ukončení?
            done:=true                                // Konec programu
          else
            begin
              TranslateMessage(msg);                    // Přeloží zprávu
              DispatchMessage(msg);                     // Odešle zprávu
            end;
        end
      else      // Pokud nedošla žádná zpráva
        begin
          // Je program aktivní, ale nelze kreslit? Byl stisknut ESC?
          if (active and not(DrawGLScene()) or keys[VK_ESCAPE]) then
            done:=true                                // Ukončíme program
          else                                        // Překreslení scény
            SwapBuffers(h_Dc);                        // Prohození bufferů (Double Buffering)
          if keys[VK_F1] then                         // Byla stisknuta klávesa F1?
            begin
            Keys[VK_F1] := false;                     // Označ ji jako nestisknutou
            KillGLWindow();                           // Zruší okno
            FullScreen := not FullScreen;             // Negace fullscreen
            // Znovuvytvoření okna
            if not CreateGLWindow('NeHe''s OpenGL Framework',640,480,16,fullscreen) then
              Result := 0;                            // Konec programu pokud nebylo vytvořeno
            end;
        end;
    end;                                              // Konec smyčky while
  killGLwindow();                                     // Zavře okno
  result:=msg.wParam;                                 // Ukončení programu
end;

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