void Save::render() { reset(); tStart = QTime::currentTime(); lwProgess->addItem(tr("Rendering started at %1.").arg(tStart.toString("hh:mm:ss"))); QSize size(finalRes()); lwProgess->addItem(tr("Allocating memory (%1x%2)...").arg(size.width()).arg(size.height())); img = new QImage(finalRes(), QImage::Format_RGB888); lwProgess->addItem(tr("Waiting for rendering...")); emit startRender(); }
void CProxyCamera::GetGLMatrices(double glprojmatrix[], double glmodelviewmatrix[], const int glvpmatrix[], double znear, double zfar) const { double mat[3][4]; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { mat[i][j] = m_KR(i,j); } } mat[0][3] = m_KT[0]; mat[1][3] = m_KT[1]; mat[2][3] = m_KT[2]; Matrix3d LHC = Matrix3d::Zero(); LHC(0, 0) = LHC(1, 1) = LHC(2, 2) = -1; LHC(0, 0) = 1; double icpara[3][4], trans[3][4]; if (arParamDecompMat(mat, icpara, trans) < 0) { printf("Fatal error: proj decompose failed!\n"); exit(0); } Matrix3d R; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { R(i, j) = trans[i][j]; } } Matrix3d LHCR = LHC * R; Matrix4d modelViewMatrix = Matrix4d::Identity(); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { modelViewMatrix(i, j) = LHCR(i,j); } } modelViewMatrix(0, 3) = trans[0][3]; modelViewMatrix(1, 3) = trans[1][3]; modelViewMatrix(2, 3) = trans[2][3]; modelViewMatrix(1, 3) = modelViewMatrix(1, 3) * (-1); modelViewMatrix(2, 3) = modelViewMatrix(2, 3) * (-1); modelViewMatrix(3, 3) = 1.0; Matrix4d finalModelM=modelViewMatrix; for (int i=0;i<16;i++) { glmodelviewmatrix[i]=finalModelM(i); } double w = glvpmatrix[2]; double h = glvpmatrix[3]; Matrix4d H_inv = Matrix4d::Identity(); H_inv(0, 0) = 2.0 / w; H_inv(0, 2) = -1; H_inv(1, 1) = -2.0 / h; H_inv(1, 2) = 1.0; H_inv(3, 2) = 1.0; Matrix3d K = Matrix3d::Zero(); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { K(i, j) = icpara[i][j] / icpara[2][2]; } } Matrix3d y = K * LHC; Matrix4d y_ = Matrix4d::Zero(); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { y_(i, j) = y(i,j); } } Matrix4d result = H_inv * (y_); double C_ = -(zfar + znear) / (zfar - znear); double D_ = -(2 * zfar * znear) / (zfar - znear); result(2, 2) = C_; result(2, 3) = D_; Matrix4d finalRes=result; for (int i=0;i<16;i++) { glprojmatrix[i]=finalRes(i); } }
void Save::updateRes() { QSize res = finalRes(); lFinalRes->setText(tr("Final resolution: %1 x %2").arg(res.width()).arg(res.height())); }