資源簡介
實現(xiàn)將2:1全景圖(矩形球面投影equirectangular)劃分成即將要進(jìn)行的cubemap所需要的6個紋理面,附件代碼只是一個簡單的劃分例子,僅供入門參考,集成開發(fā)環(huán)境是vs2010,可以直接打開運(yùn)行看效果。如果想實現(xiàn)更為復(fù)雜的功能,則需要在此基礎(chǔ)上修改完善。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?//為了在一個窗口顯示多幅圖像而加的頭文件
//#include?“split.h“
using?namespace?cv;
using?namespace?std;
const?float?M_PI?=?3.1415926;
//?Define?our?six?cube?faces.
//?0?-?3?are?side?faces?clockwise?order
//?4?and?5?are?top?and?bottom?respectively
float?faceTransform[6][2]?=
{
{0?0}
{M_PI?/?2?0}
{M_PI?0}
{-M_PI?/?2?0}
{0?-M_PI?/?2}
{0?M_PI?/?2}
};
//?Map?a?part?of?the?equirectangular?panorama?(in)?to?a?cube?face
//?(face).?The?ID?of?the?face?is?given?by?faceId.?The?desired
//?width?and?height?are?given?by?width?and?height.
inline?void?createCubeMapFace(const?Mat?&in?Mat?&face?int?faceId?=?0?const?int?width?=?-1?const?int?height?=?-1)
{
float?inWidth?=?in.cols;
float?inHeight?=?in.rows;
//?Allocate?map
Mat?mapx(width?height?CV_32F);//(in.size()?CV_32F);董帆修改了width和height的位置
Mat?mapy(width?height?CV_32F);//(in.size()?CV_32F);
//?Calculate?adjacent?(ak)?and?opposite?(an)?of?the
//?triangle?that?is?spanned?from?the?sphere?center
//to?our?cube?face.
const?float?an?=?sin(M_PI?/?4);
const?float?ak?=?cos(M_PI?/?4);
const?float?ftu?=?faceTransform[faceId][0];
const?float?ftv?=?faceTransform[faceId][1];
//?For?each?point?in?the?target?image
//?calculate?the?corresponding?source?coordinates.對目標(biāo)圖像的每個點計算相應(yīng)的源坐標(biāo)系
for(int?y?=?0;?y? for(int?x?=?0;?x?
//?Map?face?pixel?coordinates?to?[-1?1]?on?plane
float?nx?=?(float)y?/?(float)height?-?0.5f;
float?ny?=?(float)x?/?(float)width?-?0.5f;
nx?*=?2;
ny?*=?2;
//?Map?[-1?1]?plane?coords?to?[-an?an]
//?thats?the?coordinates?in?respect?to?a?unit?sphere
//?that?contains?our?box.
nx?*=?an;
ny?*=?an;
float?u?v;
//?Project?from?plane?to?sphere?surface.
if(ftv?==?0)?{
//?Center?faces
u?=?atan2(nx?ak);
v?=?atan2(ny?*?cos(u)?ak);
u?+=?ftu;
}?else?if(ftv?>?0)?{
//?Bottom?face
float?d?=?sqrt(nx?*?nx?+?ny?*?ny);
v?=?M_PI?/?2?-?atan2(d?ak);
u?=?atan2(ny?nx);
}?else?{
//?Top?face
float?d?=?sqrt(nx?*?nx?+?ny?*?ny);
v?=?-M_PI?/?2?+?atan2(d?ak);
u?=?atan2(-ny?nx);
}
//?Map?from?angular?coordinates?to?[-1?1]?respectively.
u?=?u?/?(M_PI);
v?=?v?/?(M_PI?/?2);
//?Warp?around?if?our?coordinates?are?out?of?bounds.
while?(v?-1)?{
v?+=?2;
u?+=?1;
}
while?(v?>?1)?{
v?-=?2;
u?+=?1;
}
while(u?-1)?{
u?+=?2;
}
while(u?>?1)?{
u?-=?2;
}
//?Map?from?[-1?1]?to?in?texture?space
u?=?u?/?2.0f?+?0.5f;
v?=?v?/?2.0f?+?0.5f;
u?=?u?*?(inWidth?-?1);
v?=?v?*?(inHeight?-?1);
//?Save?the?result?for?this?pixel?in?map
mapx.at(x?y)?=?u;
mapy.at(x?y)?=?v;
}
}
//?Recreate?output?image?if?it?has?wrong?size?or?type.
i
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????87552??2016-11-18?15:26??OpencvTest00\Debug\OpencvTest.exe
?????文件????1031696??2016-11-18?15:26??OpencvTest00\Debug\OpencvTest.ilk
?????文件????1321984??2016-11-18?15:26??OpencvTest00\Debug\OpencvTest.pdb
?????文件???73793536??2016-11-18?15:25??OpencvTest00\ipch\opencvtest-1b3049e4\opencvtest-296a8017.ipch
?????文件?????164249??2016-07-10?06:46??OpencvTest00\OpencvTest\bitmap360.jpg
?????文件????????682??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\cl.command.1.tlog
?????文件??????26462??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\CL.read.1.tlog
?????文件????????372??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\CL.write.1.tlog
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件??????????2??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件???????2126??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件???????4904??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件????????798??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\li
?????文件????????406??2016-11-18?15:26??OpencvTest00\OpencvTest\Debug\mt.command.1.tlog
............此處省略34個文件信息
評論
共有 條評論