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



         

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


/p>

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

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

    d3drm->CreateMesh(&mesh);

    mesh->AddGroup(12, 3, 4, vertorder, &group1); mesh->AddGroup(12, 3, 4, vertorder, &group2);

    mesh->SetVertices(group1, 0, 12, vertexlist); mesh->SetVertices(group2, 0, 12, vertexlist + 12);

    mesh->Translate(D3DVALUE(-0.5), D3DVALUE(-0.5), D3DVALUE(-0.5)); mesh->Scale(D3DVALUE(15), D3DVALUE(15), D3DVALUE(15));

    Сначала для инициализации указателя mesh вызывается функция CreateMesh() интерфейса Direct3DRM. Затем к пустой сетке добавляются две группы граней, каждая из которых создается функцией AddGroup(). Каждая группа включает 12 вершин: 3 грани по 4 вершины в каждой. В качестве третьего аргумента функции AddGroup() используется массив vertorder. В приложении Cube массив vertorder содержал 24 элемента; в приложении Cube2 в этом массиве только 12 элементов:

    unsigned vertorder[] = { 0,1,2,3,4,5,6,7,8,9,10,11 };

    Последний аргумент функции AddGroup() является адресом идентификатора групп граней сетки. Функция AddGroup() назначает каждой группе граней уникальное значение идентификатора.

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




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