Специальные эффекты (Direct3D 9)
В этом разделе приведены примеры специальных эффектов, которые выполняются с помощью обработки координат текстуры.
- Анимация текстур (путем преобразования или поворота) в модели
- Создание координат текстуры как линейной функции положения камеры и пространства модели
- Выполнение сопоставления среды с кубической картой среды
- Выполнение проективного форматирования
Анимация текстур (путем преобразования или поворота) в модели
Определите координаты двухd текстур в формате вершины.
// Use a single texture, with 2D texture coordinates. This // bit-pattern should be expanded to include position, normal, // and color information as needed. DWORD dwFVFTex = D3FVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0);
Настройте растризатор для использования координат двухD-текстур.
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
Определите и задайте соответствующую матрицу преобразования координат текстуры.
// M is a D3DMATRIX being set to translate texture // coordinates in the U and V directions. // 1 0 0 0 // 0 1 0 0 // du dv 1 0 (du and dv change each frame) // 0 0 0 1 D3DMATRIX M = D3DXMatrixIdentity(); // declared in d3dutil.h M._31 = du; M._32 = dv;
Создание координат текстуры как линейной функции положения камеры и пространства модели
Используйте флаг D3DTSS_TCI_CAMERASPACEPOSITION, чтобы указать системе передать положение вершины в пространстве камеры в качестве входных данных для преобразования текстуры.
// The input vertices have no texture coordinates, saving // bandwidth. Three texture coordinates are generated by // using vertex position in camera space (x, y, z). SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
Указать растеризатору, что он ожидает координаты двухd текстур.
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
Определите и задайте матрицу, которая применяет линейную функцию.
// Generate texture coordinates as linear functions // so that: // u = Ux*x + Uy*y + Uz*z + Uw // v = Vx*x + Vy*y + Vz*z + Vw // The matrix M for this case is: // Ux Vx 0 0 // Uy Vy 0 0 // Uz Vz 0 0 // Uw Vw 0 0 SetTransform(D3DTS_TEXTURE0, &M);
Выполнение сопоставления среды с кубической картой среды
Используйте флаг D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR, чтобы система автоматически создавала координаты текстуры в качестве векторов отражения для кубического сопоставления.
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR);
Указать растеризатору, что он ожидает координаты текстуры с тремя элементами.
SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3);
Выполнение проективного форматирования
Используйте флаг D3DTSS_TCI_CAMERASPACEPOSITION, чтобы указать системе передать положение вершины в качестве входных данных в матрицу преобразования текстуры.
SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION);
Создайте и примените матрицу проекции текстур. Это выходит за рамки область этой документации и является темой нескольких отраслевых статей.
Указать растеризатору, что он должен ожидать трехэлейные координаты проецируемых текстур.
// Two output coordinates are used. SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTF_PROJECTED | D3DTTFF_COUNT3);
Связанные темы