Работа с OpenGL използване пренасищане

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

За щастие, има специална библиотека мулти-платформа, която ви позволява да се решат проблемите, описани по-горе. А името на тази библиотека - GLUT.

На първо място, трябва да се научите най-основните - е създаването на прозорец, в който ще бъде възможно да се направи с помощта на OpenGL. Минимална програма, която създава прозорец и нещо обръща се състои от следните етапи:

Настройка на параметрите прозорец.

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

По този начин, ние считаме всички 5 точки по-подробно:

1. GLUT инициализация се извършва с:

невалидни glutInit (междинно * argcp, овъгляване ** argv);

Първият параметър е указател на броя на аргументите на командния ред, а вторият - указател към масив от аргументи. Обикновено, тези стойности са взети от основните характеристики на програмата: Int основна (междинно argc, знак * argv []).

2. Настройте параметрите на прозореца съдържа няколко етапа. На първо място, трябва да зададете размера на прозореца:

нищожен glutInitWindowSize (ширина вътр, височина вътр);

първо ширината на параметъра - ширината на прозореца в пиксели, втората височина - височината на прозореца в пиксели. Аз също внимание, че ако пропуснете тази команда, пренасищане ще определи размера на прозореца по подразбиране, обикновено 300x300.

След това можете да определите позицията на прозореца се създава по отношение на горния ляв ъгъл на екрана. Това се прави с:

невалидни glutInitWindowPosition (междинно съединение X, Int у);

Трябва също така да зададете режим на витрина. Т.е. зададетепрозорец параметри, като: цвят модел се използва, броят на различни буфери и т.н. За да направите това, има команда GLUT:

невалидни glutInitDisplayMode (режим неподписан Int);

Екипът има само един параметър, който може да бъде представен чрез една от следните константи, или комбинация от тези константи използвайки побитови OR.

Отворете прозореца на цял екран. В същото време отстранява от заглавието на прозореца на екрана и останалите части, с изключение на съдържанието на прозореца, т.е. Вашата кандидатура става на цял екран.

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

невалидни glutSetCursor (междинно курсора);

параметър курсора може да приеме една от следните стойности: GLUT_CURSOR_RIGHT_ARROW, GLUT_CURSOR_LEFT_ARROW, GLUT_CURSOR_INFO, GLUT_CURSOR_DESTROY, GLUT_CURSOR_HELP, GLUT_CURSOR_CYCLE, GLUT_CURSOR_SPRAY, GLUT_CURSOR_WAIT, GLUT_CURSOR_TEXT, GLUT_CURSOR_CROSSHAIR, GLUT_CURSOR_UP_DOWN, GLUT_CURSOR_LEFT_RIGHT, GLUT_CURSOR_TOP_SIDE, GLUT_CURSOR_BOTTOM_SIDE, GLUT_CURSOR_LEFT_SIDE, GLUT_CURSOR_RIGHT_SIDE, GLUT_CURSOR_TOP_LEFT_CORNER, GLUT_CURSOR_TOP_RIGHT_CORNER, GLUT_CURSOR_BOTTOM_RIGHT_CORNER, GLUT_CURSOR_BOTTOM_LEFT_CORNER, GLUT_CURSOR_INHERIT , GLUT_CURSOR_NONE, GLUT_CURSOR_FULL_CROSSHAIR.

Има специален режим на GLUT, което ви позволява да използвате режима на игра за OpenGL програма, т.е. когато вашата кандидатура заема целия екран.

За да направите това, GLUT, има специални команди за контрол на този режим.

нищожен glutGameModeString (Конст Чар * низ);

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

Например: glutGameModeString ( "640x480: 16 '72"); - Означава да изберете разделителна способност на екрана от 640 х 480 пиксела, с дълбочина на цвета на 16 бита и честота на опресняване на 72 херца.

За да преминете в режим на режим на игра трябва да се обадите на функцията:

И за да се измъкнем от режим на режим на игра трябва да се обадите на функцията:

Е, за да стане по-ясен тук е пример за използването на този режим:

Пълен изходния код на програмата може да бъде взето тук: game_mode.zip

Отбелязвам също така, че можете да извикате функция glutGameModeString по следния начин:

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

В тази статия ще обсъдим как взаимодействието на вашия OpenGL програма и GLUT.

Първата по-голямо значение (без които тя не може да се направи във всяка програма) е звеното, отговорно за прекрояване на съдържанието на прозорец:

анулира glutDisplayFunc (нищожен (* функция) (свободен));

Тази функция определя функцията във вашата програма, която ще отговаря за прекрояване на прозореца. Това е да се гарантира, че когато системата се нуждае, за да прехвърлите прозореца си (например, когато сте навън на сгънато състояние разгъната кутия), тя ще доведе до съответната функция във вашата програма, която е отговорна за прекрояване на съдържанието на прозореца. Също така, функцията за пречертаване на прозорец се нарича, когато първият път, когато стартирате приложението си. Бих искала да отбележа, че ако създадете прозорец на GLUT, тогава е необходимо да определи функцията на пречертаване на Прозореца! От друга страна, вие сами може да доведе до системата, за да прехвърлите на прозореца, е необходимо например, когато се променя състоянието на обекти или променят външния си вид, ще трябва да преначертае съдържанието на прозореца, за да се покаже на промените. Следователно, не е функция на специална GLUT glutPostRedisplay (). който кара системата, за да прехвърлите на текущия прозорец. Ако изведнъж искате да прехвърлите на текущия прозорец не е, тъй като някои други, следните функции са предвидени: glutPostWindowRedisplay (инт победа). който очертава нови съдържанието на победата на прозореца.

нищожен glutReshapeFunc (нищожен (* функция) (инт ширина, височина вътр));

Както вече споменахме, тази функция задава друга функция във вашата програма, която ще отговаря за преоразмеряване на прозореца. След като през прозореца се е променило размер, е необходимо да се възстанови на изхода на графична информация вече е в нов прозорец и в другите измерения. За да направите това във функцията (т.е. функция във вашата програма) премина 2 параметри ширина и височина. т.е. ширина и височина на модифицираното прозореца. Обикновено в началото на функцията, функция glViewport на. като: glViewport (0, 0, широчина, височина). за възстановяване на изходното изображение е вече в кутия с други измерения.

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

анулира glutVisibilityFunc (нищожен (* функция) (междинно състояние));

Единственият параметър, който се предава на нарича система функция: състояние. Чрез сравняване на този параметър с константите и GLUT_NOT_VISIBLE GLUT_VISIBLE може да се определи какво се е случило до прозореца, или то е станало невидимо или обратното заместник - се вижда.

анулира glutIdleFunc (нищожен (* функция) (свободен));

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

Е, последната функция, която смятаме, че:

анулира glutTimerFunc (неподписан INT милисекунди, нищожен (* функция) (междинно съединение стойност), Int стойност);

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

На следващо място, аз давам за пример една малка програма, която чертае въртящ линия. Изходният код може да бъде взето от тук и: animation.zip

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

[Възникна грешка при обработката на настоящата директива]

[Възникна грешка при обработката на настоящата директива]