簡體   English   中英

OpenGL投影的固有相機矩陣。 意外的比例因子

[英]Intrinsic Camera Matrix to OpenGL Projection. Unexpected Scaling Factor

我很難解決有關AR投影矩陣的一些問題。 我的基礎是經過校准的相機矩陣。 我正在嘗試檢索OpenGL投影的投影矩陣。 我幾乎跟着這篇文章: http : //ksimek.github.io/2013/06/03/calibrated_cameras_in_opengl/但是結果太小了,並且根據轉換矩陣的不同,它的放大偏移也很大。 由於它太小,我來回更改了參數以找出問題所在。

按照文章中描述的正確計算:

//p is the intrinsic camera matrix as you know it
glm::mat4x4 perspective, ndc;

perspective[0][0] = p[0][0];
perspective[0][1] = 0;
perspective[0][2] = 0;
perspective[0][3] = 0;
perspective[1][0] = 0;
perspective[1][1] = p[1][1];
perspective[1][2] = 0;
perspective[1][3] = 0;
perspective[2][0] = -p[2][0];
perspective[2][1] = -p[2][1];
perspective[2][2] = (gnear+gfar);
perspective[2][3] = -1;
perspective[3][0] = 0;
perspective[3][1] = 0;
perspective[3][2] = gnear*gfar;
perspective[3][3] = 0;


ndc[0][0] = 2.0f/(width);
ndc[0][1] = 0;
ndc[0][2] = 0;
ndc[0][3] = 0;
ndc[1][0] = 0;
ndc[1][1] = 2.0f/height;
ndc[1][2] = 0;
ndc[1][3] = 0;
ndc[2][0] = 0;
ndc[2][1] = 0;
ndc[2][2] = -2.0f/(gfar-gnear);
ndc[2][3] = 0;
ndc[3][0] = -((width/width));
ndc[3][1] = -((height/height));
ndc[3][2] = -((gfar+gnear)/(gfar-gnear));
ndc[3][3] = 1;

glm::mat4x4 proj2 = ndc*perspective;

這並不完全適合我。

我做了這兩個更改(加上0.5f因子):

perspective[2][2] = (gnear+gfar)*0.5f;
perspective[3][2] = gnear*gfar*0.5f;

在某種程度上,這很好。 我目前正在進行標記跟蹤,並且生成的標記模型與實際的現實標記完全吻合。 令人遺憾的是,變換距離的映射似乎有一點誤差。 外觀是模型到原點的距離不同,未正確縮放比例。 我離開標記,模型太小。 如果我達到某個點,模型就可以了。 此后,它們太大了。 我重復一遍:標記模型似乎一直都在正確映射。

我檢查了是否在縮放系數的初始錯誤方面犯了任何錯誤。 但是我什么也找不到。

是什么導致這種擴展需求?

我知道由於缺乏信息和代碼,幾乎無法回答這個問題,但是也許有人有一個想法。

好吧,從近和遠平面的經驗影響中,您可以明確地得出結論:存在嚴重錯誤。 怎么了,你不能扣除。 就我而言,我組合了不同的矩陣數學框架。 一個框架工作於專科,另一行主要。 因此,我前后對矩陣進行了多次換位,從而導致乘法順序反轉。 我刪除了一個框架(Qt),現在所描述的投影矩陣推導工作了。 非常感謝stackoverflow。 您總是可以幫助我提出問題,以便我自己找到答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM