Основы построения 3-х мерных сцен с использованием библиотеки DirectX. Макушкина Л.А - 18 стр.

UptoLike

20
ЛАБОРАТОРНАЯ РАБОТА 3
ТЕМА: «ОСВЕЩЕНИЕ В DirectX»
Цель лабораторной работы: получить навыки для работы с несколькими
источниками света в 3D-сценах.
Теоретическая часть.
Материалы и текстуры
Загрузив данные, нужно разобраться с материалами и при необходимости
загрузить текстуры, которые сейчас находятся в буфере pD3DXMtrlBuffer.
Сначала определим указатель на данные буфера с помощью метода
GetBufferPointer (pD3DXMtrlBuffer->GetBuf ferPointer ()). По этому указателю
хранятся данные типа D3DXMATERIAL, поэтому введем переменную такого
типа и сохраним в ней полученный указатель:
D3DXMATERIAL* d3dxMaterials =
(D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
Теперь мы знаем количество материалов, поэтому инициализируем массивы
для их хранения:
(*pMeshMaterials) = new D3DMATERIAL9[dwNumMaterials];
(*pMeshTextures) = new LPDIRECT3DTEXTURE9[dwNumMaterials];
Первая строка выделяет память для хранения dwNumMateriais-материалов, а
вторая строка для хранения такого же количества текстур. Теперь запускаем цикл,
который будет перебирать все материалы от 0 до значения dwNumMaterials. В
цикле мы сначала копируем материал в i-й элемент массива pMeshMaterials. Затем
нужно загрузить картинку, используемую в качестве текстуры. Имя файла
текстуры находится в свойстве pTextureFiiename материала d3dxMaterials[i]. Для
загрузки картинки применим функцию D3DXCreateTextureFromFile. Мы ее еще не
использовали, поэтому посмотрим, как она выглядит:
HRESULT D3DXCreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile,
LPDIRECT3DTEXTURE9 *ppTexture
) ;
Здесь имеются следующие три параметра:
pDevice— указатель на интерфейс iDirect3DDevice9, с которым должна
быть связана текстура;
pSrcFile — имя файла;
ppTexture указатель на интерфейс типа iDirect3DTexture9, куда будет
загружена текстура.
Если во время загрузки произошла ошибка, то пытаемся загрузить файл,
который был указан в качестве параметра функции.
Освещение
Следующий код показывает действия, которые будем выполнять в нашей
программе:
D3DLIGHT9 light;
                       ЛАБОРАТОРНАЯ РАБОТА №3

                     ТЕМА: «ОСВЕЩЕНИЕ В DirectX»
    Цель лабораторной работы: получить навыки для работы с несколькими
источниками света в 3D-сценах.
      Теоретическая часть.
     Материалы и текстуры
     Загрузив данные, нужно разобраться с материалами и при необходимости
загрузить текстуры, которые сейчас находятся в буфере pD3DXMtrlBuffer.
Сначала определим указатель на данные буфера с помощью метода
GetBufferPointer (pD3DXMtrlBuffer->GetBuf ferPointer ()). По этому указателю
хранятся данные типа D3DXMATERIAL, поэтому введем переменную такого
типа и сохраним в ней полученный указатель:
D3DXMATERIAL* d3dxMaterials =
(D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
     Теперь мы знаем количество материалов, поэтому инициализируем массивы
для их хранения:
(*pMeshMaterials) = new D3DMATERIAL9[dwNumMaterials];
(*pMeshTextures) = new LPDIRECT3DTEXTURE9[dwNumMaterials];
     Первая строка выделяет память для хранения dwNumMateriais-материалов, а
вторая строка для хранения такого же количества текстур. Теперь запускаем цикл,
который будет перебирать все материалы от 0 до значения dwNumMaterials. В
цикле мы сначала копируем материал в i-й элемент массива pMeshMaterials. Затем
нужно загрузить картинку, используемую в качестве текстуры. Имя файла
текстуры находится в свойстве pTextureFiiename материала d3dxMaterials[i]. Для
загрузки картинки применим функцию D3DXCreateTextureFromFile. Мы ее еще не
использовали, поэтому посмотрим, как она выглядит:
HRESULT D3DXCreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice,
  LPCTSTR pSrcFile,
  LPDIRECT3DTEXTURE9 *ppTexture
) ;
    Здесь имеются следующие три параметра:
    − pDevice— указатель на интерфейс iDirect3DDevice9, с которым должна
       быть связана текстура;
    − pSrcFile — имя файла;
    − ppTexture — указатель на интерфейс типа iDirect3DTexture9, куда будет
       загружена текстура.
    Если во время загрузки произошла ошибка, то пытаемся загрузить файл,
который был указан в качестве параметра функции.
    Освещение
    Следующий код показывает действия, которые будем выполнять в нашей
программе:
D3DLIGHT9 light;

                                         20