私は、openglの透視投影行列を正しく得るために苦労しています。 opencvを使って、私は完全にマーカーの上に立方体(赤いワイヤメッシュ)を重ねることができます。しかし、投稿(http://www.morethantechnical.com/2015/02/17/augmented-reality-on-libqglviewer-and-opencv-opengl-tips-wcode/)のopencv-opengl透視投影を次のように適用すると、マーカーに固体キューブがオーバーレイされますが、マーカーを回転すると、固体キューブはマーカーからゆっくりとシフトします(https://www.youtube.com/watch?v=m87qAZcN6c4&feature=youtu.be).The赤キューブWiremeshの)OpenCVのを使用して描かれた、それは完全にオーバーレイされる。OpenCVのOpenGL透視投影行列わずかな誤差
// perspective projection matrix*************************
double fx = intrinsic_matrix.at<double>(0,0);
double fy = intrinsic_matrix.at<double>(1,1);
double cx = intrinsic_matrix.at<double>(0,2);
double cy = intrinsic_matrix.at<double>(1,2);
projection.at<double>(0,0) = fx/cx;
projection.at<double>(1,1) = fy/cy;
projection.at<double>(2,2) = -(far+near)/(far-near);
projection.at<double>(2,3) = -2.0*far*near/(far-near);
projection.at<double>(3,2) = -1.0;
projection = projection.t();
// modelview matrix **********************************************
modelview.at<double>(0,0) = rotation.at<double>(0,0);
modelview.at<double>(1,0) = rotation.at<double>(1,0);
modelview.at<double>(2,0) = rotation.at<double>(2,0);
modelview.at<double>(3,0) = 0;
modelview.at<double>(0,1) = rotation.at<double>(0,1);
modelview.at<double>(1,1) = rotation.at<double>(1,1);
modelview.at<double>(2,1) = rotation.at<double>(2,1);
modelview.at<double>(3,1) = 0;
modelview.at<double>(0,2) = rotation.at<double>(0,2);
modelview.at<double>(1,2) = rotation.at<double>(1,2);
modelview.at<double>(2,2) = rotation.at<double>(2,2);
modelview.at<double>(3,2) = 0;
modelview.at<double>(0,3) = tvecs.at<double>(0);
modelview.at<double>(1,3) = tvecs.at<double>(1);
modelview.at<double>(2,3) = tvecs.at<double>(2);
modelview.at<double>(3,3) = 1;
// This matrix corresponds to the change of coordinate systems.
static double changeCoordArray[4][4] = {{1, 0, 0, 0}, {0, -1, 0, 0}, {0, 0, -1, 0}, {0, 0, 0, 1}};
static Mat changeCoord(4, 4, CV_64FC1, changeCoordArray);
modelview = changeCoord*modelview;
modelview = modelview.t();
誰もが、私はこの問題を解決する手助けすることはできますか?ここに私のコードは)http://pastebin.com/2MkQvkdN(である。
透視投影行列に問題はありますか?どちらの立方体も同様の視点で見えます。私は問題があなたのmodelview行列と座標系の変更にあると思う。 – Harish