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


Функция D3DXComputeTangentFrameEx

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

Синтаксис

HRESULT D3DXComputeTangentFrameEx(
  _In_        ID3DXMesh   *pMesh,
  _In_        DWORD       dwTextureInSemantic,
  _In_        DWORD       dwTextureInIndex,
  _In_        DWORD       dwUPartialOutSemantic,
  _In_        DWORD       dwUPartialOutIndex,
  _In_        DWORD       dwVPartialOutSemantic,
  _In_        DWORD       dwVPartialOutIndex,
  _In_        DWORD       dwNormalOutSemantic,
  _In_        DWORD       dwNormalOutIndex,
  _In_        DWORD       dwOptions,
  _In_  const DWORD       *pdwAdjacency,
  _In_        FLOAT       fPartialEdgeThreshold,
  _In_        FLOAT       fSingularPointThreshold,
  _In_        FLOAT       fNormalEdgeThreshold,
  _Out_       ID3DXMesh   **ppMeshOut,
  _Out_       ID3DXBuffer **ppVertexMapping
);

Параметры

pMesh [in]

Тип: ID3DXMesh*

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

dwTextureInSemantic [in]

Тип: DWORD

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

dwTextureInIndex [in]

Тип: DWORD

Если сетка имеет несколько координат текстур, указывает координату текстуры, используемую для вычислений касательных кадров. Если ноль, сетка имеет только одну координату текстуры.

dwUPartialOutSemantic [in]

Тип: DWORD

Указывает семантику вывода для типа, обычно D3DDECLUSAGE_TANGENT, которая описывает, где будет храниться частичная производная относительно координаты текстуры U. Если D3DX_DEFAULT, то этот частичный производный не будет сохранен.

dwUPartialOutIndex [in]

Тип: DWORD

Указывает семантический индекс, в котором хранится частичная производная относительно координаты текстуры U.

dwVPartialOutSemantic [in]

Тип: DWORD

Указывает тип D3DDECLUSAGE , обычно D3DDECLUSAGE_BINORMAL, описывающий, где будет храниться частичная производная относительно координаты текстуры V. Если D3DX_DEFAULT, то этот частичный производный не будет сохранен.

dwVPartialOutIndex [in]

Тип: DWORD

Указывает семантический индекс, в котором хранится частичная производная относительно координаты текстуры V.

dwNormalOutSemantic [in]

Тип: DWORD

Указывает обычную семантику выходных данных, обычно D3DDECLUSAGE_NORMAL, описывающую, где будет храниться обычный вектор на каждой вершине. Если D3DX_DEFAULT, этот обычный вектор не будет сохранен.

dwNormalOutIndex [in]

Тип: DWORD

Указывает семантический индекс, по которому следует хранить обычный вектор на каждой вершине.

dwOptions [in]

Тип: DWORD

Сочетание одного или нескольких флагов D3DXTANGENT с указанием параметров вычисления касания кадров. Если значение NULL, будут указаны следующие параметры:

Description Значение флага D3DXTANGENT
Вес обычной длины вектора по углу, в радианах, подложенных двумя краями, оставляя вершину. & ! ( D3DXTANGENT_WEIGHT_BY_AREA | D3DXTANGENT_WEIGHT_EQUAL )
Вычисление ортгональных декартовых координат из координат текстуры (u, v). См. заметки. & ! ( D3DXTANGENT_ORTHOGONALIZE_FROM_U | D3DXTANGENT_ORTHOGONALIZE_FROM_V )
Текстуры не упаковываются в направлениях u или v & ! ( D3DXTANGENT_WRAP_UV )
Частичные производные относительно координат текстуры нормализуются. & ! ( D3DXTANGENT_DONT_NORMALIZE_PARTIALS )
Вершины упорядочены в направлении счетчика по часовой стрелке вокруг каждого треугольника. & ! ( D3DXTANGENT_WIND_CW )
Используйте обычные векторы вершин, которые уже присутствуют в входной сетке. & ! ( D3DXTANGENT_CALCULATE_NORMALS )

 

Если D3DXTANGENT_GENERATE_IN_PLACE не задано, входная сетка клонируется. Поэтому исходная сетка должна иметь достаточно места для хранения вычисляемых нормальных векторов и частичных производных данных.

pdwAdjacency [in]

Тип: const DWORD*

Указатель на массив из трех DWORD на лицо, указывающее три соседя для каждого лица в сетке. Число байтов в этом массиве должно быть не менее 3 * GetNumFaces * sizeof(DWORD).

fPartialEdgeThreshold [in]

Тип: FLOAT

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

fSingularPointThreshold [in]

Тип: FLOAT

Указывает максимальную величину частичной производной, с которой вершина будет считаться сингулярной. Так как несколько треугольников являются инцидентами на точке, которая имеет близлежащие тангенсные кадры, но полностью отменять друг друга (например, в верхней части сферы), величина частичного производного уменьшится. Если величина меньше или равна этому порогу, вершина будет разделена для каждого треугольника, содержащего его.

fNormalEdgeThreshold [in]

Тип: FLOAT

Аналогично fPartialEdgeThreshold, указывает максимальный косинус угла между двумя нормальными значениями, что является пороговым значением, за пределами которого вершины, общие между треугольниками, будут разделены. Если точечный продукт двух норм меньше порога, общие вершины будут разделены, формируя жесткое крае между соседними треугольниками. Если продукт точки превышает пороговое значение, соседние треугольники будут интерполированы.

ppMeshOut [out]

Тип: ID3DXMesh**

Адрес указателя на объект сетки ID3DXMesh , который получает вычисляемые тангенты, бинормальные и обычные векторные данные.

ppVertexMapping [out]

Тип: ID3DXBuffer**

Адрес указателя на выходной объект буфера ID3DXBuffer , который получает сопоставление новых вершин, вычисляемых этим методом, с исходными вершинами. Буфер представляет собой массив DWORD, размер массива, определенный как число вершин в ppMeshOut.

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

Тип: HRESULT

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

Замечания

Упрощенная версия этой функции доступна как D3DXComputeTangentFrame.

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

Наиболее надежным решением для вычислений ортгональных декартовых координат является не устанавливать флаги D3DXTANGENT_ORTHOGONALIZE_FROM_U и D3DXTANGENT_ORTHOGONALIZE_FROM_V, чтобы ортгональные координаты вычислялись как из координат текстуры, так и из v. Однако в этом случае если значение u или v равно нулю, функция вычисляет ортогональные координаты с помощью D3DXTANGENT_ORTHOGONALIZE_FROM_V или D3DXTANGENT_ORTHOGONALIZE_FROM_U соответственно.

Requirements

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

См. также

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

D3DXComputeTangentFrame