Создание сетки, представляющей платформу или
/p>
Функция CreateScene() выполняет следующие десять действий:
Создание сетки, представляющей платформу или пол.
Создание текстуры для сетки пола.
Создание и применение наложения текстуры для сетки пола.
Размещение сетки пола и ее фрейма.
Создание сетки вилки.
Размещение сетки вилки и ее фрейма.
Создание источника рассеянного света.
Создание точечного источника света.
Создание тени.
Создание порта просмотра.
Давайте начнем изучение кода с шага 1, создания сетки пола:
D3DRMLOADRESOURCE resinfo; resinfo.hModule = NULL; resinfo.lpName = MAKEINTRESOURCE(IDR_CUBEMESH); resinfo.lpType = "MESH"; d3drm->CreateMeshBuilder(&floorbuilder); floorbuilder->Load(&resinfo, NULL, D3DRMLOAD_FROMRESOURCE, NULL, NULL); floorbuilder->Scale(D3DVALUE(5), D3DVALUE(.05), D3DVALUE(5)); floorbuilder->SetPerspective(TRUE); floorbuilder->SetQuality(D3DRMRENDER_FLAT);
Для представления пола используется сетка кубической формы. Она загружается с помощью функции Load() интерфейса Direct3DRMMeshBuilder, а затем делается плоской с помощью функции Scale(). Для сетки разрешается перспективная коррекция и устанавливается плоский метод визуализации.
На следующем этапе осуществляется загрузка текстуры, которая будет наложена на сетку пола:
LPDIRECT3DRMTEXTURE texture; HRSRC texture_id = FindResource(NULL, MAKEINTRESOURCE(IDR_FLOORTEXTURE), "TEXTURE"); d3drm->LoadTextureFromResource(texture_id, &texture); floorbuilder->SetTexture(texture); texture->Release(); texture = 0;
Значение, идентифицирующее текстуру, получается с помощью функции FindResource(), входящей в Win32 API. Затем текстура загружается с помощью функции LoadTextureFromResource() и связывается с созданным ранее конструктором сеток с помощью функции SetTexture(). После выполнения этих действий указатель texture освобождается.
На третьем этапе происходит создание и применение наложения текстуры для сетки пола:
D3DRMBOX box; floorbuilder->GetBox(&box); D3DVALUE w = box.max.x - box.min.x; D3DVALUE h = box.max.z - box.min.z;
Содержание Назад Вперед