图形学变换中的Homogenize方法_艾孜尔江撰

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;
	}

作者:艾孜尔江·艾尔斯兰

Published by

风君子

独自遨游何稽首 揭天掀地慰生平