Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
MeTaDoH
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 1
1

OpenGl и Lazarus

08.02.2014, 23:15. Просмотров 841. Ответов 1
Метки нет (Все метки)

Всем доброго времени суток) Собрался делать курсовой, с использованием OpenGL, но так как я в нем полный 0, решил обратиться сюда.
Скачал из интернета шаблон для Lazarus, там где есть инициализация OGL и тд.
так вот при попытке включить освещение, ничего не происходит. фигура остается черной, как и была.
При попытке самостоятельно инициализировать OGL - ничего не выходит.
Подскажите, пожалуйста, с чего начать изучение OGL и какие для этого понадобятся файлы. Заранее - очень благодарен.

////
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
procedure TForm1.FormCreate(Sender: TObject);
begin
  dc:=getDC(self.Handle);
   FillChar(pfd, sizeOf(pfd),0);
   pfd.dwFlags:= PFD_SUPPORT_OPENGL or         // Подключаем OpenGl
                 PFD_DOUBLEBUFFER or         // двойная буфферизация, изображение рисуется сначала в памяти
                 PFD_DRAW_TO_WINDOW;
   npf:=ChoosePixelFormat(dc, @pfd); // выбираем формат пикселя
   SetPixelFormat(dc, npf, @pfd); // ссылаемся на формат пикселя, формат рисования
   hrc:= wglCreateContext(dc);
   x:=0;
   yy:=0.5;
   z:=0;
   naj:=false;
   rx:=0.5;
   ry:=0.5;
   ii:=ii+0.1;
   glEnable(GL_LIGHTING); //включаем освещение
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
        wglDeleteContext(hrc); // освобождает контекст рисования
end;
 
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
        naj:=true;
        x1:=x;
        y1:=y;
end;
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if naj=true then
     begin
       if x1<x then begin ii:=ii+aBS(x-x1)/1024;  x1:=x; end
               else begin ii:=ii-ABS(x-X1)/1024;  x1:=x; end;
       if y1<y then begin iy:=iy+aBS(y-y1)/768;  y1:=y; end
               else begin iy:=iy-ABS(y-y1)/768;  y1:=y; end;
 
     {  ii:=x/526; }
      { yy:=y/100; }
     end;
end;
 
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  naj:=false;
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
        WglMakeCurrent(dc, hrc); //захватываем контекст
        glViewPort(0,0,ClientWidth, ClientHeight);// определяем область вывода контекста
        glClearColor(1,1,1,1); //очищаем экран черным цветом
        glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //определяем цвет закрашевания(черный)
  glEnable(GL_NORMALIZE);
  glLoadIdentity;
  n:=0.8;
       glScalef(n,n*aspect,n);
       glEnable(GL_DEPTH_TEST) ;
        glFrustum(-1,1,-1,1,3,10);
        glTranslatef(0,0,-8);
    {    glRotatef(30+255*sin(a/25),1,0,0);
        glRotatef(20+a*1.5,0,1,0);   }
  gluLookAt(rx*cos(pi*ii),rx*sin(pi*iy),ry*sin(pi*ii),0,0,0,0,1,0);
  glScalef(1,1,1);
  holst(sender);
  glEnable(GL_DEPTH_TEST)  ;
  SwapBuffers(dc);// меняем местами страницу видимою и невидимою (выводим рисунок и освобождаем память)
end;
 
procedure TForm1.FormResize(Sender: TObject);
begin
       aspect:=ClientWidth/ClientHeight;
     FormPaint(self);
end;
 
procedure TForm1.holst(Sender: TObject);
begin
   glpushMatrix;
   glTranslatef(-3,0,0);
    glutSolidCube(0.1);      //Куб
    glTranslatef(3,0,0);
    glutSolidSphere(2,10,10);  //Сфера
    glTranslatef(0,3,0);
   glutSolidTorus(0.1,0.2,1,1);  //Тор
    glTranslatef(0,-0.3,0);
    glutSolidDodecahedron();   //Додекаэдр
    glTranslatef(0,0,0.2);
    glutSolidCone(0.2,0.3,1,1);   //Конус
           glEnable(GL_LIGHTING);
              glEnable(GL_LIGHT_MODEL_AMBIENT );
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
     FormPaint(self);
end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  ii:=ii+0.01;
  iy:=iy+0.01;
end;
.

////
так вот при попытке включить освещение, ничего не происходит. фигура остается черной, как и была.
При попытке самостоятельно инициализировать OGL - ничего не выходит.
Подскажите, пожалуйста, с чего начать изучение OGL и какие для этого понадобятся файлы. Заранее - очень благодарен.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2014, 23:15
Ответы с готовыми решениями:

Доработать проект OpenGL в Lazarus (за $$$)
Доброго времени суток! В приложении есть проект с использованием OpenGL,...

Создаю игру с научным уколоном на C++/opengl. Как подключить openGL и добиться кроссплатформенности
Я читал про opengl - для его инициализации нужно создавать windows - окно. Для...

(2 главы перевода книги доступно) OpenGL Programming Guide, Version 4.3, 8th Edition - OpenGL
Продолжая тему с переводом книги...

Ошибки при подключение opengl, немного не связанные с opengl
#include &lt;windows.h&gt; #include &quot;stdafx.h&quot; #include &lt;gl/gl.h&gt; #include...

Сильно отличаются OpenGL ES и OpenGL и как?
Сильно отличаются OpenGL ES и OpenGL и как?

1
pHOMM
479 / 252 / 51
Регистрация: 30.06.2010
Сообщений: 651
09.02.2014, 09:57 2
Лучший ответ Сообщение было отмечено MeTaDoH как решение

Решение

Начать можно с книги Краснова "OpenGL в проектах Delphi" - для лазаруса будет практически аналогично (уж вызовы команд опенгла вообще от языка не зависят)
Навскидку, я вижу у Вас glEnable(GL_LIGHTING) , но не вижу glEnable(GL_LIGHT0) и его настройки.
Покурите тут Источник света и вообще теорию (краснова или любые уроки в интернете по опенглу 1 и 2, т.к. 3 и 4 уже не подойдёт)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2014, 09:57

OpenGL + GlTools по книге OpenGL Суперкнига
В главе 4 есть пример с отрисовкой 3хмерного вращающегося тора. Вот код: void...

OpenGL - VS2008 Инициализация OpenGL (Glut)
Правильно ли я написал код для выведения 3d изображения на экран? Вот пару...

Не загружается текстура в OpenGL (OpenGL + Классы)
Здравствуйте! Пишу движок для игры. Первый прототип я сделал процедурно. Все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru