[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Графика / Direct x /

Использование текстур

Привет всеm. После достаточно долгого перерыва я продолжаю серию уроков посвященных аспектов программирования DirectX8. Данный урок будет посвящен использованию в Direct3D8 текстур, пока только самое начало, как загрузить и как потом отрисовать полигон с наложенной на него текстурой. В последствии будут и более продвинутые уроки по работе с текстурами.

Я думаю, что можно уже начать. Думаю, все знают, для чего необходимы текстуры, так что перейдем непосредственно к той части, которая даст нам необходимые сведения для работы с текстурами в Direct3D8.

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

как вы видите, у нас появились координаты текстуры ( tu и tv ) и в описании мы указываем, что у нас имеются координаты текстуры ( D3DFVF_TEX1 ), причем для первой текстуры (о более интересном их использовании будет рассказано в последующих уроках, пока же ограничимся одной текстурой).

Далее для дальнейшего использования мы будем использовать интерфейс для работы с текстурами Direct3D8 (точнее нам необходима переменная, которая будет представлять текстуру):


LPDIRECT3DTEXTURE8 textura001;

Следующим шагом нам необходимо задать все параметры для вершин, такие как положение, нормаль, и самое главное, координаты текстуры (создадим простой полигон):

обратите внимание на последние пару вводимых данных - это и есть координаты текстур. Изменяя их можно добиться весьма интересных результатов (например, растяжение какой-то конкретной части текстуры, движение текстуры - например, облаков или воды, использование одной и той же текстуры для разных полигонов, причем так, что эти полигоны будут окрашены по-разному благодаря различаю координат текстуры). В данном моменте необходимо помнить, что несмотря на размер текстуры в пикселях, любые текстуры будут отображаться также, так как координаты текстуры задаются в относительных величинах от 0 до 1 (0 - соответствует 0 пикселю, 1 - последней точке на текстуре), но никто не запрещает вам задавать там величину больше 1 - тогда получится, что вы накладываете текстуры и тайлите их (по английски - tiling), что я собственно и сделал, использовав координаты 0.0f и 2.0f.

После того как мы задали координаты текстур (можно в принципе и до, это не важно), нам нужно загрузить текстуру из файла с картинкой. Делается это следующим образом:

данный фрагмент использует функцию D3DXCreateTextureFromFile() для загрузки изображений из файлов, в качестве файлов можно задавать почти любой популярный формат (бмп, жпег, tga, tiff и т.д.). Важно только помнить - что лучше всего использовать квадратные текстуры со стороной кратной степени двойки (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 и т.д.).

После загрузки мы уже можем использовать данную текстуру для рендеринга нашей сцены. Посмотрим, как это делается:

--- сначала устанавливаем текстуру на 0 текстурный уровень, всего их может быть 8, для чего они нужны будет рассмотрено в последующих уроках.
--- устанавливает текстурные состояния и текстурные операции, более подробно об этом в следующих уроках
--- и затем рендерим

вот и все. Теперь вы должны получить картинку, похожую на вот эту:

Да, чуть не забыл. После того как вы использовали текстур, информацию о ней, и занимаемую ею память, нужно уничтожить освободить (т.е. нужно уничтожить текстуру). Делается это так:


_RELEASE_ (textura001);

Вот теперь действительно все... :)




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Графика / Direct x /

DirectX
17-05-2010   

Это - библиотека диспетчера Microsoft DirectX, чтобы оптимизировать графы и звуковые представления для Windows... подробнее

Кол. просмотров: общее - 3907 сегодня - 2

Особенности программирования DirectX графики
07-02-2009   

Особенности программирования DirectX графики для видео карт nVidia (по материалам nVidia)... подробнее

Кол. просмотров: общее - 4357 сегодня - 2

DirectX 8.0 FAQ
26-01-2009   
Кол. просмотров: общее - 5073 сегодня - 2

Пишем DirectX-движок
25-01-2009   

Темой этого урока я решил сделать написание т. н. движка. Полагая, что всегда существует определённый контингент людей, только начавших изучать мультимедийные и игровые технологии, и плавающие в загадочных понятиях, объясню, что такое движок и на каком бензине он работает... подробнее

Кол. просмотров: общее - 4587 сегодня - 2

Что может наша видеокарта, что можем сделать мы и как это узнать?
15-01-2009   

По прошествии некоторого времени после празднования Нового Года и всего, что с ним связано, предлагаю вашему вниманию новый урок. Посвящен он будет извлечению информации о возможностях вашей видео карты... подробнее

Кол. просмотров: общее - 4258 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects