В общем, нужно отобразить простую геометрическую фигуру в пределах нормализованного объема видимости. Нужно нарисовать пятиугольник с двумя диагоналями, используя геометрические примитивы: треугольник (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_LINE); glColor3f (1.0, 0.0, 0.5); 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;