Шаг 21 - Что такое mesh?

Ну что ж, теперь самое время заняться "магией" :) Берем последний проект и посмотрим, что из него мы можем выжать.

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

p_d3d_Device->SetMaterial( &g_pMeshMaterials[0] );
p_d3d_Device->SetTexture( 0, g_pMeshTextures[0] );
// Рисуем первый меш
p_d3dx_mesh->DrawSubset( 0 );

Компилируем и запускаем. Здесь мы рисуем первый меш (меш является одной гранью) и присваиваем к нему первый материал и первую текстуру находящиеся в файле Х. В 3DS MAX-е, как Вы помните, мы создали куб с двумя текстурами и двумя материалами (один материал мы назначили объекту сами, а воторой не меняли, но он был). Здесь же мы можем присвоить любую текстуру или материал к любому мешу. Первый материал нам нужен обязательно, т.к. поверх него накладывается текстура. Добавим второй меш:

p_d3d_Device->SetTexture( 0, g_pMeshTextures[1] );
// Рисуем второй меш
p_d3dx_mesh->DrawSubset( 1 );

Снова компилируем и запускаем. Видим вторую грань куба или второй меш с присвоенной второй текстурой поверх первого материала. Добавим третий меш:

p_d3d_Device->SetTexture( 0, g_pMeshTextures[2] );
// Рисуем третий меш
p_d3dx_mesh->DrawSubset( 2 );

Здесь меш оказался тремя гранями (две боковые и одна снизу) и присвоил третью текстуру, которая по умолчанию была заполнена серым цветом. И нарисуем последний меш:

p_d3d_Device->SetMaterial( &g_pMeshMaterials[3] );
// Рисуем четвертый меш
p_d3dx_mesh->DrawSubset( 3 );

Так как здесь мы использовали материал, то он и будет отображаться. Но нам никто не мешает присвоить сюда текстуру.

Вернитесь обратно к первому материалу и присвойте mtrl1 или mtrl2 или mtrl3:

p_d3d_Device->SetMaterial( &mtrl1 );

Ну как? Мы на лету можем изменять цвета текстур, материалов, менять их местами, используя только один 3D объект. Т.е. мы можем сделать разнообразие при минимуме затратах памяти :) И более того, мы можем менять местами текстуры между объектами. Но лучше использовать память по другому, отдельно загрузить 3D объекты и отдельно загрузить текстуры, а потом их присваивать к заранее размеченным на объекте сторонам. Также Вы можете, скажем, не отображать одну сторону куба, чтобы сделать некое углубление в объекте, или показать, из чего он внутри состоит. Побольше фантазии, вот здесь она точно нужна Вам :)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Хавов Евгений Валерьевич - 2.09.2002