Soft4Pc
Пятница, 10.05.2024, 13:00
Приветствую Вас Гость | RSS

Меню сайта


Adobe Photoshop [9]
Delphi [10]
Cisco [1]
Иностранные языки [1]
C# / C++ [0]

Интересные Ссылки

Последние статьи

Нестыковки "идеальной" игры
(Комментариев:0)


Критическая уязвимость в Adobe Reader
(Комментариев:5)


Советы по оптимизации Windows Vista
(Комментариев:2)


Десять причин, по которым Linux суждено одержать победу над Windows [Jack Wallen]
(Комментариев:0)


Десять непреложных законов безопасности
(Комментариев:0)


Два Windows на одном компьютере
(Комментариев:0)


Уменьшение времени загрузки программ в Windows
(Комментариев:0)


Наш опрос
Оцените мой сайт
Всего ответов: 25

FAQ (вопрос/ответ)
Как качать с Ifolder.Ru
Как качать с Letitbit
Как качать с UPLOADBOX.COM
Как качать с uploadbox.ru
Как качать с Rapidshare.com

Праздники сегодня
Праздники сегодня

Главная » Статьи » Обучение » Delphi

Урок 8. Двумерные построения. Треугольник [Фрукт]

Закончив с линиями, перейдем к треугольникам — примитиву, задаваемому константой GL_TRIANGLES. В этом примитиве последующие вершины берутся триплетами, тройками, по которым строится каждый отдельный треугольник.
Следующий код служит иллюстрацией рисования одного треугольника.



glBegin (GL_TRIANGLES);
   glVertex2f (-1, -1);
   glVertex2f (-1, 1);
   glVertex2f (1, 0);


 glEnd;

 



Для рисования правильного шестиугольника из отдельных треугольников код должен выглядеть так:

   
                                                            
glBegin (GL_TRIANGLES);
   For i := 0 to 5 do begin
       glVertex2f (0, 0);
       glVertex2f (0.5 * cos (2 * Pi * i / 6),
                   0.5 * sin (2 * Pi * i / 6));
       glVertex2f (0.5 * cos (2 * Pi * (i + 1) / 6),
                   0.5 * sin (2 * Pi * (i + 1) / 6));
   end;
 glEnd;


В качестве опорных точек выбраны шесть точек на окружности.
Мы можем перейти к примитиву, задаваемому константой GL_TRIANGLE_STRIP: связанная группа треугольников. Первые три вершины образуют первый треугольник, вершины со второй по четвертую — второй треугольник, с третьей по пятую — третий и т. д.

Пример  нарисует флажок, образованный наложением двух треугольников (рис. 1):


glBegin (GL_TRIANGLE_STRIP);
   glVertex2f (1, 1);
   glVertex2f (-1, 1);
   glVertex2f (-1, -1);
   glVertex2f (1, -1);
 glEnd;

 

Урок 8. Двумерные построения. Треугольник


Рис. 1. Флаг получается наложением  двух отдельных треугольников

 

Попробуем поэкспериментировать с  нашей  программой:  будем рисовать треугольники разного цвета (проект из подкаталога Ех10):


glBegin (GL_TRIANGLE_STRIP);
   glColor3f (0.0, 0.0, 1.0);
   glVertex2f (1, 1);
   glVertex2f (-1, 1);
   glColor3f (1.0, 0.0, 0.0);
   glVertex2f (-1, -1);
   glVertex2f (1, -1);
 glEnd;

Результат окажется неожиданным и живописным: у фигуры возникнет плавный переход синего цвета в красный (рис. 2).

 

Урок 8. Двумерные построения. Треугольник


Рис. 2. Плавный переход цвета

Вызов перед командными скобками функции glShadeModel (GL_FLAT) , задающей правило тонирования, избавит от градиентного заполнения фигуры, но результат все равно будет неожиданным — оба треугольника станут красными, т. е. цвета второго из них.

 


 Ознакомившись со справкой по этой команде, мы обнаружим, что для связанных треугольников наложение цветов происходит именно по правилу старшинства цвета второго примитива. Здесь же узнаем, что по умолчанию тонирование задается плавным, как и получилось в предыдущей программе.
Рисование шестиугольника путем наложения треугольников может быть реализовано с помощью следующего кода:


glBegin (GL_TRIANGLE_STRIP);
   For i := 0 to 6 do begin
       glColor3f (random, random, random);
       glVertex2f (0, 0);
       glVertex2f (0.5 * cos (2 * Pi * i / 6),
                   0.5 * sin (2 * Pi * i / 6));
   end;
 glEnd;


Следующий примитив, определяемый константой GL_TRIANGLE_FAN, также задает последовательно связанные треугольники, однако фигура строится по другому принципу: первая вершина является общей для всех остальных треугольников, задаваемых перечислением вершин, т. е. треугольники связываются наподобие веера.
Для построения шестиугольника с использованием такого примитива цикл надо переписать так:

glBegin (GL_TRIANGLE_FAN);
   glVertex2f (0, 0);
   For i := 0 to 6 do begin
       glColor3f (random, random, random);
       glVertex2f (0.5 * cos (2 * Pi * i / 6),
                   0.5 * sin (2 * Pi * i / 6));
   end;
 glEnd;


Теперь поговорим о режимах вывода многоугольников.
Для   устранения   ступенчатости   многоугольников   используется   команда glEnable с аргументом GL_POLYGON_SMOOTH.


Если в примеры на треугольники перед командными скобками поместить строку glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
то треугольники будут рисоваться контурно — только линии 
Команда glPolygonMode задает режим воспроизведения для всех типов многоугольников.


Ширину линий контура можно варьировать с помощью glLinewidth, пунктирные линии контура задаются командой glLineStipple.


Команда glPolygonMode позволяет выводить вместо заполненных и контурных многоугольников только их вершины, если ее вторым аргументом взять константу GL_POINT (не путать с GL_POINTS!). Размеры точек вершин и наличие сглаживания у них можно задавать так же, как и для обычных точек. По умолчанию многоугольники строятся заполненными (включен режим GL_FILL).


Мы изучили примитивы "точка", "линия", "треугольник". В принципе, этих  римитивов вполне достаточно, чтобы нарисовать все что угодно, пусть подчас и чересчур громоздким способом. Даже более того, остальные примитивы фактически являются усовершенствованными треугольниками и строятся из треугольников, чем и вызваны их некоторые ограничения. Построения на основе треугольников являются оптимальными по своим скоростным показателям: треугольники строятся наиболее быстро, и именно этот формат чаще всего предлагается для аппаратного ускорения.

Категория: Delphi | Добавил: LimansK (21.09.2009)
Просмотров: 1095 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Логин:
Пароль:

Реклама
Заработок на сайте uCoz

Web-IP.ru - Система Активной Рекламы

Контекстная Реклама на Link.ru

WMmail.ru - сервис почтовых рассылок



Graffiti Decorations(R) Studio (TM) Site Promoter

Первая бесплатная система раскрутки сайта

Последние файлы

Hamachi 2.0.1.66
(Комментариев:48)
(Загрузок:357)


Генератор Календарей 2.27
(Комментариев:3)
(Загрузок:288)


Desktop Icon Toy 4.0
(Комментариев:1)
(Загрузок:288)


Vista Codec Package 5.4.6
(Комментариев:1)
(Загрузок:260)


SnagIt_9.0.1.122_Rus
(Комментариев:1)
(Загрузок:350)


CleanCenter v.2.4.1.1
(Комментариев:1)
(Загрузок:1)


Arachnophilia 5.4.2382
(Комментариев:0)
(Загрузок:270)


GameGain 2 2.10
(Комментариев:0)
(Загрузок:281)


CDBurnerXP 4.2.6
(Комментариев:1)
(Загрузок:352)


EVEREST Ultimate Edition 5.30 Build 1900
(Комментариев:1)
(Загрузок:291)


Поиск по Сайту

Друзья сайта
  • Destination.ucoz.net

  • N.S.P. WMmail.ru - сервис почтовых рассылок
    hackersoft - ჰაკერული პროგრამები Этот сайт защищен «Site Guard»
         Обмен Ссылками

    Статистика
    Rambler's Top100
    CY and PR
    webgari.com Рейтинг сайтов
    Besucherzahler russian mail order brides
    счетчик посещений

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Зарег. на сайте
    Всего: 25126
    Новых за месяц: 7
    Новых за неделю: 1
    Новых вчера: 0
    Новых сегодня: 0
    Из них
    Администраторов: 1
    Модераторов: 2
    Проверенных: 1
    Обычных юзеров: 25122

    Сегодня нас посетили :

    Soft4PC.3dn.ru © 2024
                                                     Все материалы размещенные на сайте пренадлежат их владельцам и предоставляются исключительно в ознакомительных целях. 
                                                    Администрация этого сайта не несет ответственность за использование материалов,ссылок и информации находящихся на этом сайте. 
                                                           !!! Все авторские права принадлежат только настоящим владельцам всех файлов которые публикуются на этом сайте!!!