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



         

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


/p>

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

  • Использует интерфейс Direct3DRMMeshBuilder для загрузки сферической сетки.
  • Создает девять сеток и фреймы для каждой из них.
  • Устанавливает функцию обратного вызова UpdateDrag().
  • Создает источник света.
  • Создает порт просмотра.
  • На первом этапе осуществляется создание конструктора сеток:

    D3DRMLOADRESOURCE resinfo; resinfo.hModule = NULL resinfo.lpName = MAKEINTRESOURCE(IDR_SPHEREMESH); resinfo.lpType = "MESH"; LPDIRECT3DRMMESHBUILDER meshbuilder; d3drm->CreateMeshBuilder(&meshbuilder); meshbuilder->Load(&resinfo, NULL, D3DRMLOAD_FROMRESOURCE, NULL, NULL); meshbuilder->SetQuality(D3DRMRENDER_FLAT);

    Сетка загружается из ресурсов приложения функцией Load() интерфейса Direct3DRMMeshBuilder. Затем вызывается функция SetQuality(), чтобы изменить используемый по умолчанию для конструктора сеток метод визуализации Гуро на плоский метод визуализации.

    На втором этапе для создания девяти сеток используется цикл. В цикле используется инициализированный ранее указатель meshbuilder:

    for (int x = 0; x < 3; x++) { for (int y = 0; y < 3; y++) {

    LPDIRECT3DRMMESH mesh; meshbuilder->CreateMesh(&mesh); mesh->SetGroupColorRGB(0, D3DVALUE(x % 2), D3DVALUE(y % 2), D3DVALUE(1)); LPDIRECT3DRMFRAME meshframe; d3drm->CreateFrame(scene, &meshframe); meshframe->AddVisual(mesh); int xoffset = (rand() % 3) - 1; int yoffset = (rand() % 3) - 1; meshframe->SetPosition(scene, D3DVALUE((x - 1) * 10 + xoffset), D3DVALUE((y - 1) * 10 + yoffset), D3DVALUE(0)); meshframe->SetRotation(scene, D3DVALUE(0), D3DVALUE(1), D3DVALUE(0), D3DVALUE(.1));

    meshframe->Release(); meshframe = 0; mesh->Release(); mesh = 0; } }

    meshbuilder->Release(); meshbuilder = 0;

    Для создания девяти сеток применяются вложенные циклы. В теле внутреннего цикла для создания сетки используется функция CreateMesh() интерфейса Direct3DRMMeshBuilder. Назначаемый сетке цвет зависит от текущей итерации цикла.


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