Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 2
Всего онлайн: 2
Зарегистрировано юзеров: 6619
Комментариев на сайте: 650
Новый юзер: Dysonetn



Последние комментарии
c
dealrattKi прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
Это действительно радует меня. --- Бесподобное сообщение скачать fifa, скачать фифа а также [url=http://15fifa.ru/novosti-fifa-15]fifa 15 последние новости[/url] скачать фифа
intatryadebra прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
Revival RO is best free ro populair ragnarok online private server founded in 2017 2018. Revival pvp big free Ragnarok server is an online exciting free MMORPG called ragnarok online, it a fun server for MMORPG gamers in ASIA. This is a top 10 ragnarok online private server thats high on the list and top ranking with massive players online. We have many players from Asia like Malaysia, Indonesia, Philippines, Thailand, Singapore, China, Hong Kong All these players are here to play free private ragnarok online server and battle players all around the world. They want to collect the best items and gear to be strongest in War of Emperium, War of Emperium are guild wars in this free RO Server. You can play this game on android phone or tablet or pc client. Enjoy And have fun. ragnarok online server http://bit.ly/2tKyawS

Урок 3 - Объёмные фигуры

  В этом уроке мы нарисуем объёмные фигуры: куб, пирамида, сфера, конус, тор (плюшка), и включим освещение примитивов.
Сначала необходимо скачать (ссылка в конце урока) и подключить библиотеку DGLUT.pas.
Напомню, для того, что бы подключить библиотеку нужно ввести ее имя в секцию uses

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OpenGL, DGLUT;
В библиотеке DGLUT.pas записаны уже готовые алгоритмы построения объёмных фигур.
Например:
Алгоритм рисования куба вручную:
glBegin(GL_QUADS);
    // Лицевая сторона
    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);
    //Задняя сторона
    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);
    // Верхняя сторона
    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);
    // Нижняя сторона
    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);
    // Правая сторона
    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);
    // Левая сторона
    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(); 
При помощи библиотеки:
glutSolidCube(Размер);
  В OpenGL есть буфер глубины, второе его название ZBuffer. В нем хранятся данные о расстоянии от каждого пиксела монитора до точек в объёмном пространстве OpenGL, принадлежащих этому пикселу. OpenGL выводит точки, расстояние до которых меньше всех расстояний до точек принадлежащие этому пикселу.


Удалите все примитивы прошлого урока в процедуре FormPaint и дополните её кодом:
glutSolidCube(1);

После компиляции мы увидим куб белого цвета. Белый, потому что он не освещается.

Что бы включить источник света, нужно добавить
glEnable(GL_LIGHTING); //включаем освещение
glEnable(GL_LIGHT0); //включаем источник света №0
в функцию создания формы. Источников света не может быть больше 8.
Давайте скомпилируем и посмотрим, что получилось.


Куб стал смотреться более объёмно, благодаря освещению.

  Теперь нарисуем сферу, но перед этим сдвинем куб в сторону. Сделаем это функцией glTranslatef(x, y, z) где x, y, z –вектор смещения всей системы координат. Существуют функции запоминания текущей системы координат glPushMatrix и восстановления glPopMatrix. Если просто использовать glTranslatef , то мы просто сдвинем всю систему координат со всеми примитивами, которые мы нарисовали, а нам надо сдвинуть ТОЛЬКО куб.
Вот здесь и пригодятся эти функции.

Запомним систему координат -> сдвинем куб -> восстановим систему координат.

Таким образом, получится, что мировая система координат останется на месте, а система координат куба будет смещена.

Изменим код вывода куба:
 glpushMatrix; //Запомнили
 glTranslatef(-5,0,0); //Сместили
 glutSolidCube(1);      //Рисуем куб
 glPopmatrix;  //Восстановили

Вот сейчас, когда стало много места, можно нарисовать сферу функцией glutSolidSphere(радиус, кол-во сегментов по X, кол-во сегментов по Y) и сдвинем в противоположную сторону.
 glpushMatrix; //Запомнили
 glTranslatef(5,0,0); //Сместили
 glutSolidSphere(2,20,20);  //Рисуем сферу
 glPopmatrix; //Восстановили

Двигаемся дальше и рисуем тор функцией glutSolidTorus(радиус сечения, радиус окружности, кол-во сегментов по X,кол-во сегментов по Y) и сдвинем его от нас на 5 единиц пространства.
 glpushMatrix; //Запомнили
 glTranslatef(0,5,0); //Сместили
 glutSolidTorus(1, 2, 20, 20);//Рисуем тор
 glPopmatrix; //Восстановили

Нарисуем додекаэдр функцией glutSolidDodecahedron и сдвинем его в нашу сторону.
 glpushMatrix; //Запомнили
 glTranslatef(0,-5,0); //Сместили
 glutSolidDodecahedron (); //Рисуем додекаэдр
 glPopmatrix; //Восстановили

И наконец, нарисуем конус функцией glutSolidCone(радиус базы, высота, кол-во сегментов по X,кол-во сегментов по Y) и сдвинем его вверх на 2 единицы.
 glpushMatrix; //Запомнили
 glTranslatef(0,0,2); //Сместили
 glutSolidCone (2, 3, 10, 10); //Рисуем конус
 glPopmatrix; //Восстановили

Всё. Таким образом, процедура FormPaint должна содержать следующий код:
 glpushMatrix;
 glTranslatef(-5,0,0);
 glutSolidCube(1);      //Куб
 glPopmatrix;

 glpushMatrix;
 glTranslatef(5,0,0);
 glutSolidSphere(2,20,20);  //Сфера
 glPopmatrix;

 glpushMatrix;
 glTranslatef(0,5,0);
 glutSolidTorus(1,2,20,20);  //Тор
 glPopmatrix;

 glpushMatrix;
 glTranslatef(0,-5,0);
 glutSolidDodecahedron();   //Додекаэдр
 glPopmatrix;

 glpushMatrix;
 glTranslatef(0,0,2);
 glutSolidCone(2,3,10,10);   //Конус
 glPopmatrix;
  В следующем уроке мы познакомимся с нормалями.

Зарегистрируйтесь или авторизуйтесь, чтобы скачать.

Источник: www.thedelphi.ru
Автор: Клящицкий Виталий
Опубликовано: 17 Мая 2012
Просмотров:

Урок 2 - Простые примитивы Урок 4 - Нормали

Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.



аватар Добавил(а): wagner [Новичок] Дата: 2012-07-23
можно было бы и написать, как подключается эта библиотека..., а без не смысла нет дальше продолжать




аватар Добавил: Admin [Сэнсэй] vk.com/savelev_a_y Дата: 2012-07-24
Все библиотеки подключаются записью в uses. Добавьте DGLUT в uses.




аватар Добавил(а): wagner [Новичок] Дата: 2012-07-24
Нееееет))) то что подключать библиотеки в разделе uses это понятно, я немного не так пояснил проблему) куда "засунуть" скачанный файл, чтобы библиотека привязалась? просто в папку с проектом?




аватар Добавил: Admin [Сэнсэй] vk.com/savelev_a_y Дата: 2012-07-24
По-моему да, просто в папку с проектом. Если не выходит, киньте в папку C:\Program Files (x86)\Borland\Delphi7\Lib




аватар Добавил(а): Drimer [Новичок] Дата: 2012-12-05
немогу скачать файл DGLUT.PAS вибрасиваєт мне как текст ((( што мне зделать?)))




аватар Добавил: Admin [Сэнсэй] vk.com/savelev_a_y Дата: 2012-12-06
Нажми ПКМ и выбери "Сохранить как..."




аватар Добавил(а): Doggy [Новичок] Дата: 2013-01-12
thank you!!!




аватар Добавил(а): gasmator [Новичок] Дата: 2013-05-11
у меня вместо куба квадрат рисует




аватар Добавил: Klesh [Программист] Дата: 2013-05-11
Для куба надо использовать glutSolidCube, попробуй повернуть на 45 градусов куб, сразу станет ясно.




аватар Добавил(а): Joker1999obp [Новичок] Дата: 2013-10-17
почему у меня после освешения куб просто стал не белым а серим и всю




аватар Добавил(а): Joker1999obp [Новичок] Дата: 2013-10-19
и как повернуть куб или другой 3D объект ?




аватар Добавил: kordalk [Новичок] Дата: 2014-01-06
glRotatef(x,y,z,Angle);




аватар Добавил(а): romankononovich [Новичок] Дата: 2014-04-28
Как можно сделать отсечение сферы и получить полусферу?




аватар Добавил(а): Dionis [Новичок] Дата: 2014-09-26
а как реализовать рисование фигур с помощью кнопок????




аватар Добавил(а): revolution [Новичок] Дата: 2014-10-02
Хм... При добавлении кода glutSolidCube(1); ничего не происходит. Все делал в точности как и в уроке, ошибок нет. Подскажите пожалуйста что делать




аватар Добавил(а): Dionis [Новичок] Дата: 2014-10-03
всё должно работать, если ты с кнопкой или таймером работаешь, то её процедура должна описана как и форм_паинт на предыдущих уроках: например: FormResize(Sender);//процедура обновления if GetAsyncKeyState(VK_LEFT)<>0 then angle:=angle+0.5; if GetAsyncKeyState(VK_RIGHT)<>0 then angle:=angle-0.5; glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT ); glRotatef(angle,0,0,1); glpushMatrix; glTranslatef(-5,0,0); glutSolidCube(1); //Куб glPopmatrix; SwapBuffers(Canvas.Handle);




аватар Добавил(а): postfedor [Новичок] Дата: 2015-09-18




аватар Добавил(а): Ultimate.Warrior [Новичок] Дата: 2015-12-26
Можно ли наложить текстуры на эти фигуры?




аватар Добавил(а): Episkop [Новичок] Дата: 2016-04-20
А как нарисовать цилиндр?