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

메시에 여러 텍스처 좌표가 있는 경우 탄젠트 프레임 계산에 사용할 텍스처 좌표를 지정합니다. 0이면 메시에 단일 텍스처 좌표만 있습니다.

dwUPartialOutSemantic [in]

형식: DWORD

U 텍스처 좌표와 관련하여 부분 파생이 저장되는 위치를 설명하는 형식의 출력 의미 체계(일반적으로 D3DDECLUSAGE_TANGENT)를 지정합니다. D3DX_DEFAULT 경우 이 부분 파생은 저장되지 않습니다.

dwUPartialOutIndex [in]

형식: DWORD

U 텍스처 좌표와 관련하여 부분 파생을 저장할 의미 체계 인덱스를 지정합니다.

dwVPartialOutSemantic [in]

형식: DWORD

V 텍스처 좌표와 관련하여 부분 파생이 저장되는 위치를 설명하는 D3DDECLUSAGE 형식(일반적으로 D3DDECLUSAGE_BINORMAL)을 지정합니다. D3DX_DEFAULT 경우 이 부분 파생은 저장되지 않습니다.

dwVPartialOutIndex [in]

형식: DWORD

V 텍스처 좌표와 관련하여 부분 파생을 저장할 의미 체계 인덱스를 지정합니다.

dwNormalOutSemantic [in]

형식: DWORD

각 꼭짓점에서 일반 벡터가 저장되는 위치를 설명하는 출력 표준 의미 체계(일반적으로 D3DDECLUSAGE_NORMAL)를 지정합니다. D3DX_DEFAULT 경우 이 일반 벡터는 저장되지 않습니다.

dwNormalOutIndex [in]

형식: DWORD

각 꼭짓점에 일반 벡터를 저장할 의미 체계 인덱스를 지정합니다.

dwOptions [in]

형식: DWORD

탄젠트 프레임 계산 옵션을 지정하는 하나 이상의 D3DXTANGENT 플래그 조합입니다. NULL인 경우 다음 옵션이 지정됩니다.

설명 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*

메시의 각 면에 대해 세 개의 인접 항목을 지정하는 얼굴당 3개의 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가 0인 경우 함수는 각각 D3DXTANGENT_ORTHOGONALIZE_FROM_V 또는 D3DXTANGENT_ORTHOGONALIZE_FROM_U 사용하여 직교 좌표를 계산합니다.

요구 사항

요구 사항
헤더
D3DX9Mesh.h
라이브러리
D3dx9.lib

참고 항목

Mesh 함수

D3DXComputeTangentFrame