Программирование графики с использованием Direct3D



         

Функция FireflyWin::CreateScene() - часть 2


/p>

Функция CreateScene() выполняет следующие действия:

  • Создание и загрузка сетки чаши.
  • Создание фрейма для сетки чаши.
  • Создание точечного источника света.
  • Создание сетки, представляющей светлячка.
  • Создание фреймов для источника света и сетки светлячка.
  • Создание порта просмотра.
  • Сначала создаем сетку чаши:

    D3DRMLOADRESOURCE resinfo; resinfo.hModule = NULL; resinfo.lpName = MAKEINTRESOURCE(IDR_CHALICEMESH); resinfo.lpType = "MESH"; d3drm->CreateMeshBuilder(&chalicebuilder); chalicebuilder->Load(&resinfo, NULL, D3DRMLOAD_FROMRESOURCE, NULL, NULL); ScaleMesh(chalicebuilder, D3DVALUE(25));

    Интерфейс Direct3DRMMeshBuilder используется для загрузки сетки из ресурсов программы. Затем, для изменения размеров сетки применяется функция ScaleMesh().

    Новая сетка присоединяется к фрейму с именем chaliceframe:

    LPDIRECT3DRMFRAME chaliceframe; d3drm->CreateFrame(scene, &chaliceframe); chaliceframe->AddVisual(chalicebuilder);

    chaliceframe->Release(); chaliceframe = 0;

    Для присоединения сетки чаши к новому фрейму вызывается функция AddVisual(). Перемещение фрейма не выполняется, поэтому сетка располагается в начале координат. Обратите внимание, что указатель chalicebuilder не объявлен в функции CreateScene(), а является членом класса FireflyWin. Это сделано для того, чтобы с помощью меню Render можно было изменять используемый метод визуализации. Также обратите внимание, что указатель chalicebuilder не освобождается в функции CreateScene(). Если мы освободим указатель chalicebuilder, то у нас не останется способа изменить метод визуализации во время работы программы.

    Следующий шаг — создание точечного источника света. Сначала для создания источника света применим функцию CreateLightRGB() интерфейса Direct3DRM:

    LPDIRECT3DRMLIGHT pointlight; d3drm->CreateLightRGB(D3DRMLIGHT_POINT, D3DVALUE(1.0), D3DVALUE(1.0), D3DVALUE(1.0), &pointlight);

    Константа D3DRMLIGHT_POINT используется для указания типа создаваемого источника света.


    Содержание  Назад  Вперед