Важная информация
Показано с 1 по 5 из 5

Тема: Lazarus и OpenGL

  1. #1 Lazarus и OpenGL 
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    283
    Сказал(а) спасибо
    160
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    Установка пакета получения контекста устройства в Lazarus

    Как и в любой среде программирования, для того чтобы начать работать с графикой, необходимо получить контекст устройства и связать его с контекстом воспроизведения библиотеки OpenGL. В Lazarus этот процесс осуществляется довольно просто, за счет использования встроенной библиотеки OpenGLContext с готовым компонентом TOpenGLControl.

    Однако компонент TOpenGLControl, по — умолчанию, не установлен в среде Lazarus, поэтому необходимо установить данный компонент. Выберите пункт меню "Пакет -> Установить/Удалить пакеты" (Package -> Install/Uninstall Packages), откроется окно установки новых пакетов в среду Lazarus.
    В окне установки новых пакетов, в списке неустановленных пакетов, необходимо найти пакет с именем lazopenglcontext 0.0.1, выбрать его и нажать кнопку "Установить выбранное" (Install selection). После этого необходимо нажать кнопку "Сохранить и перезапустить IDE" (Save and Rebuild IDE), для пересборки Lazarus уже с компонентом TOpenGLControl. В окне подтверждения установки нового пакета, нажмите кнопку "Продолжить" (Continue).

    Если все проделано верно, то в панели инструментов появится вкладка OpenGl с компонентом TOpenGLControl.

    Можно начинать работать с библиотекой.

    Простейшая программа на OpenGL в Lazarus
    Вращение куба


    Pascal Code:
    1. unit Unit1;
    2.  
    3. {$mode objfpc}{$H+}
    4.  
    5. interface
    6.  
    7. uses
    8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9.   ExtCtrls, OpenGLContext, GL, GLU;
    10.  
    11. type
    12.  
    13.   { TForm1 }
    14.  
    15.   TForm1 = class(TForm)
    16.     Button1: TButton;
    17.     Button2: TButton;
    18.     IdleTimer1: TIdleTimer;
    19.     Panel1: TPanel;
    20.     procedure Button1Click(Sender: TObject);
    21.     procedure Button2Click(Sender: TObject);
    22.     procedure FormCreate(Sender: TObject);
    23.     procedure IdleTimer1Timer(Sender: TObject);
    24.   private
    25.     { private declarations }
    26.   public
    27.     { public declarations }
    28.     OpenGLControl1: TOpenGLControl; // Контекст воспроизведения OpenGL
    29.     cube_rotation: GLFloat;
    30.     Speed:          Double;
    31.   end;
    32.  
    33. var
    34.   Form1: TForm1;
    35.  
    36. implementation
    37.  
    38. {$R *.lfm}
    39.  
    40. { TForm1 }
    41.  
    42. procedure TForm1.Button1Click(Sender: TObject);
    43. begin
    44.  
    45.   glClearColor(1.0, 1.0, 1.0, 1.0);
    46.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
    47.   glEnable(GL_DEPTH_TEST);
    48.  
    49.   glMatrixMode(GL_PROJECTION);
    50.   glLoadIdentity();
    51.   gluPerspective(45.0, double(width) / height, 0.1, 100.0);
    52.   glMatrixMode(GL_MODELVIEW);
    53.   glLoadIdentity();
    54.  
    55.   glTranslatef(0.0, 0.0,-6.0);
    56.   glRotatef(cube_rotation, 1.0, 1.0, 1.0);
    57.  
    58.   glBegin(GL_QUADS);
    59.           glColor3f(0.0,1.0,0.0);                              // Set The Color To Green
    60.           glVertex3f( 1.0, 1.0,-1.0);                  // Top Right Of The Quad (Top)
    61.           glVertex3f(-1.0, 1.0,-1.0);                  // Top Left Of The Quad (Top)
    62.           glVertex3f(-1.0, 1.0, 1.0);                  // Bottom Left Of The Quad (Top)
    63.           glVertex3f( 1.0, 1.0, 1.0);                  // Bottom Right Of The Quad (Top)
    64.   glEnd();
    65.   glBegin(GL_QUADS);
    66.           glColor3f(1.0,0.5,0.0);                              // Set The Color To Orange
    67.           glVertex3f( 1.0,-1.0, 1.0);                  // Top Right Of The Quad (Bottom)
    68.           glVertex3f(-1.0,-1.0, 1.0);                  // Top Left Of The Quad (Bottom)
    69.           glVertex3f(-1.0,-1.0,-1.0);                  // Bottom Left Of The Quad (Bottom)
    70.           glVertex3f( 1.0,-1.0,-1.0);                  // Bottom Right Of The Quad (Bottom)
    71.   glEnd();
    72.   glBegin(GL_QUADS);
    73.           glColor3f(1.0,0.0,0.0);                              // Set The Color To Red
    74.           glVertex3f( 1.0, 1.0, 1.0);                  // Top Right Of The Quad (Front)
    75.           glVertex3f(-1.0, 1.0, 1.0);                  // Top Left Of The Quad (Front)
    76.           glVertex3f(-1.0,-1.0, 1.0);                  // Bottom Left Of The Quad (Front)
    77.           glVertex3f( 1.0,-1.0, 1.0);                  // Bottom Right Of The Quad (Front)
    78.   glEnd();
    79.   glBegin(GL_QUADS);
    80.           glColor3f(1.0,1.0,0.0);                              // Set The Color To Yellow
    81.           glVertex3f( 1.0,-1.0,-1.0);                  // Bottom Left Of The Quad (Back)
    82.           glVertex3f(-1.0,-1.0,-1.0);                  // Bottom Right Of The Quad (Back)
    83.           glVertex3f(-1.0, 1.0,-1.0);                  // Top Right Of The Quad (Back)
    84.           glVertex3f( 1.0, 1.0,-1.0);                  // Top Left Of The Quad (Back)
    85.   glEnd();
    86.   glBegin(GL_QUADS);
    87.           glColor3f(0.0,0.0,1.0);                              // Set The Color To Blue
    88.           glVertex3f(-1.0, 1.0, 1.0);                  // Top Right Of The Quad (Left)
    89.           glVertex3f(-1.0, 1.0,-1.0);                  // Top Left Of The Quad (Left)
    90.           glVertex3f(-1.0,-1.0,-1.0);                  // Bottom Left Of The Quad (Left)
    91.           glVertex3f(-1.0,-1.0, 1.0);                  // Bottom Right Of The Quad (Left)
    92.   glEnd();
    93.   glBegin(GL_QUADS);
    94.           glColor3f(1.0,0.0,1.0);                              // Set The Color To Violet
    95.           glVertex3f( 1.0, 1.0,-1.0);                  // Top Right Of The Quad (Right)
    96.           glVertex3f( 1.0, 1.0, 1.0);                  // Top Left Of The Quad (Right)
    97.           glVertex3f( 1.0,-1.0, 1.0);                  // Bottom Left Of The Quad (Right)
    98.           glVertex3f( 1.0,-1.0,-1.0);                  // Bottom Right Of The Quad (Right)
    99.   glEnd();
    100.  
    101.   cube_rotation += 5.15 * Speed;
    102.  
    103.  
    104.   OpenGLControl1.SwapBuffers;
    105.  
    106. end;
    107.  
    108. procedure TForm1.Button2Click(Sender: TObject);
    109. begin
    110.   if IdleTimer1.Enabled = true then
    111.     begin
    112.       IdleTimer1.Enabled := false;
    113.       Button2.Caption:='Вращать автоматически';
    114.     end
    115.   else
    116.     begin
    117.       IdleTimer1.Enabled := true;
    118.       Button2.Caption:='Остановить вращение';
    119.     end;
    120. end;
    121.  
    122. procedure TForm1.FormCreate(Sender: TObject);
    123. begin
    124.    // Создание контекста воспроизведения OpenGL и привязка его к панели на форме
    125.   OpenGLControl1:=TOpenGLControl.Create(Self);
    126.   with OpenGLControl1 do begin
    127.     Name:='OpenGLControl1';
    128.     Align:=alClient;
    129.     Parent:=Panel1;
    130.   end;
    131.  
    132.   IdleTimer1.Enabled  := false;
    133.   IdleTimer1.Interval := 100;
    134.   Speed := 1;
    135.  
    136.   Button2.Caption:='Вращать автоматически';
    137.   Button1.Caption:='Повернуть';
    138. end;
    139.  
    140. procedure TForm1.IdleTimer1Timer(Sender: TObject);
    141. begin
    142.   Button1Click(Sender);
    143. end;
    144.  
    145.  
    146.  
    147. end.
    Последний раз редактировалось nik_1; 03.07.2016 в 21:54.
    Ответить с цитированием  
     

  2. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (04.07.2016), Free Admin (04.07.2016)

  3. #2  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,852
    Сказал(а) спасибо
    1,816
    Поблагодарили 947 раз(а) в 809 сообщениях
    Записей в блоге
    1
    Спасибо за полезную информацию.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  4. #3  
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    283
    Сказал(а) спасибо
    160
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    думал будет больше желающих узнать про интимную связь лазаруса и опенджеэл.

    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Спасибо за полезную информацию.
    Ну хоть кому то помогло. Что теперь лазарус пользовать станешь?
    Последний раз редактировалось >Quiet Snow<; 06.08.2016 в 14:23. Причина: Объединение сообщений
    Ответить с цитированием  
     

  5. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,852
    Сказал(а) спасибо
    1,816
    Поблагодарили 947 раз(а) в 809 сообщениях
    Записей в блоге
    1
    Ну хоть кому то помогло. Что теперь лазарус пользовать станешь?
    Не, у меня есть FB, нафига мне лазарус, тратить ещё год-два на шерстёжку, уже наэкспериментировался вдоволь...
    Инфа просто полезная для пользователей.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  6. #5  
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    283
    Сказал(а) спасибо
    160
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    примеры опенджл на лазарусе от Тимура
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Мигает OpenGL
    от Сионист в разделе C/C++
    Ответов: 13
    Последнее сообщение: 06.02.2016, 12:21
  2. OpenGL без glutMainLoop
    от Сионист в разделе C/C++
    Ответов: 3
    Последнее сообщение: 05.02.2016, 18:57
  3. Lazarus и GA
    от Mestniy в разделе Lazarus
    Ответов: 2
    Последнее сообщение: 17.12.2015, 15:23
  4. Lazarus
    от Мефодий в разделе Общие вопросы программирования
    Ответов: 6
    Последнее сообщение: 10.12.2013, 22:17
  5. OpenGL демка
    от Kakos_nonos в разделе Проекты на Pascal
    Ответов: 3
    Последнее сообщение: 19.06.2011, 21:02
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •