В общем, нужно отобразить простую геометрическую фигуру в пределах нормализованного объема видимости. Нужно нарисовать пятиугольник с двумя диагоналями, используя геометрические примитивы: треугольник (GL_TRIANGLES) и отрезок (GL_LINES), а также использовать: Команды инициализации: auxInitWindowPosition, auxInitWindowSize, glutInitWindowPosition, glutInitWindowSize. Команды настройки цветов фона и изображения: glClearColor, glClear, glColor. Команды рисования геометрических примитивов: glVertex, glBegin – glEnd. Команды задания стиля вычерчивания: glLineWidth, glEnable(GL_LINE_SMOOTH), glEnable(GL_POINT_SMOOTH).
TarasBer, спасибо за помощь! Насчёт 2-й картинки - там косяк - не нарисована линия вообще, а должна идти вниз - в принципе, обычно координата Z так и ставится в системах координат. Кому интересно, вот ответ на вопрос, что будет, если задать Z=5: Если задать координаты z = 5 одной из вершин треугольника (например, верхней вершины левого треугольника), то можно увидеть эффект, обусловленный тем, что точка выходит за границу видимости (проецируется), и часть фигуры при этом отсекается.
Если Z=0...1, то точка находится в границе видимости, и фигура не отсекается при этом.
{=======================Рисование окна=======================} procedure TForm1.FormPaint(Sender: TObject); // форма рисования begin
wglMakeCurrent(Canvas.Handle, hrc); // прорисовка поля glClearColor(0.9,0.6,0.2,1.0); // цвет фона glClear(GL_COLOR_BUFFER_BIT); // очистка буфера цвета glLineWidth(5); // толщина линий glEnable (GL_LINE_SMOOTH); // сглаживание линий
glPolygonMode(GL_Front_and_Back, GL_LINE); glBegin (GL_TRIANGLES); {===== рисуем треугольник слева =====} glColor3f (0.3,0.4,0.7); // цвет линий треугольника glVertex3f (-0.4, 0, 0); // средняя вершина glVertex3f (0, 0.4, 0); // верхняя вершина glVertex3f (-0.3, -0.4, 0); // нижняя вершина {===== рисуем треугольник справа =====} glColor3f (0.3,0.4,0.7); // цвет линий треугольника glVertex3f (0.4, 0, 0); // средняя вершина glVertex3f (0, 0.4, 0); // верхняя вершина glVertex3f (0.3, -0.4, 0); // нижняя вершина {===== рисуем треугольник в центре =====} glColor3f (0.3,0.4,0.7); // цвет линий треугольника glVertex3f (-0.3, -0.4, 0); // средняя вершина glVertex3f (0, 0.4, 0); // верхняя вершина glVertex3f (0.3, -0.4, 0); // нижняя вершина glEnd;
glBegin (GL_LINES); glColor3f (0.8,0.2,0.6); // цвет линии glVertex3f (-0.3, -0.4, 0); // координаты нижней вершины левой линии glVertex3f (0, 0.4, 0); // координаты верхней вершины левой линии glColor3f (0.8,0.2,0.6); // цвет линии glVertex3f (0.3, -0.4, 0); // координаты нижней вершины правой линии glVertex3f (0, 0.4, 0); // координаты верхней вершины правой линии glEnd;
SwapBuffers(Canvas. Handle); // содержимое буфера - на экран
{==================Конец работы приложения==================} procedure TForm1.FormDestroy(Sender: TObject); begin wglDeleteContext(hrc); end;
end.
При этом крайне рекомендуется сделать размер выводимого окна с одинаковым разрешением, например, 600Х600, чтобы координаты ложились на окно соответственно заданным координатам, иначе будет искажения.