Qt 3D
Qt Library

 

 

Qt 3D
Qt Library

Qt3D는 Qt&OpenGL로 만든 하이레벨 3D API로 모든 종류의 렌더링 구현이 가능합니다.

Qt3D는 Qt&OpenGL로 만든 하이레벨 3D API로 모든 종류의 렌더링 구현이 가능합니다.

3D 트렌드

> 3D 유저 인터페이스 를 사용하는 산업 군이 확대 되고 있습니다.
   – Automotive IVI 시스템
   – Medical Learning 시스템에서의 3D UI 도입
– 공장자동화 시스템의 3D UI 사용
   – 지형 모델링의 3D 유저 인터페이스
   – 애니메이션의 3D 모델링
   – 자동차 와 같은 제품의 3D 시각화 구현

> Virtual Reality 가 현실화 되고 있습니다.
가상현실 체험 가능한 제품 군 출시
VR과 AR을접목시킨 가상 현실 체험 제품 출시
Oculus Rift,Steam VR/HTC VIVE,SONY Morpheus,삼성 Gear VR,구글 카드보드 등

> 다양한 산업 군에 접목시키는 가상현실 제품이 확대되고 있습니다.
Microsoft HoleLens, magic Leap 등

> 360º 촬영 가능한 이미지 & 비디오 시스템이 출시 되었습니다.
GoPro Odyssey 를 이용한 구글 카드보드 & Jump
Ricoh THETA
노키아 OZO

> 3D Scanning  과 3D Printing 시스템이 발전하고 있습니다.

Overview

> Qt 3D 는 Qt&OpenGL 로 만든 High Level 3D API 로서 Native C++와 Qt Quick API 를 제공하고 모든 종류의 Rendering 구현이 가능합니다.

> Qt는 3D 와 OpenGL Contents 를 쉽게 통합 개발 가능한 장점으로 지금까지 수많은 3D 솔루션들을 제작해 왔습니다.

> Qt 3D는 확장성이 용이하고 Multithread 지원이 가능한 아키텍처로 구성되며 Qt에서 제공되는 QML 과 C++ API 로 개발이 가능합니다.

> 본 문서는 Qt 3D로 구현한 예제 모음 입니다. 각 예제 들의 소스코드가 포함된 Tutorial 은 http://doc.qt.io/qt-5/qt3d-examples.html 에서 확인 할 수 있습니다.

> Qt 5.7 상용 제품의 체험 판은 https://www.qt.io/download-eval-for-applications-step-2/ 에서 다운로드 할 수 있습니다.

> Qt 3D에 관한 궁금 하신 부분은 qtsales@ocube.co.kr 로 문의 바랍니다.

Features

> Simulation Engine 은 3D Rendering 뿐만 아니라 AI, Logic, Audio 등을 지원하여 Medical, Robotics, 물리학, 게임 등 복잡한 시뮬레이션 표현이 가능합니다.

> Qt3D는 강력한 Front-end와 Back-end 분리시스템으로구성되어 서로 간섭 없이 유연한 환경 구축이 가능합니다.

> 고유의 오브젝트 통합을 위해 ECS(Entity Component System) 을 사용합니다.
– ECS 는 복잡하고, 방대한 코드로부터 자유롭습니다.
– 실시간으로객체의 동작을 변경시킬 수 있는 유연성을 갖고 있습니다.
– Back-end 에서 동작하는 Aspects System 에 의해 강력한 퍼포먼스를 보여줍니다.

Qt3D Examples

Qt3D Examples

Audio Visualizer Example

> Audio VisualizerQt3D rendering 과 Qt Quick 2D요소를 결합하여 어떻게 애플리케이션을 구현하는지 설명합니다.

> MediaPlayer 를 이용하여 Qt Quick 2D 의 예제를 구현합니다. 플레이어는 playButton 과 stopButton으로 컨트롤되며 mainview 에 따라 상태가 변화됩니다.

> Visualizer 로 전달된 신호는 bar animation 을 전개합니다.

> 3D 요소는 visualizer.qml 로 작성됩니다.

> NodeInstantiator 는 바생성에 사용되며 visualizer은 진행 상태 표기를 위한 Entity 를 가지고 있습니다. BarEntity.qml 을 통해 바의 회전 애니메이션과 색상 변경이 가능합니다.

Materials QML & C++ Example

Materials 은 Qt 3D의 material 시스템을 사용합니다.

Multi Viewport QML Example

> 좌측의 이미지는 Multi Viewport가 가상 카메라를 통해 윈도우의 4분면 시점 장면을 렌더링한 화면입니다. 이러한 화면은 보통 3D CAD 또는 모델링 툴 그리고 레이싱 게임의 차량용 사이드 미러의 조정 또는 CCTV 카메라 디스플레이에 적용됩니다.

> Multiple RenderViews 를 위해 Framegraph Rules 를 정의하고 FrameGraph 에서 5개의 RenderView 사물을구성합니다.

> RenderView가 동작을 표시하게 되면 RenderCommands 가 생성되고 이때 한 개의 RenderView는 다른 객체와 독립적으로 평행선에 놓이게 됩니다.

> Qt 3D는 사용가능한 코어의 숫자에 따라서 Task 기반의 접근 방식을 사용합니다.

> Zoom 기능을 위해서 QPropertyAnimation 사용됩니다.

Planets QML Example

> Planets 예제는 Qt Quick 2D elements 로 Qt 3D 렌더링을결합하여 사용하는 애플리케이션입니다. 이 예제는 태양계의 8개 행성을 보여줍니다.

> Scene3D 를 사용하여 3D 컨텐츠를 렌더링한 PlanetsMain.qml 을 호출합니다.

> 행성의 움직임과 로테이션을 포함한 메인 파트는 SolarSystem.qml 에서 작업되었습니다.

> SolarSystem.qml에서는 우선 Camera, Light, Configuration 이 추가 되고, 행성 Materials 의 Effects 그리고 행성 사진이 포함됩니다.

> 자세한 내용은 홈페이지의 http://doc.qt.io/qt-5/qt3d-planets-qml-example.html  를 참고하십시요.

> 움직임과 로테이션을 계산한 행성 데이터는 loadPlanetData() 로 불리는 planet.js 의 자바스크립트로 구성 됩니다.

> 우측의 이미지는 Animate() function 에서 호출된 화면입니다.

Scene3D QML Example

Qt Quick Application 을 통해 3D 화면을 구현합니다. 3D화면은 single active camera 와 single active light source 를포함하며, 시각 데이터는 고정된 위치에 표시됩니다.

3D scene 와 애니메이션을 위한 entity 를 main.qml 에 입력합니다.

Scene3d/AnimatedEntity.qml 에 active camera 를 저장합니다.

Shadow Map QML Example

> 우측 이미지는 Qt 3D Shadow Map 이 커스텀 렌더링 기술을 적용시키기 위해 어떻게 렌더러를 구성하는지를나타내는 예제입니다.

> 2개의 pass rendering 을 사용하기 위해 shadow mapping 기술이 적용됐습니다. 첫번째 pass에서 그림자 정보를 생성하고 두번째 pass에서 Phong shading 기술로 Forward 렌더링을 사용하여 화면을 생성하고 동시에 그림자를 그리기 위한 첫번째 패스 정보를 수집하여 사용합니다.

> Q3D 와 Q3D Renderer 모듈을 사용하여 화면을 세팅하고, ShadowMapLight.qml에 커스텀 Light 를 지정합니다.

> 데이터 기반의 Frame graphShadowMapFrameGraph.qml 파일에 구성하고 Shadow Map 을 생성합니다.

> Shadow mapping 에 Effects 를 적용하고 Phong Shading 를 사용하여 렌더링을 구성합니다.

Simple QML & C++ Example

> Simple QML&C++ 예제는 Qt3D 의 화면 렌더링에 대해서 설명합니다.

> Q3D와 Q3D 모듈을 사용하기 위해서 Qt3D.CoreQt3D Render 모듈을 호출합니다.

> 먼저 화면 구성을 세팅합니다. 본체에서 생성된 Camera 는 키보드 또는 마우스로 컨트롤 가능한 Camera controller 과 마지막 렌더링 시 사용됩니다.

> 셋팅값과 축값을 특정합니다. CameraController.qml 파일에 LogicalDevice type 을 정의 하고 애플리케이션내에서의 움직임과 축으로 사용합니다.

Wave QML Example

Wave 는 꼭지점과 기하학 shader 를 이용하여 구현합니다.

Wireframe QML Example

> Q3DScatter Rendering 은 single-pass wireframe 렌더링 방식을 사용하여 하나의 세잎매듭을 구현합니다.

> 우선 본체를 생성하기 위해 Material 과 Geometry 그리고 Transformation 을 고려해야 합니다. 이들은 모두Qcomponet 에서 Mesh, Material, Transform 의 서브클래스 형태로 정의돼 있습니다.

형태를 특정하기 위해 TransformMesh 컴퍼넌트를사용하여 추상적인 모델을 구체적인 형태로 재구성합니다.

> 이제 transform, mesh, root.material 컴퍼넌트를 조합하여 여러 객체들이 쉽게 화면 공유하도록 설정합니다.

> TrefoilKnot 커스텀 이미지를 사용한 main.qml 에 세잎매듭에 애니메이션 기능을 활용하기 위해 Qt Quick 모듈을 호출합니다.

> 다양한 레벨로 커스터마이징 할 수 있는 Material System은 매우 강력하고 유연하게 동작할수 있습니다.

> 애니메이션 Elements 를 사용하여 예제를 실행합니다.

Drawing with Qt3D

Drawing with Qt3D

Drawingwith Qt3D: Transforms

> Scene graph 는 시뮬레이션의 공간 을 담당합니다.

> Qt3DCore::Qentity: 시뮬레이션 객체

> Qt3DCore::QTransform: 위치, 크기, 방향 표시

> Transforms(변형) 계층은 parent/child 상속 관계에의 해 컨트롤 되며 이러한 방식은 Qwidget, QQuickItem, QGraphicsItem 등과 유사합니다.

> Transforms의 3D 화면을 렌더링 하기 위해 Qt3DRender::Qcamera 를 제공합니다.

Drawingwith Qt3D: Geometries

> shape 를 사용하여 렌더링 할 객체를 그립니다.

> Qt3DRender::QGeometryRenderer 의 geometry 요소로 특정 모양을 만듭니다.

> Qt 3DRender::QGeometryRenderer 는 아래와 같이다양하고 편리한 서브클래스 툴을 제공합니다.
– Qt3DExtras::QSphereMesh
– Qt3DExtras::QCuboidMesh
– Qt3DExtras::QPlaneMesh
– Qt3DExtras::QTorusMesh
– Qt3DExtras::QConeMesh
– Qt3DExtras::QCylinderMesh

> Qt3DRender::QMesh 는 파일을 로드합니다.

> 쉽게 고유의 Geometry 구현이 가능합니다.

Drawing with Qt3D: Material

> Geometry 만 사용할 경우 사물은 어둡게 표시됩니다. 그렇기 때문에 Qt3DREnder::Qmaterial 컴퍼넌트는 surface appearance 를 제공합니다.

> Q3D 는 Material 에서 아래와 같이 편리한 서브클래스들을 제공합니다.
– Qt3DExtras::QPhongMaterial
– Qt3DExtras::QPhongAlphaMaterial
– Qt3DExtras::QDiffuseMapMaterial
– Qt3DExtras::QGoochMaterial

> 고유의 Material 을 쉽게 만들 수 있습니다.

Drawing with Qt3D: Textures

> Qt3D는모든 종류의 Textures 표현이 가능합니다.

> Textures 를 사용하기 위해 한 개 또는 여러 개의 이미지를 수집합니다.

> Qt3DRender::QAbstractTexture 는 텍스쳐 타입에 따라 다양한 서브클래스들을 제공합니다.
– 1D:유용한 looup function
– 2D: 대부분의 서브클래스 타입
– 3D: 일반적인 볼륨 데이터
– Arrays of 2D…

> Qt3DRender::QTextureLoader 은 DDS 파일로 로드되며 모든 종류의 테스쳐 타입을 지원합니다.

Drawing with Qt3D: Lights

> 빌트인 된 사물은 lights 모듈로 밝기 작업을 할 수있습니다.

> Qt3DRender::QAbstractLight 컴퍼넌트는 아래의 서브클래스들을 제공합니다.
– Point light
Directional light
Spotlight

> lights는 렌더링 되지 않으며 오직 객체에 효과를 주기위해서 사용 됩니다.