Функция 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
Требование | Значение |
---|---|
Верхний колонтитул |
|
Библиотека |
|
См. также