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