ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX

Электрик сделает подключение электрики Новокузнецк и пригороде. Русский электрик. | Выполним усиление металлоконструкции Кемерово и пригороде. Металлоконструкции на заказ.

Цвет и текстуры - часть 14


— Я знаю, сэр, пожалуйста, вызовите меня!

— Да?

— Сэр, нужно использовать разные покрытия для разных направлений! Я подумал точно так же, создал отдельное покрытие для каждого вектора направления и попробовал снова. Опять ничего не вышло. Я оказался в полном замешательстве. Пришлось вступать в переписку с разработчиками механизма визуализации и выяснять, что же было сделано неверно. Оказалось, что сведения о наложенных текстурах сохраняются для вершин, а не для граней. Таким образом, каждый раз, когда я полагал, будто накладываю текстуру на грань, на самом деле механизм визуализации накладывал ее на вершины этой грани. Каждая вершина получала информацию о текстуре, и когда в дальнейшем я пытался наложить другую текстуру на ту же самую вершину (хотя и принадлежащую смежной грани!), она перекрывала старую текстуру и обезображивала предыдущую грань. В результате все правильно происходило лишь для грани с последней наложенной текстурой, а все остальные грани, смежные с ней, оказывались испорченными.

Выход заключается в том, чтобы создать куб из шести граней, не имеющих общих вершин. Затем мы накладываем на эти грани текстуры и получаем нужный результат, как нетрудно убедиться, выполнив в приложении Color команду Edit ¦ Insert Picture Cube. Ниже приведен исходный текст функции, создающей куб с текстурами:

Параметры покрытия

/b>

void CMainFrame::OnEditPiccube()

{

// Создать куб с ребром в 2 единицы и раздельными // гранями double s = 2;

C3dShape* pShape = new C3dShape;

D3DVECTOR vlist[] = (

(-1.0, -1.0, -1.0},

( 1.0, -1.0, -1.0},

{ 1.0, -1.0, 1.0},

{-1.0, -1.0, 1.0), // Нижняя грань

(-1.0, 1.0, -1.0),

{ 1.0, 1.0, -1.0),

{ 1.0, 1.0, 1.0),

(-1.0, 1.0, 1.0), // Верхняя грань

(-1.0, -1.0, -1.0),

(-1.0, 1.0, -1.0),

(-1.0, 1.0, 1.0),

(-1.0, -1.0, 1.0), // Левая грань

{ 1.0, -1.0, -1.0),

{ 1.0, 1.0, -1.0),

( 1.0, 1.0, 1.0),

{ 1.0, -1.0, 1.0), // Правая грань

(-1.0, -1.0, -1.0),

(-1.0, 1.0, -1.0),

{ 1.0, 1.0, -1.0),

{ 1.0, -1.0, -1.0), // Ближняя грань




Начало  Назад  Вперед



Книжный магазин