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


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


BOOL C3dShape::SetColor(double r, double g, double b)

{

ASSERT(m_pIMeshBld) ;

m_hr = m_pIMeshBld-»SetColorRGB(r, g, b) ;

return SUCCEEDED(m hr) ;

Как видите, ничего особенного здесь не происходит. Интерфейс построения сеток содержит функцию SetColorRGB, которая и выполняет всю основную работу. Просмотрев документацию по DirectX 2 SDK, вы увидите, что интерфейс построения сеток содержит также функцию SetColor, которая получает в качестве аргумента структуру D3DCOLOR. Я не стал включать поддержку этой структуры в класс C3dShape, но если она вам понадобится, то реализация будет вполне тривиальной. Если вам приходится много работать с цветами, можно создать специальный класс C++, производный от D3DCOLOR, по аналогии с классом C3dVector, производным от D3DVECTOR. В такой класс разумно включить преобразование значений COLORREF, операцию сложения и т. д.

Давайте проделаем что-нибудь поинтереснее и раскрасим случайными цветами все грани объекта (Рисунок 8-1 и раскрашенный самолет на цветной вставке). Зачем? Мне показалось, что вам будет интересно загрузить объект, первоначально нарисованный в 3D Studio, и проследить за созданием его граней. Случайная раскраска превосходно демонстрирует общую идею. Класс C3dShape содержит функцию SetFaceColor, которая применяет цвет к отдельной грани и упрощает процесс случайной раскраски всего объекта:

void CMainFrame::OnEditRandcolor() (

ASSERT(m_pCurShape) ;

int iFaces = m_pCurShape-»GetFaceCount () ;

for (int i = 0; i « iFaces; i++) { m_pCurShape-»SetFaceColor (i,

rand() % 100) / 100.0, rand() % 100) / 100.0, randf) % 100) / 100.0) ;

}

I

/b> ед¦:" Глава 8. Цвет и текстуры

Рисунок. 8-1. Самолет со случайной раскраской граней


Цвет фрейма

Возможно, вам показалось, что мы перебрали все варианты применения цвета. Однако на самом деле осталась еще одна методика, простая, но довольно важная. Когда мы занимались созданием фигур в главе 4, я уже говорил о том, что один визуальный элемент может быть присоединен сразу к нескольким фреймам, что фактически позволяет создавать копии фигуры с минимальными накладными расходами. Такая методика хорошо работает при создании 97 объектов одинакового цвета, но что делать, если нам понадобятся объекты одинаковой формы, но разных цветов?




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



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