ПредишенСледващото

Здравейте, скъпи мой detishechki 8-)

В предишния урок разгледахме как се работи с текстури в Direct3D. Днес ние смятаме тази възможност като мулти-текстуриране. Какво е това? Multitexturing - суперпозиция на няколко текстури на многоъгълник. Най-често този метод се използва за симулиране на осветление. Това означава, че предварително изчислява степента на осветяване на една или друга част от многоъгълно модел, и след това се прави карта на излъчване (светлина карта), който се прилага "над" основна структура на обекта, създавайки по този начин ефекта на нееднороден повърхност осветление. Тази техника е много по-бързо, отколкото изчисляването на осветлението "в движение", така че той се използва широко в игри. Има и много приложения multitexture, например, за да се симулира някои от ефектите. В този урок ще разгледаме симулация покритие полигон а. Този пример се основава на предишния урок, така че не се чете, аз препоръчвам да го прочетете: Direct3D: текстуриране.

Е, да вървим!

Да започнем с това, че бях малко променен форматът на нашия връх, като към параметър, който определя цвета им. По принцип тази операция не е необходима, но тя осигурява широко поле за експерименти и да постигнете красиви ефекти. С него можем да променим цвета на нашата "прожектор" (светлина). Освен това, крайният цвят се получава чрез интерполиране на цвят компонент на всеки от върховете. По подразбиране (ако цветът не е уточнено), използвайте бял цвят. Сега нашата формат връх е както следва:

За втори текстурата може да използва техните текстурни координати, за това, че е необходимо да се добавят към описанието на върховете на няколко координати ТУ и телевизия, както и промяна D3DFVF_TEX1 флага на D3DFVF_TEX2. Вторият набор от текстурните координати могат да бъдат използвани, например за анимация движи източник на светлина. За тази първа група остава непроменена, а вторият набор варира. Разбира се, можете да използвате повече от 2 текстури. Direct3D позволява използването на до 8 едновременни текстури.

След това трябва да се зареди втори текстура. Подробности действието описано по-горе, така че няма да се спирам на това му внимание.

ако (Неуспешно (D3DXCreateTextureFromFile (g_pd3dDevice "Spotlight.bmp", g_pSpotLight)))
върнете невярна;

нива на текстурата (етапи на текстурата) се използват за изпълнение на мулти-текстуриране в Direct3D. Всяка от максимум осем текстури могат да бъдат поставени в една от тези нива. Това се прави с помощта на SetTexture функции, както следва:

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

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

В първия ред си поставихме снимачната площадка на текстурните координати, които искаме да използваме за съответната текстура (текстурата се определя от броя на ниво - първия параметър на функцията). В нашия пример, ние използваме набор от координати, така D3DTSS_TEXCOORDINDEX на 0. Във втория ред ние зададете режим на филтриране на текстурите. Инсталирах билинеарно филтриране.

Ние правим едно и също нещо за втори текстура:

Помислете за останалите текстурни условия:

D3DTSS_COLORARG1 (2) - това състояние се определя първата (втората) аргумент за ниво цвят текстура може да отнеме от следните стойности:
- D3DTA_CURRENT - аргумент текстура - състояние, което показва предишното ниво на текстура. Ако това е първото ниво на текстура (0), а след това този аргумент е равносилно D3DTA_DIFFUSE.
- D3DTA_DIFFUSE - аргумент текстура - цвят, получен чрез интерполиране цветовете на върховете използване Gouraud засенчване. Ако върховете не се съдържат цвят компонент, избран бял (0xFFFFFF) цвят.
- D3DTA_TEXTURE - аргумент текстура - цвят текстура за това ниво текстура.

D3DTSS_ALPHAARG1 (2) - определя първа (втори) аргумент за ниво текстура алфа може да същите значения както D3DTSS_COLORARG1 (2). Стойност по подразбиране - D3DTA_TEXTURE. Ако не се инсталира дадено ниво на текстура, използвани D3DTA_DIFFUSE.

D3DTSS_COLOROP - "това състояние се установява как текстурите ще бъде смесен цвят. Може да предприеме следните стойности:
- D3DTOP_DISABLE - деактивира изхода текстурата на сегашното ниво (етап) и за всички по-високи нива. За да забраните текстура, задайте стойност за първи текстура слой.
- D3DTOP_SELECTARG1 (2) - първи (втори) цвят или алфа аргумент ще се използва за продукция.
- D3DTOP_MODULATE - умножава цветни компоненти на ARG1 и ARG2
- D3DTOP_MODULATE2X (4Х) - умножава цветови компоненти и измествания резултат на 1 (2) малко наляво, което води до резултат умножение с 2 (4), т.е. изображението става по-светъл.
- D3DTOP_ADD - добавя цветови компоненти ARG1 и ARG2
- D3DTOP_SUBTRACT - полученият цвят се получава чрез изваждане на второто от първия аргумент ARG2 ARG1.

По подразбиране D3DTSS_COLOROP за първи текстура слой има D3DTOP_MODULATE стойност, както и за всички други D3DTOP_DISABLE.

В допълнение към тези има няколко други държави, можете да прочетете за тях в раздел DirectX8 SDK Помощ D3DTEXTURESTAGESTATETYPE на

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

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

Direct3D мулти-текстуриране

Свързани статии

Подкрепете проекта - споделете линка, благодаря!