Войти
ПрограммированиеСтатьиГрафика

Основы программирования OpenGL в Borland С++Builder и Delphi. (2 стр)

Автор:

Пример

Давайте нарисуем сферу, а потом заставим её крутиться. Итак, всё, что нам понадобится - это форма и таймер.

Изображение

Установите интервал таймера на 10 миллисекунд (нам этого будет вполне достаточно). Теперь скопируйте все представленные выше фрагменты кода в соответствующие места. В процедуре Timer1Timer напишите одну сточку: Draw(); (в Delphi без скобок).

Теперь нам осталось только что-нибудь нарисовать, т.е. отредактировать функцию Draw.

void TForm1::Draw()
{
  glClear(GL_DEPTH_BUFFER_BIT |  GL_COLOR_BUFFER_BIT);
 
  GLUquadricObj *quadObj;
  quadObj = gluNewQuadric();
 
  gluQuadricDrawStyle(quadObj, GLU_FILL);
  glColor3f(1,0,0);
  gluSphere(quadObj, 2,10,10);
    glRotatef(3, 0,1,0);
  gluDeleteQuadric(quadObj);
 
  SwapBuffers(ghDC);
}
procedure TForm1.Draw;
var
  quadObj :GLUquadricObj;
begin
  glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT);
 
  quadObj:=gluNewQuadric;
  gluQuadricDrawStyle(quadObj, GLU_FILL);
  glColor3f(1,0,0);
  gluSphere(quadObj, 2,10,10);
    glRotatef(3, 0,1,0);
  gluDeleteQuadric(quadObj);
 
  SwapBuffers(ghDC);
end;

Всё, можно нажимать F9!!!

Изображение



А теперь кое-что поясню (в процедуре Draw не встретилось ни одной знакомой строчки :( ).
glClear() сбрасывает значения всего перечисленного в качестве параметров (в нашем случае очищает буфер цвета и буфер глубины). Этой процедуре передавать много всяких буферов для очистки, но лично я использую только 3: GL_DEPTH_BUFFER_BIT, GL_COLOR_BUFFER_BIT, иногда GL_STENCIL_BUFFER_BIT (буфер трафарета).
glColor() устанавливает цвет фигуры. Существует следующий синтаксис как для glColor, так и для других функций OpenGL:
gl<name>[n][type]

Поясняю, каждая функция OpenGL начинается с префикса "gl". Далее следует название функции. После названия - количество параметров (если функция определена для разного количества параметров). И, наконец, переменными какого типа являются параметры:

Итак, glColor3f() означает, что цвет задаётся тремя компонентами типа GLfloat.

Для рисования сферы мы используем механизм из glu32.dll. Создаём объект типа GLUquadricObj() и инициализируем его функцией gluNewQuadric(). Далее устанавливаем стиль фигуры функцией gluQuadricDrawStyle(quadObj, GLU_FILL). Стиль может быть GLU_FILL, GLU_LINE  или GLU_POINT. Что каждый из них значит, проверьте сами.

gluSphere() - делает из quadObj сферу. Три последних параметра - это радиус и количество разбиений поперёк и вдоль оси Z соответственно. Я взял маленькое число разбиений, чтобы было видно, что сфера крутится.

И не забудем освободить память, занимаемую под quadObj - gluDeleteQuadric(quadObj).

glRotatef() - заставляет нашу сферу крутиться. О том как - в следующей статье.

И, наконец, SwapBuffers(ghDC) выводит всё на экран.

Пока всё.

Исходники к статье: 20030501.zip

Советую почитать:

1. Тихомиров Ю. "Программирование трёхмерной графики".
Пишет мудрёно, но очень много полезной информации. Кстати, у него вышла вторая книга, может она ещё толковее и понятней?

2. wat. OpenGL: Основы.
Просто, доступно, но для другой ИСР.

Страницы: 1 2

#Delphi, #OpenGL, #основы

2 мая 2003 (Обновление: 20 мая 2011)

Комментарии [30]