Exemple #1
0
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();
}
Exemple #2
0
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);
	}
}
Exemple #3
0
void Save::updateRes()
{
	QSize res = finalRes();
	lFinalRes->setText(tr("Final resolution: %1 x %2").arg(res.width()).arg(res.height()));
}