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

UptoLike

30
pD3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 3, 2);
Здесь мы выводим фигуру, в качестве базы у которой стоят треугольники
со смежной стороной (D3DPT_TRIANGLEEAN). Прямоугольник в буфере
описывается начиная с третьей вершины, поэтому второй параметр равен 3, а для
формирования прямоугольника нужно два треугольника, поэтому последний
параметр равен 2.
После отображения сцены отключаем смешение, установив параметру
D3DRS_ALPHABLENDENABLE значение 0 с помощью метода SetRenderState.
Чтобы задать прозрачность, необходимо воспользоваться функцией
D3DCOLOR_ARGB. Она получает в качестве параметров четыре значения:
прозрачность, красный, зеленый и голубой цвет. Прозрачность задается в
диапазоне от 0 (полностью прозрачен) до 255 (не прозрачен). Давайте зададим у
нашего прямоугольника цвета с учетом прозрачности, т. е. у вершин с индексами
от 3 до 6 цвет будет задаваться функцией D3DCOLOR_ARGB:
Triangle[3].color = D3DCOLOR_ARGB(0, 255, 0, 255);
Triangle[4].color = D3DCOLOR_ARGB(О, 0, 255, 255);
Triangle[5].color = D3DCOLOR_ARGB(200, 255, 255, 0);
Triangle[6].color = D3DCOLOR_ARGB(255, 255, 255, 255);
Первые две вершины будут абсолютно прозрачны, потому что у них
первый параметр функции D3DCOLOR_ARGB равен нулю. У остальных точек
прозрачность равна 200 и 255 соответственно.
Теперь, чтобы сцена отображалась корректно с учетом заданной
прозрачности, необходимо указать значения свойств источника и приемника
прозрачности. Параметру источника D3DRS_SRCBLEND зададим прозрачность
D3DBLEND_ SRCALPHA, a D3DRS_DESTBLEND укажем
D3DBLEND_INVSRCALPHA:
pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
Теперь запустите пример и посмотрите на результат работы. Треугольник
больше не будет прозрачным, потому что для него степень прозрачности не
задается, а вот прямоугольник будет выглядеть достаточно красиво, потому что
две вершины полностью прозрачны, а другие нет, и произойдет плавный переход.
Задание
Сцена содержит два тела вращения, оси которых совмещены. Тела
вращения задаются кривыми, конечный вид которых собирается из трех
элементов, перечисленных в таблице 2. Номера элементов определяются по
следующему алгоритму:
Пусть Х
0
последние 3 цифры в зачетке. Тогда номера элементов для
первой фигуры определяются по формулам:
K
i
=X
i
mod 10, где Xi = (X
i-1
* 413 ) mod 1000
pD3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, 3, 2);
       Здесь мы выводим фигуру, в качестве базы у которой стоят треугольники
со смежной стороной (D3DPT_TRIANGLEEAN). Прямоугольник в буфере
описывается начиная с третьей вершины, поэтому второй параметр равен 3, а для
формирования прямоугольника нужно два треугольника, поэтому последний
параметр равен 2.
       После отображения сцены отключаем смешение, установив параметру
D3DRS_ALPHABLENDENABLE значение 0 с помощью метода SetRenderState.
       Чтобы задать прозрачность, необходимо воспользоваться функцией
D3DCOLOR_ARGB. Она получает в качестве параметров четыре значения:
прозрачность, красный, зеленый и голубой цвет. Прозрачность задается в
диапазоне от 0 (полностью прозрачен) до 255 (не прозрачен). Давайте зададим у
нашего прямоугольника цвета с учетом прозрачности, т. е. у вершин с индексами
от 3 до 6 цвет будет задаваться функцией D3DCOLOR_ARGB:
Triangle[3].color   =   D3DCOLOR_ARGB(0, 255, 0, 255);
Triangle[4].color   =   D3DCOLOR_ARGB(О, 0, 255, 255);
Triangle[5].color   =   D3DCOLOR_ARGB(200, 255, 255, 0);
Triangle[6].color   =   D3DCOLOR_ARGB(255, 255, 255, 255);
      Первые две вершины будут абсолютно прозрачны, потому что у них
первый параметр функции D3DCOLOR_ARGB равен нулю. У остальных точек
прозрачность равна 200 и 255 соответственно.
      Теперь, чтобы сцена отображалась корректно с учетом заданной
прозрачности, необходимо указать значения свойств источника и приемника
прозрачности. Параметру источника D3DRS_SRCBLEND зададим прозрачность
D3DBLEND_          SRCALPHA,         a       D3DRS_DESTBLEND     укажем
D3DBLEND_INVSRCALPHA:
pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
       Теперь запустите пример и посмотрите на результат работы. Треугольник
больше не будет прозрачным, потому что для него степень прозрачности не
задается, а вот прямоугольник будет выглядеть достаточно красиво, потому что
две вершины полностью прозрачны, а другие нет, и произойдет плавный переход.

      Задание
      Сцена содержит два тела вращения, оси которых совмещены. Тела
вращения задаются кривыми, конечный вид которых собирается из трех
элементов, перечисленных в таблице 2. Номера элементов определяются по
следующему алгоритму:
      Пусть Х0 – последние 3 цифры в зачетке. Тогда номера элементов для
первой фигуры определяются по формулам:
      Ki=Xi mod 10, где Xi = (Xi-1 * 413 ) mod 1000



                                        30