Vector4 Transform::HomogenizeVector4& result, const Vector4& vec4ToBeHomogenized)
{
if vec4ToBeHomogenized.getW) == 0.f) {
return Vector4);
}
float rhw = 1 / vec4ToBeHomogenized.getW);
result.setX1.f + vec4ToBeHomogenized.getX) * rhw) * canvasWidth * 0.5f); // screen coordinate
result.setY1.f - vec4ToBeHomogenized.getY) * rhw) * canvasHeight * 0.5f); //screen coordinate ---> top down
result.setZvec4ToBeHomogenized.getZ) * rhw);
result.setWrhw);
return result;
}
它的逆变换如下逆变换主要用于求阴影时候的反求过程):
Vector4 Transform::HomogenizeInvertionVector4 & result, const Vector4 & vec4ToBeInverted)
{
if vec4ToBeInverted.getW) == 0.f) {
return Vector4);
}
float rhw = 1.f / vec4ToBeInverted.getW);
float reciprocalOfCanvasHeight = 1.f / canvasHeight;
float reciprocalOfCanvasWidth = 1.f / canvasWidth;
result.setX2 * vec4ToBeInverted.getX) * reciprocalOfCanvasWidth) - 1.f) * rhw);
result.setY1.f - 2 * vec4ToBeInverted.getY) * reciprocalOfCanvasHeight)) * rhw);
result.setZvec4ToBeInverted.getZ) * rhw);
result.setWrhw);
return result;
}
作者:艾孜尔江·艾尔斯兰
