Projection 3D
1 개요
3D 객체와 카메라의 정보가 주어졌을 때, 카메라에서 본 객체의 모양을 2D 이미지에 사영하는 알고리즘입니다.
2 알고리즘 상세 설명
3D Object | Projected Image |
---|---|
![]() |
![]() |
카메라는 삼차원 공간을 단번에 모두 볼 수 없으며, 동일한 각도에서 들어온 빛을 하나의 위치로 인식하게 됩니다. 시야각을 기준으로 생각할 때 실제 느껴지는 공간은 카메라를 중심으로 한 구면의 일부이며, 직사각형은 이에 대한 좋은 근사입니다.
Projection 3D 알고리즘은 카메라의 시야 방향과 시야각으로부터 결정한 직사각형으로 3D 객체를 사영한 결과를 표시합니다.
3 파라미터 설정 및 사용 방법
크게 세 가지 종류의 값, 즉 카메라의 상태, 결과 이미지의 정보, 투영할 객체를 설정해야 합니다.
카메라 상태 설정
const CResult SetAngleOfView(float f32HorizontalAngle, float f32VerticalAngle, ImageProcessing::EAngleUnit eAngleUnit = ImageProcessing::EAngleUnit_Degree)
카메라의 시야각을 설정합니다.const CResult SetCameraPosition(const Base::TPoint3<float> &ptCamPos)
카메라 위치를 설정합니다.const CResult SetCameraDirection(const Base::TPoint3<float> &ptDirection)
카메라 방향을 설정합니다.const CResult SetDirectionUp(const Base::TPoint3<float> &ptDirectionUp)
카메라의 위쪽 방향을 설정합니다.
결과 이미지 설정
const CResult SetBackgroundColor(const Base::TPoint3<uint8_t>& ptBkgColor)
결과 이미지의 배경색을 지정합니다.const CResult SetImageSize(int64_t i64Width, int64_t i64Height)
결과 이미지의 크기를 지정합니다.const CResult SetDestinationImage(Base::CFLImage &fliDst)
결과를 저장할 이미지를 지정합니다.
객체 설정
const CResult SetSourceObject(Foundation::CFL3DObject &fl3DOD)
4 예제 코드
CProjection3D projection3D;
int64_t i64Width = 562;
int64_t i64Height = 502;
float f32HorizontalAngleOfView = 50.378487f;
float f32VerticalAngleOfView = 45.000000f;
TPoint3<float> ptCameraPosition(-13.825953, -7.454907, 33.177425);
TPoint3<float> ptCameraDirection(0.420903, 0.229488, -0.877597);
TPoint3<float> ptDirectionUp(-0.099241, 0.973312, 0.206920);
TPoint3<uint8_t> ptBkgColor(51, 51, 51);
CFL3DObject floSrc;
floSrc.Load(LR"(C:\Users\Public\Documents\FLImaging\ExampleImages\Projection3D\icosahedron.ply)");
CFLImage fliDst;
projection3D.SetCameraPosition(ptCameraPosition);
projection3D.SetCameraDirection(ptCameraDirection);
projection3D.SetDirectionUp(ptDirectionUp);
projection3D.SetBackgroundColor(ptBkgColor);
projection3D.SetImageSize(i64Width, i64Height);
projection3D.SetAngleOfView(f32HorizontalAngleOfView, f32VerticalAngleOfView);
projection3D.SetSourceObject(floSrc);
projection3D.SetDestinationImage(fliDst);
projection3D.Execute();