3D 뷰어

The class E3DViewer is an interactive 3D viewer for point clouds, ZMaps, meshes and basic shapes (lines, planes, boxes and spheres).

다중 소스 디스플레이, 색상 램프, 3D 포인트 선택 및 텍스트 라벨 디스플레이가 특징입니다.
Windows 및 Linux와 호환되며 Win32, MFC 및 QT 프레임워크에 통합할 수 있습니다.

3D 뷰어 만들기

The general constructor of a 3D viewer is:
E3DViewer(EUIAPI uiApi, int orgX, int orgY, int width, int height, void* parent)
사용 방법은 운영 체제 및 사용자 인터페이스 API에 따라 다릅니다.

Windows 전용

3D 뷰어 독립 실행형 창을 만들려면:
E3DViewer(EUIAP::EUIAPI_Win32, orgX, orgY, width, height)을 사용합니다.
MFC 응용 프로그램에서 다른 창의 일부로 3D 뷰어를 만들려면:
E3DViewer(EUIAP::EUIAPI_Win32, orgX, orgY, width, height, handle to the parent window)을 사용합니다.
See the MsVc or MsVcs Easy3DViewer sample.

Windows 및 Linux

Qt 응용 프로그램에서 3D 뷰어를 만들려면:
E3DViewer(EUIAP::EUIAPI_Qt, orgX, orgY, width, height)을 사용합니다.
QOpenGLWidget 객체 내부에 클래스를 인스턴스화해야 합니다.
See the Easy3DViewer Qt sample.

렌더 소스 관리하기

렌더 소스는 표시된 엔티티입니다. It can be an EPointCloud, an EZMap, an EMesh, an E3DBox, an E3DLine, an E3DPlane or and E3DSphere. 3D 뷰어에서 하나 이상의 렌더 소스를 동시에 표시할 수 있습니다.

3D 뷰어에서 그레이 스케일로 표시된 포인트 클라우드와 허위 색상의 메시

렌더 소스 목록을 관리하려면 다음 메서드를 사용합니다.
AddRenderSource를 사용하여 현재 목록에 다른 렌더 소스를 추가합니다. 렌더 소스에는 추가 참조를 위한 이름이 있습니다.
SetRenderSource를 사용하여 렌더 소스의 내용을 변경합니다.
RemoveRenderSource를 사용하여 현재 목록에서 렌더 소스를 제거합니다.
렌더 소스 API는 다음과 같은 여러 표시 속성을 노출합니다.
Visibility (controlled by ShowRenderSource/ HideRenderSource)
Color mode (SetRenderSourceColorMode): choose between constant color (the only option for basic shapes), color ramp or point cloud color attributes.
Color (SetRenderSourceConstantColor) for render sources with constant color.
Opacity (SetRenderSourceOpacity)
Point size (SetRenderSourcePointSize): applies to point clouds and ZMaps only.
Wire frame (SetRenderSourceWireFrame): applies to meshes, boxes and planes.

        

일정한 색상, 색상 램프 또는 색상 속성으로 표시되는 포인트 클라우드
(Zivid가 데이터 제공)

색상 램프가 있는 포인트 클라우드와 결합된 와이어프레임 및 투명도가 있는 메쉬

Shading

E3DViewer can shade rendering sources using a custom version of the Eye Dome Lighting (EDL) technique.

Use SetEnableEDLShading to enable the shading.
Use SetEDLShadingFactor to adjust the shading between 0 and 1:
0 means no chasding.
1 means strong shading.and 1, respectively meaning no shading and strong shading.

EDL is a post processing technique. It impacts all opaque render sources all together. With EDL, pixels that are closer to the camera occlude neighbor pixels that are further away from the camera.

    

A mesh without and with EDL enabled

색상 램프 사용하기

렌더 소스의 색상 모드가 ESourceColorMode_Ramp인 경우, 각 점의 색상은 점의 위치 또는 속성으로 계산합니다.
Use SetColorRampMode to choose the color ramp:
EColorRampMode_HueFromX/Y/Z는 각각의 X/Y/Z 점 좌표에서 색상을 계산합니다(EColorRampMode_HueFromZ는 기본 색상 램프 모드입니다).
EColorRampMode_RGBCube는 X,Y,Z 점 좌표를 혼합하여 색상을 계산합니다.
EColorRampMode_HueFromIntensity는 점의 강도 속성에서 색상을 계산합니다.
EColorRampMode_HueFromNormal computes the colors from the normal attribute of the point.
EColorRampMode_HueFromConfidence는 점의 신뢰도 속성에서 색상을 계산합니다.
EColorRampMode_HueFromDistance는 점의 거리 속성에서 색상을 계산합니다.

   

X/Y/Z 및 RGB 큐브의 색상 램프 모드 채도

색상 램프가 정의되면 창 오른쪽(기본 위치)에 범례를 표시할 수 있습니다. 색상 램프 범례 측면을 제어하려면 Show/HideColorRampLegend, SetColorRampGraduationColorSetColorRampLocation 메서드를 사용합니다.
SetEnableSmartColorRamp 메서드로 ‘스마트 색상 램프’가 활성화되면 이상치 필터링 처리가 적용되어 노이즈를 제거하고 객체의 주요 부분에 색상을 분산합니다. 그런 다음 이상치는 일정한 빨간색 또는 파란색으로 표시됩니다.

To keep the same color ramp bounds instead of adaptive ones, use SetFixColorRampBounds.

A color ramp EColorRampMode_HueFromZ with outlier removal process:
- Z좌표가 8.3~18.8인 극단점은 빨간색으로 표시
- 98% 점의 Z 좌표는 -6.7~8.3 사이

대화형 컨트롤

Windows에서 대화형 컨트롤은 E3DViewer 클래스에 빌드됩니다.

다음과 같은 상호 작용이 가능합니다.

전환

컨트롤

뷰 회전

왼쪽 클릭 + 마우스 움직임

뷰 변환

오른쪽 클릭 + 마우스 움직임

뷰 거리 변경

마우스 휠

뷰 재설정

r

양/음 X축을 따라 보기

x / Shift+x

양/음 Y축을 따라 보기

y / Shift+y

양/음 Z축을 따라 보기

z / Shift+z

축 표시/숨기기

a

와이어 프레임 모드 활성화/비활성화

w

점 크기 증가/감소

플러스 표시(+) / 마이너스 표시(-)

사용자 정의 보기 컨트롤을 구현하려면 다음 방법을 사용합니다.
LockRotationInitialPosition, UpdateRotationPositionLockRotationFinalPosition는 회전에 의해 시점을 변경하는 시퀀스 클릭-드래그-릴리스에 해당합니다.
LockTranslationInitialPosition, UpdateTranslationPositionLockTranslationFinalPosition는 변환에 의해 시점을 변경하는 시퀀스 클릭-드래그-릴리스에 해당합니다.
UpdateViewDistance는 일반적으로 마우스 휠로 제어되는 뷰 거리를 변경합니다.
ResetView는 기본 뷰포인트를 복원합니다.

See the Qt Easy3DViewer sample for a use case of this view control API.

다음 방법을 사용하여 뷰 위치를 직접 구성할 수도 있습니다.
SetViewTarget(기본적으로 객체의 중심입니다).
뷰 방향을 선택하려면 SetViewAngle.
뷰 대상까지의 거리를 선택하려면 SetViewDistance.

매개변수 보기

3D 뷰를 사용자 정의하고 다음을 수행할 수 있습니다.

SetFieldOfView로 시야를 변경합니다.
SetProjectionType를 사용하여 투시도와 직교 뷰 사이를 전환합니다.
SetRenderAxis를 사용하여 X, Y 및 Z 축 표시를 활성화 또는 비활성화합니다.
SetAxisOrigin를 사용하여 실제 원점과 객체 중심 사이의 축 원점을 전환합니다.
SetRenderGrid가 있는 그리드 표시를 활성화 또는 비활성화합니다.
SetAutoRotate로 자동 회전 애니메이션을 활성화합니다.
SetRenderDecimationLevel와 함께 데시메이션 레벨을 사용합니다(렌더링 속도를 높이려면 일부 점 제거).

   

축 없음 / 실제 중심 축 / 윤곽 상자 축 / 그리드가 있는 축

3D 포인트 선택

점을 선택한다는 것은 E3DViewer 창에서 주어진 좌표에 가장 가까운 점을 감지하는 것을 의미합니다. 그런 다음 속성과 함께 감지된 3D 점을 텍스트 레이블로 표시할 수 있습니다.

3D 뷰에서 선택한 점의 좌표 및 속성 표시

선택한 점을 선택하는 데 사용되는 거리 임계값은 SetPickingDistanceThreshold로 정의됩니다. 선택한 위치까지의 포인트 클라우드 거리가 이 임계값보다 크면 선택한 포인트가 없습니다.
On the Win32 interface framework, the built-in control for the picking is Ctrl + mouse button.
To control the picking, use the methods Pick3DPoint, GetLastPickedPoint and ResetPicking.
To configure the E3DViewer to call a specified function when you pick a point, use the method SetPickedPointCallBack.
피킹 레이블의 표시를 구성하려면, SetPickingDisplay, SetPickingLabelSize, SetPickingLabelColorSetPickingLabelFixed을 사용합니다.

텍스트 레이블 및 3D 객체

3D 뷰어의 현재 뷰에 사용자 정의 텍스트 레이블 및 3D 객체를 추가할 수 있습니다.

왼쪽 상단 모서리에 있는 화면 레이블 및 3D 앵커가 있는 텍스트 레이블

텍스트 레이블 표시를 제어하려면 다음을 사용하십시오.
AddTextLabel를 사용하여 3D 앵커가 있거나 없는 텍스트 레이블을 추가합니다. AddTextLabel는 추가 참조에 사용되는 ID를 반환합니다.
EditTextLabel를 사용하여 레이블의 위치, 색상, 크기 또는 텍스트를 변경합니다.
GetTextLabel를 사용하여 레이블의 속성을 가져옵니다.
레이블을 제거하려면 RemoveTextLabel.
모든 레이블을 제거하려면 ClearTextLabels.
E3DViewer 클래스는 포인트 클라우드, Z맵 또는 메시 위에 E3DObject를 표시할 수도 있습니다. Use the tools Easy3DObject and Easy3DMatch to create the E3DObjects.
Register3DObjectsRemoveCurrent3DObjects 메서드를 사용하여 표시하려는 E3DObjects 목록을 관리합니다.

E3DObject에는 여러 기능(중심점, 윤곽 상자, 기본 평면...)이 포함됩니다. Show / HideFeatureFor3DObjectShow / HideFeatureForAll3DObjects 메서드를 사용하여 표시된 기능을 선택합니다.

See the Easy3DObjectExtract MSCV sample as an example for the display of E3DObjects.

윤곽 상자와 상단 위치를 표시하는 포인트 클라우드로 그린 3D 객체