Създаване на текстура в RAM
Texture изображения често се съхраняват във файлове. За да се ускори изчисление в OpenGL размери текстура с изображения трябва да се дели на степени на 2, т.е. п равно на 2 х 2 м. където п и m са цели числа. За да се покаже подобна структура на обекта, което трябва да изпълните няколко стъпки:
1) Качване текстура изображение паметта на графичен файл с.
2) Създаване на идентификатор (име) текстура.
3) Направете текстура идентификатор активен.
4) Създаване на текстура памет.
5) Задайте свойствата на текстурата.
6) Определете структурата свойства на взаимодействие с обекта.
7) Позволете картографиране текстури призовават glEnable (GL_TEXTURE_2D).
8) Задаване на координатите на текстурата на обекта.
9) Ако вече не е необходима текстурата, да се забрани показването им разговор glDisable (GL_TEXTURE_2D).
Помислете за най-простия случай на използване на текстура - текстура върху плоска многоъгълник. За да се покаже многобройните текстури, предполагаме, че е необходимо да се извърши картиране на две различни текстури на три видими лицата на куба (една текстура върху предната част на наблюдател на лицето на куб, две копия на друга структура - горните и страничните повърхности).
7.1 Програмата образувано две глобални променливи за всяка текстура:
неподписан Int falls_tex;
неподписан Int sawdust_tex;
Променливи falls_tex и sawdust_tex документи за самоличност са текстурите и falls_image и sawdust_image предназначени за съхраняване на текстурните изображения от файлове и falls_filename имена sawdust_filename. Качване на изображения към паметта се извършва в текстури инициализация функция textures_init ():
falls_image = auxDIBImageLoad (falls_filename);
sawdust_image = auxDIBImageLoad (sawdust_filename);
След изтеглянето на изображенията, които трябва да се създаде идентификатори текстури. Идентификаторите - са цели числа, които отличават текстурата на всеки друг. Ако текстурата е само един, идентификационния номер не се изисква за това. За да създадете идентификатори е функция glGenTextures ():
невалидни glGenTextures (междинно съединение N, неподписан INT * текстури);
п параметър определя броя на идентификатори създават текстури, параметър текстури е указател към масив, в която да се съхранява тези идентификатори. Размерът на тази масив не трябва да бъде по-малко от п. Например, за да се създаде десет текстури идентификатори може да бъде предизвикателство:
неподписан INT идентификатори [10];
glGenTextures (10, IDS);
Масивът е удобно да се съхранява идентификаторите на подобни текстури, например, различни видове трева или листа в симулирани ландшафта. 7.1 текстури Програмните документи за самоличност се съхраняват в отделни променливи, така инициализация на текстури създава две различни идентификатори:
glGenTextures (1 falls_tex);
glGenTextures (1 sawdust_tex);
След създаването текстура идентификатори както от своя страна са избрани и активни свойства са определени за тях. Избор на активен структурата се изпълнява функция glBindTexture ():
анулира glBindTexture (прицелна Glenum, неподписан Int текстура);
мишена параметър определя типа на текстура - GL_TEXTURE_2D (двумерен) или GL_TEXTURE_1D (едномерен). В това, което следва, ние разглеждаме само двуизмерен текстура. параметър Texture е идентификатор на текстурата, които е необходимо да се активен. Например, за да се направи активна текстура falls_tex, че е необходимо да извикате функция по следния начин:
glBindTexture (GL_TEXTURE_2D, falls_tex);
Въпреки текстура falls_tex на изображението вече заредени от файл в променлива от тип falls_image AUX_RGBImageRec, но текстурата е по-установени. В допълнение към байт изображение от текстурата е набор от качества, които влияят на текстура върху обекта. Например, това ниво на подробност, методът на мащабиране и текстура свързване с обект. Тези свойства са определени при създаването на текстурата.
С ниво на детайлност, можете да настроите няколко изображения за текстура, която ви позволява да се прилагат по-точно текстурата на обекти с размерите на двуизмерни проекции, които са по-малки от размера на текстурата. Нулевата нивото на детайлност съответства на оригиналното изображение размер 2 п х2 м. първо ниво - 2 п-1 х2 m-1. к тата ниво - 2 п-к х2 т-к. Броят на възможните нива е равна минути (п, т).
За създаване на текстура използва функция или gluBuild2DMipmaps () glTexImage2D ():
анулира glTexImage2D (целева GLenum, ниво вътр, Int компоненти,
вътр ширина, височина вътр, вътр граница, GLenum формат,
тип GLenum, CONST невалидни * пиксела);
INT gluBuild2DMipmaps (мишена GLenum, Int компоненти, ширина междинно съединение,
вътр височина, GLenum формат, тип GLenum, Конст невалидни данни *);
Първата функция създава структура на определено ниво на детайлност (ниво) и работи само с изображения, чиито размери са кратни на правомощията на 2. gluBuild2DMipmaps функцията () по-разнообразни. Той генерира всички нива Texture детайлите и не налагат ограничения върху размерите на изображението. Тази функция везни самото изображение по желание, но резултатите може да не са с много добро качество. Преди първата покана за някоя от функциите, необходими за създаване на текстура се изисква да предизвика glPixelStorei (), която определя начина на съхраняване на изображения в паметта на редове (колко байта подравнен ред).
Помислете за назначаване glTexImage2D настройките на функцията ():
мишена - размера на текстурата (двумерен текстура GL_TEXTURE_2D);
ниво - нивото на детайлност. За първоначалното ниво на изображението = 0;
компоненти - количеството на цвят компонент в изображението (изображение в компоненти формат RGB = 3);
ширина и височина - ширина и височина на изображението;
граница - широчина на границата, ако границата не е налице, тогава границата = 0;
формат - графичен формат (обикновено GL_RGB);
тип - типа данни на изображението пиксела (обикновено GL_UNSIGNED_BYTE);
пиксела - масив от пиксели в индекса на изображението.
Например, създаването на текстура може да се извърши както следва:
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
glTexImage2D (GL_TEXTURE_2D, 0, 3,
0, GL_RGB, GL_UNSIGNED_BYTE, falls_image-> данни);
Подобен резултат може да се получи използвайки gluBuild2DMipmaps () функция:
gluBuild2DMipmaps (GL_TEXTURE_2D, 3,
GL_RGB, GL_UNSIGNED_BYTE, falls_image-> данни);
След създаване на текстура, можете да зададете своите свойства. За това е функция на:
невалидни glTexParameter [ако] (прицелна GLenum, GLenum pname [ср, поплавък] параметри)
Първият параметър за насочване на двумерен текстура е GL_TEXTURE_2D. Вторият параметър определя променлива консистенция pname имота. Новата стойност на параметъра се предава на Парам.
Например, ако структурата създаден чрез glTexImage2D (), след това текстури за подбор правило за обекти с размери, различни от размерите на текстурата, повикването могат да бъдат настроени:
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Тези предизвикателства показват, че увеличават или намаляват текстура използва GL_NEAREST алгоритъм. Според това правило, тъй като цвета на пиксела на обекта, към който се прилага текстурата, цветът се избира най-близкия Texel. Вместо това, можете да укажете GL_NEAREST GL_LINEAR, тогава цвета на пиксела ще се изчислява като средно аритметично от четирите най-близките texels. В OpenGL, има четири правила за изчисляване на цвета на пикселите от комбинация от texels различни нива на детайлност.
Освен текстура свойства, могат да бъдат определени в OpenGL текстура свойства на взаимодействие с обекта на. За RGB цветен режим са на разположение два режима на цветови комбинации на пиксел и Texel. В режим по подразбиране (GL_MODULATE) се взема предвид и цвета на пиксела, както и цвета на Texel. Полученият цвят се получава чрез умножаване на съответните компоненти на пиксел и Texel. Например, ако цветът на Texel (.. Rt Gt Bt), и цвета обект на пиксел, на които се прилага текстура, - (.. Rp Gp Вр), полученият цвят (Rt * Rp Gt * Gp Bt * Вр ..). Ако обектът е съставен в черно (0, 0, 0), текстура върху него няма да се вижда. Във втория режим на взаимодействие (GL_DECAL) Цвят на обекта не се счита, и полученият цвят винаги ще бъде цвета на Texel. Тези режими са определени, както следва:
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
След текстурата създаден и набор от функции, можете да използвате тези текстури за съставяне примитиви. Texture картиране се извършва чрез свързване на върховете на примитиви и Texel координати. 7.1 Програмата се извършва в (функцията на дисплея). В трите си площади, изготвен с картографирането на текстура. glTexCoord2d () функция сравнява координатите на координатите на Texel на примитивни върхове.