Среда программирования:
Lazarus 1.0.14 win 64
Статья по теме:
Программа демонстрирует вращение четырехугольной пирамиды в OpenGL.
glTranlsatef() производит перенос объекта, прибавляя к координатам его вершин значения своих параметров.
glRotatef() производит поворот объекта против часовой стрелки на угол angle (измеряется в градусах) вокруг вектора (x,y,z).
Код программы:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, OpenGLContext, GL, GLU; type { TForm1 } TForm1 = class(TForm) Button1: TButton; OpenGLControl1: TOpenGLControl; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { private declarations } public { public declarations } tri_rotationx: GLFloat; tri_rotationy: GLFloat; tri_rotationz: GLFloat; Speed: Double; end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := true; end; procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := false; Timer1.Interval := 100; Speed := 1; end; procedure TForm1.Timer1Timer(Sender: TObject); begin glClearColor(0.6, 0.98, 0.6, 1.0); // сделали зеленоватый фон glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, double(width) / height, 0.1, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0,-6.0); glRotatef(tri_rotationx, tri_rotationy, tri_rotationz, 0.0); glBegin(GL_TRIANGLES); glColor3f(0.52,0.44,1.0);// Сделали боковую сторону фиолетовой glVertex3f( 1.0, -1.0,-1.0); glVertex3f(1.0, -1.0,1.0); glVertex3f(0.0, 1.0, 0.0); glEnd(); glBegin(GL_TRIANGLES); glColor3f(1.0,0.84,0.0); // Сделали боковую сторону желтой glVertex3f( 1.0,-1.0, 1.0); glVertex3f(-1.0,-1.0, 1.0); glVertex3f(0.0,1.0,0.0); glEnd(); glBegin(GL_TRIANGLES); glColor3f(0.94,0.5,0.5);// Сделали сторону розовой glVertex3f(-1.0,-1.0,1.0); glVertex3f(-1.0, -1.0,-1.0); glVertex3f(0.0,1.0,0.0); glEnd(); glBegin(GL_TRIANGLES); glColor3f(0.0,1.0,0.0); // Сделали сторону светло зеленой glVertex3f(-1.0,-1.0,-1.0); glVertex3f(1.0,-1.0,-1.0); glVertex3f(0.0, 1.0,0.0); glEnd(); glBegin(GL_QUADS);// основание пирамиды glColor3f(1.0,0.51,0.28); // сделали основание рыжим glVertex3f( 1.0,-1.0, 1.0); glVertex3f(-1.0,-1.0, 1.0); glVertex3f(-1.0,-1.0,-1.0); glVertex3f( 1.0,-1.0,-1.0); glEnd(); tri_rotationx += 5.15 * Speed; tri_rotationy += 5.15 * Speed; tri_rotationz += 20.0 * Speed; OpenGLControl1.SwapBuffers; end; end.
Прикрепленный файл | Размер |
---|---|
Piramida.rar | 607.83 кб |