Поделиться через


Функция D3DXComputeTangentFrame

Вычислить тангенсные, бинормальные и нормальные векторы для сетки.

Синтаксис

HRESULT D3DXComputeTangentFrame(
  _In_ ID3DXMesh *pMesh,
  _In_ DWORD     dwOptions
);

Параметры

pMesh [in]

Тип: ID3DXMesh*

Указатель на входной объект сетки ID3DXMesh .

dwOptions [in]

Тип: DWORD

Сочетание одного или нескольких флагов D3DXTANGENT .

Используйте значение NULL , чтобы указать следующие параметры:

  • Вес нормальной длины вектора на угол в радианах, вложенных двумя краями, выходящими из вершины.
  • Вычислить ортогональные декартовые координаты из координат текстуры UV.
  • Текстуры не упаковываются в направлениях U или V
  • Частичные производные относительно координат текстуры нормализуются.
  • Вершины упорядочены в направлении против часовой стрелки вокруг каждого треугольника.
  • Используйте векторы нормали для каждой вершины, которые уже присутствуют во входной сетке.
  • Результаты будут храниться в исходной входной сетке. Если потребуется создать новые вершины, функция завершится ошибкой.

Возвращаемое значение

Тип: HRESULT

Если функция выполнена успешно, возвращаемое значение будет S_OK. Если функция завершается сбоем, возвращаемое значение может быть одним из следующих: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA E_OUTOFMEMORY.

Комментарии

Эта функция просто вызывает D3DXComputeTangentFrameEx со следующими входными параметрами:

D3DXComputeTangentFrameEx(pMesh, D3DDECLUSAGE_TEXCOORD, 0,   
      D3DDECLUSAGE_BINORMAL, 0, D3DDECLUSAGE_TANGENT, 0, 
      D3DDECLUSAGE_NORMAL, 0, 
      dwOptions | D3DXTANGENT_GENERATE_IN_PLACE,
      NULL, 0.01f, 0.25f, 0.01f, NULL, NULL);

Сингулярности обрабатываются по мере необходимости путем группировки ребер и разделения вершин. Если необходимо разделить какие-либо вершины, функция завершится ошибкой. Вычисленный нормальный вектор на каждой вершине всегда нормализован до единицы длины.

Наиболее надежное решение для вычисления ортогональных декартовых координат — не устанавливать флаги D3DXTANGENT_ORTHOGONALIZE_FROM_U и D3DXTANGENT_ORTHOGONALIZE_FROM_V, чтобы ортогональные координаты вычислялись из обеих координат УФ-текстуры. Однако в этом случае, если значение U или V равно нулю, функция вычисляет ортогональные координаты, используя D3DXTANGENT_ORTHOGONALIZE_FROM_V или D3DXTANGENT_ORTHOGONALIZE_FROM_U соответственно.

Требования

Требование Значение
Заголовок
D3DX9Mesh.h
Библиотека
D3dx9.lib

См. также раздел

Функции сетки

D3DXComputeTangentFrameEx

D3DXTANGENT