В общем, нужно отобразить простую геометрическую фигуру в пределах нормализованного объема видимости. Нужно нарисовать пятиугольник с двумя диагоналями, используя геометрические примитивы: треугольник (GL_TRIANGLES) и отрезок (GL_LINES), а также использовать: Команды инициализации: auxInitWindowPosition, auxInitWindowSize, glutInitWindowPosition, glutInitWindowSize. Команды настройки цветов фона и изображения: glClearColor, glClear, glColor. Команды рисования геометрических примитивов: glVertex, glBegin – glEnd. Команды задания стиля вычерчивания: glLineWidth, glEnable(GL_LINE_SMOOTH), glEnable(GL_POINT_SMOOTH).
{======================================================================= Перерисовка окна} procedure TfrmGL.FormPaint(Sender: TObject); var i : 0..3; begin wglMakeCurrent(Canvas.Handle, hrc);
glViewPort (0, 0, ClientWidth, ClientHeight); // область вывода
glClearColor (0.75, 0.75, 0.5, 1.0); // определение цвета фона glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glColor3f (1.0, 1.0, 1.0); glBegin (GL_POLYGON); // как-то так называется константа glVertex2f (0, 0); For i := 0 to 3 do glVertex2f (0.9 * cos (2 * Pi * i / 5), 0.9 * sin (2 * Pi * i / 5)); glEnd;
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glColor3f (0.0, 0.0, 0.0); glBegin (GL_TRIANGLE_FAN); glVertex2f (0, 0); For i := 0 to 3 do glVertex2f (0.9 * cos (2 * Pi * i / 5), 0.9 * sin (2 * Pi * i / 5)); glEnd;
SwapBuffers(Canvas.Handle); // содержимое буфера - на экран wglMakeCurrent(0, 0); end;
{======================================================================= Формат пикселя} procedure SetDCPixelFormat (hdc : HDC); var pfd : TPixelFormatDescriptor; nPixelFormat : Integer; begin FillChar (pfd, SizeOf (pfd), 0); pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; nPixelFormat := ChoosePixelFormat (hdc, @pfd); SetPixelFormat (hdc, nPixelFormat, @pfd); end;
{======================================================================= Создание формы} procedure TfrmGL.FormCreate(Sender: TObject); begin SetDCPixelFormat(Canvas.Handle); hrc := wglCreateContext(Canvas.Handle); end;
{======================================================================= Конец работы приложения} procedure TfrmGL.FormDestroy(Sender: TObject); begin wglDeleteContext(hrc); end;