Função XMVector3Refract (directxmath.h)
Refrata um vetor 3D de incidente em um vetor normal 3D.
Sintaxe
XMVECTOR XM_CALLCONV XMVector3Refract(
[in] FXMVECTOR Incident,
[in] FXMVECTOR Normal,
[in] float RefractionIndex
) noexcept;
Parâmetros
[in] Incident
Vetor de incidente 3D a ser refratado.
[in] Normal
Vetor normal 3D pelo qual refratar o vetor de incidente.
[in] RefractionIndex
Índice de refração. Consulte Observações.
Retornar valor
Retorna o vetor de incidente refratado. Se o índice de refração e o ângulo entre o vetor de incidente e o normal forem de modo que o resultado seja uma reflexão interna total, a função retornará um vetor do formulário < 0.0f, 0.0f, 0.0f, indefinido >.
Comentários
O pseudocódigo a seguir demonstra a operação da função:
XMVECTOR Result;
float t = ( Incident.x * Normal.x + Incident.y * Normal.y + Incident.z * Normal.z );
float r = 1.0f - RefractionIndex * RefractionIndex * (1.0f - t * t);
if (r < 0.0f) // Total internal reflection
{
Result.x = 0.0f;
Result.y = 0.0f;
Result.z = 0.0f;
}
else
{
float s = RefractionIndex * t + sqrt(r);
Result.x = RefractionIndex * Incident.x - s * Normal.x;
Result.y = RefractionIndex * Incident.y - s * Normal.y;
Result.z = RefractionIndex * Incident.z - s * Normal.z;
}
Result.w = undefined;
return Result;
O índice de refração é a proporção do índice de refração do meio que contém o vetor de incidente para o índice de refração da média que está sendo inserida (em que o índice de refração de um meio é, em si, a proporção da velocidade da luz em um vácuo para a velocidade da luz no meio).
Requisitos de plataforma
Microsoft Visual Studio 2010 ou Microsoft Visual Studio 2012 com o SDK do Windows para Windows 8. Com suporte para aplicativos da área de trabalho Win32, aplicativos da Windows Store e aplicativos Windows Phone 8.Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | directxmath.h (inclua DirectXMath.h) |