Exemple #1
0
void ViewPort::Update()
{
	if(wasUpdated())
	{
		InvViewMat = MatrixFromPosAng(Position,Rotation);
		ViewMat = inverse(InvViewMat);
		ViewProjectionMatrix = ProjectrionMatrix * ViewMat;

		InvViewProjectionMatrix = inverse(ViewProjectionMatrix);

		//fwd = vec3(ViewMat * vec4(0.0f, 0.0f, -1.0f, 0.0f));
		//right = vec3(ViewMat * vec4(1.0f, 0.0f, 0.0f, 0.0f));

		if(CalcReconstrucVecs)
		{
			vec4 posCenter = InvViewProjectionMatrix * vec4(0.0f, 0.0f, 1.0f, 1.0f);
			posCenter /= posCenter.w;
			vec4 posRight = InvViewProjectionMatrix * vec4(1.0f, 0.0f, 1.0f, 1.0f);
			posRight /= posRight.w;
			vec4 posUp = InvViewProjectionMatrix * vec4(0.0f, 1.0f, 1.0f, 1.0f);
			posUp /= posUp.w;

			fwdD = vec3(posCenter) - Position;
			rightD = vec3(posRight - posCenter);
			upD = vec3(posUp - posCenter);

			fwd = normalize(fwdD);
			right = normalize(rightD);
			up = normalize(upD);
		}
		else
		{
			fwd = vec3(InvViewMat * vec4(0.0f, 0.0f, 1.0f, 0.0f));
			right = vec3(InvViewMat * vec4(1.0f, 0.0f, 0.0f, 0.0f));
			up = vec3(InvViewMat * vec4(0.0f, 1.0f, 0.0f, 0.0f));
		}

		#pragma region frustum culling generation

		vec4 edge000 = InvViewProjectionMatrix * vec4(-1.0f, -1.0f, -1.0f, 1.0f);
		vec4 edge001 = InvViewProjectionMatrix * vec4(-1.0f, -1.0f, 1.0f, 1.0f);
		vec4 edge010 = InvViewProjectionMatrix * vec4(-1.0f, 1.0f, -1.0f, 1.0f);
		vec4 edge011 = InvViewProjectionMatrix * vec4(-1.0f, 1.0f, 1.0f, 1.0f);

		vec4 edge100 = InvViewProjectionMatrix * vec4(1.0f, -1.0f, -1.0f, 1.0f);
		vec4 edge101 = InvViewProjectionMatrix * vec4(1.0f, -1.0f, 1.0f, 1.0f);
		vec4 edge110 = InvViewProjectionMatrix * vec4(1.0f, 1.0f, -1.0f, 1.0f);

		edge000 /= edge000.w;
		edge001 /= edge001.w;
		edge010 /= edge010.w;
		edge011 /= edge011.w;

		edge100 /= edge100.w;
		edge101 /= edge101.w;
		edge110 /= edge110.w;

		clipingPlanes[0] = PlnEquation(vec3(edge000),vec3(edge010),vec3(edge001));
		clipingPlanes[1] = PlnEquation(vec3(edge100),vec3(edge101),vec3(edge110));

		clipingPlanes[2] = PlnEquation(vec3(edge000),vec3(edge100),vec3(edge010));
		clipingPlanes[3] = PlnEquation(vec3(edge001),vec3(edge011),vec3(edge101));

		clipingPlanes[4] = PlnEquation(vec3(edge000),vec3(edge001),vec3(edge100));
		clipingPlanes[5] = PlnEquation(vec3(edge010),vec3(edge110),vec3(edge011));

		#pragma endregion
	}
}
void DataDisplayConfigWidget::madeUpdate()
{
	emit(wasUpdated());
}