OpenGL бази

Ние вече заяви, че почти винаги в три игри в едно втори пакет е напълно изграден няколко пъти. С други думи, всеки път, когато дадена програма е свободен от обработката на системни съобщения, трябва да извикате функция, нека да го наречем DrawFrame (), която всеки път ще покаже всички обекти в рамката.

След нашия пример за изграждане на приложение, то е ясно, че тази функция трябва да се извика от функцията OnIdle ().


Какво общо действие трябва да се извършва функция DrawFrame ()? Първо, трябва да се изчисти буфера невидим (Обратно буфер), за да донесат всички обекти в буфера и да направи буфер невидим - видим.

За пречистване се използва функция glClear (). Тази функция изчиства няколко вида буфери, ние се интересуват от този, който съхранява цветно изображение (цвят буфер). Затова функция glClear ще се нарича с параметър GL_COLOR_BUFFER_BIT.

DrawFrame Изпълнение () функция (добавете OpenGL.cpp):

DrawObjects функция (), докато напусне празно тяло, когато я използваме в нашите примери за сключване на графични примитиви.

графични примитиви

Съществуват няколко вида на примитиви: точки, линейни сегменти и многоъгълници.

Функциите, които отговарят за оттеглянето на примитиви, които трябва да се уточни какво ще се появи нещо като примитиви, като посочва в съответния режим. Например, за изходни точки GL_POINTS режим е в положение, за да извеждате линии - GL_LINES, както и за триъгълници - GL_TRIANGLES. В допълнение, има специални режими, които се използват за удобство и оптимизация. Например, GL_QUADS - показва четири връх примитиви, GL_TRIANGLE_STRIP - изход верига на триъгълници, които всеки следващ триъгълник има общ ръб с предишния, и т.н.

Всички лица, описани върхове.

Данните за връх, за да извеждате примитиви. Тези данни могат да бъдат връхниклони координати, цветен връх, нормално, и текстура координати на линия знамена.

Изходни примитиви последователност на функции връх

Това е най-старият метод на изходни възли изпълняват в OpenGL.

Примитивни определя отделните функции за всеки връх на функционалната скоби glBegin () и glEnd ().

Лечение подходящо за типа на примитивна е настроен на glBegin () функция. Например:

Това означава, че ние ще донесе триъгълници, пита всеки един от тях три върхове.

Функции glVertex * - определят координатите на върха, който от своя страна описват формата на геометрични обект. При изпълнение на тази функция, другите данни на върховете, като нормалата и цвета се вземат от установените по-рано "текущи" ценности.

Пример. Задаването на три (3) видове координати GLfloat (е) за горната част:

Тази функция показва прост многоъгълник - триъгълник, всеки връх е дадено glVertex3f (). Още веднъж, имайте предвид, че всички glVertex * отчети са между glBegin () и glEnd ().

Текущите стойности на някои от данните за върховете могат да задават следните функции:

glColor * - поставя началото RGBA цвят с леки условия.

glNormal * - задава нормален вектор, съответстващ на отделните върхове.

glTexCoord * - задава настоящия текстура координати за върха.

Текущите стойности на върха изложени на glVertex * повикване.

Тази функция прави триъгълник с две червени и едно синьо върховете.

Изходни примитиви, използвайки масиви

Този метод изпраща погрешни сметки веднага се опаковат на данни на върховете. Това означава, че параметрите на върховете, като координати, нормали и цветове върховете са посочени не отделят OpenGL функции за всеки връх, както и отделните масиви на координати, нормали и така нататък. Тази техника обикновено е по-бързо и по-удобно, когато се работи с обекти с голям брой върхове ,

OpenGL посочване на масиви се провежда на отделните функции, щифта също се провежда отделна функция.

Например, отново се получи една и съща триъгълника.

Имаме множество върхове:
Той е последователно разположени по трите координати за трите върхове.

Монтаж на масива за координатите на върховете настъпва функция glVertexPointer ():

Първият параметър в тази функция се казва колко отива координира на върха, възможни стойности - 2,3,4. Вторият параметър е отговорен за координиране на типа. Третият параметър е стъпка в байтове между данните координати за всеки връх. 0 в този случай означава, че координатите са близо един до друг. Четвъртият вариант - в действителност е указател към масив от координати.

В допълнение, ние поставяме указател към масив, трябва да зададете състоянието за OpenGL, което означава, че ние ще използваме указател към масив от върхове. Това състояние се задава функция glEnableClientState ().

Също така, можете да сложите масиви от указатели към други данни на върховете. И не забравяйте да включите съответния щат. Ако не се нуждаете за някакъв обект, някои от снимачната площадка на масиви, можете просто да го изключите чрез премахване на държавната функция glDisableClientState ().

Активирано състояние остава, толкова дълго, колкото можете да го изключите. Това означава, че ако постоянно върви Показани множество обекти, съдържащи техните собствени, например, връх масиви, само една смяна на състоянието на всички обекти, в предната част на оттеглянето на първия обект.

Ако искаме предметите се показват с използване на координатите на масива, но да има, например, общ цвят за всички върхове, а след това не е необходимо да се изгради масив със същия цвят стойности. Използвайте функцията вече е известно, вие glColor * ().

Нека сега разгледаме една от функциите, които отговарят за оттеглянето на примитивното с открити масиви.

Показва според примитиви в информационните масиви.
режим - лечение подходящо за типа на примитивни,
на първо място - на върха на индекса, с които ние ще донесе на обект
брои - броят на върховете.

В нашия случай - да триъгълник с помощта на 3 върхове.

Моля, имайте предвид, че тази функция трябва да се извика един чифт glBegin () и glEnd ().

индексни примитиви

По-късно, в OpenGL Версия 1.1 въведен алтернативен метод за показване. Този метод позволява да се работи с индекс посочва геометрични обекти за извеждане погрешна преценка на адаптера.

Какво означава това? Почти всички многоъгълни модели имат триъгълници с общи върхове. И обикновено, като голям брой върхове. Ясно е, че съхранява и използва копия на същите върхове разточително.

Помислете за един прост пример.

В момента има три съседни триъгълници с общи върхове. За първи и втори триъгълник - общи върхове 1 и 2, второ и трето - 2.3. Vertex 2 е обща за всички триъгълници.

Ако ние не се използва методът на определяне на индекса на обекта, тогава ние ще трябва да поиска оттеглянето на тези триъгълници 9-и върхове (три за всеки триъгълник).

Въпреки това, вие може да бъде само 5 върха, използвайки масиви от координати или други данни на върховете, и да се покаже триъгълници сочещи кодове, съответстващи място в масиви от данни на върховете.

това е
за първите индекси триъгълник са - 0,1,2
за второто - 1,3,2
за трети - 2,3,4

Помислете за една от функциите за работа с индекси.

Тази функция се използва в glBegin двойки () и glEnd (). Всъщност това не искаме индекси. А масиви с данни за себе си върхове, инсталирани преди това.


Този пример показва три цвят триъгълник.

Въпреки това, индексите могат да бъдат създадени също масив и на изхода един обект се обадите единствен glBegin () и glEnd ().

Можете да направите тази функция:

тук
режим - както винаги излага режим тип полигон,
брои - броят на индексите да се вземе от масив,
тип - типа на елементи в индекса на масив може да стойности: GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT или GL_UNSIGNED_INT. Обикновено индексите използвани неподписан кратко.
индекси - указател към масив от индекси. Имайте предвид, че този индекс може да се тълкува като указател към елемента, от които обектът ще бъде изчислението. Това означава, че можете да поставите курсора на мишката върху който и да е елемент от масива.

За по-голяма яснота, нов пример:

Пример показва същите триъгълници, защото цвета не е представена, тогава всички триъгълници са бели.