Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Текстуры тома — это трехмерные коллекции пикселей (тексели), которые можно использовать для рисования двухмерного примитива, например треугольника или линии. Координаты текстуры трех элементов необходимы для каждой вершины примитива, который должен быть текстурирован с томом. По мере рисования примитива каждый содержащийся пиксель заполняется значением цвета из некоторого пикселя внутри тома в соответствии с правилами, аналогичными двухмерному регистру текстуры. Тома не отображаются напрямую, так как с ними нет трехмерных примитивов, которые можно нарисовать.
Вы можете использовать текстуры тома для специальных эффектов, таких как пятнистый туман, взрывы и т. д.
Тома упорядочены в срезы и могут рассматриваться как ширина х высоты 2D поверхностей, сложенных для создания тома глубины x ширины x высоты x. Каждый срез является одной строкой. Тома могут иметь последующие уровни, в которых размеры каждого уровня усечены до половины измерений предыдущего уровня. На следующей схеме показано, как выглядит текстура тома с несколькими уровнями.
Создание текстуры тома
В приведенных ниже примерах кода показаны шаги, необходимые для использования текстуры тома.
Сначала укажите пользовательский тип вершины с тремя координатами текстуры для каждой вершины, как показано в этом примере кода.
struct VOLUMEVERTEX
{
FLOAT x, y, z;
DWORD color;
FLOAT tu, tv, tw;
};
#define D3DFVF_VOLUMEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|
D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE3(0))
Затем заполните вершины данными.
VOLUMEVERTEX g_vVertices[4] =
{
{ 1.0f, 1.0f, 0.0f, 0xffffffff, 1.0f, 1.0f, 0.0f },
{-1.0f, 1.0f, 0.0f, 0xffffffff, 0.0f, 1.0f, 0.0f },
{ 1.0f,-1.0f, 0.0f, 0xffffffff, 1.0f, 0.0f, 0.0f },
{-1.0f,-1.0f, 0.0f, 0xffffffff, 0.0f, 0.0f, 0.0f }
};
Теперь создайте буфер вершин и заполните его данными из вершин.
Следующий шаг — использовать метод IDirect3Device9::CreateVolumeTexture для создания текстуры тома, как показано в этом примере кода.
LPDIRECT3DVOLUMETEXTURE9 pVolumeTexture;
d3dDevice->CreateVolumeTexture( 8, 4, 4, 1, 0, D3DFMT_R8G8B8,D3DPOOL_MANAGED,
&pVolumeTexture );
Перед отрисовкой примитива задайте текущую текстуру для текстуры тома, созданной выше. В приведенном ниже примере кода показан весь процесс отрисовки для полосы треугольников.
if( SUCCEEDED( d3dDevice->BeginScene() ) )
{
// Draw the quad, with the volume texture.
d3dDevice->SetTexture( 0, pVolumeTexture );
d3dDevice->SetFVF( D3DFVF_VOLUMEVERTEX );
d3dDevice->SetStreamSource( 0, pVB, sizeof(VOLUMEVERTEX) );
d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2);
// End the scene.
d3dDevice->EndScene();
}
Связанные разделы