You are here

LabVIEW Tech-Tip 8호 - OpenGL기반 3차원 그래픽 작성하기

 

LabVIEW 8.20 "20주년 버전"을 통하여 전문적인 OpenGL 3차원 그래픽 프로그래밍도 손쉽게 해결할 수 있게 되었습니다. 이번 호에서는 LabVIEW 8.20 (한글판)에 새로 포함된 3D 그림 컨트롤을 이용하여 3차원 그래픽 형상을 제작하고 디스플레이 하는 방법을 소개해 드리도록 하겠습니다.
간단하지만 강력한 3D 그림 컨트롤 API를 이용하여 3차원 형상을 생성하고 제어할 수 있을 뿐 아니라, SolidWorks, 3D Studio와 같은 3차원 그래픽 툴에서 제작한 형상(ASE, VRML, STL)을 불러들여 디스플레이 할 수 있습니다.
3D 그림 컨트롤은 빠르고 부드러운 렌더링을 위해 최적화된 데이터 핸들링 및 OpenGL 하드웨어 가속을 지원합니다. 예제 코드 다운로드 하신 후 다음 실습을 통해 LabVIEW 8.20의 3차원 그래픽을 직접 체험해 보시기 바랍니다. LabVIEW 8.20 평가판을 이용하여 객체의 추가 및 이동까지 직접 실습하실 수 있습니다.11

>> 예제 코드 다운로드                                                                                                                           

>> LabVIEW Tech-Tip 목록 보기

실습을 위한 사전 준비

1. LabVIEW 8.20을 실행 한 후, 도움말>>예제 찾기를 클릭합니다.
2. NI 예제 탐색기의 검색 탭에서 키워드를 3D라고 입력하고, 결과 창의 3D를 더블 클릭 합니다.
3. 검색 결과에서 solarsystem.vi를 더블 클릭하여 엽니다.
4. 프런트패널의 Scene Display창에 마우스 오른쪽 클릭하여 카메라 컨트롤러>>구형좌표를 선택합니다.
5. Render Dest 컨트롤을 마우스 왼쪽 클릭하여 Scene Display를 선택하고 solarsystem.vi를 실행합니다.

 

 

그림 1. solarsystem.vi

6. 그림 1과 같이 멋진 3차원의 그래픽 동영상이 프런트패널에 디스플레이 됩니다.
7. 화면에 마우스 왼쪽 클릭한 후 드래그하면 카메라 각도를 변경할 수 있으며, ctrl키를 누르고 마우스 왼쪽 클릭한 후 드래그 하면 대상물의 위치를 이동시킬 수 있습니다. shift키를 누르고 마우스 왼쪽 클릭을 하고 위로 드래그 하면 화면이 대상물이 확대되고, 아래로 드래그 하면 대상물을 축소할 수 있습니다.

3차원 도형의 기초

▶ 간단한 3차원 도형 그리기

1. ‘ctrl’ + ‘N’키를 눌러 새 VI를 열고, 프런트패널 팔레트에서 일반>>그래프>>3D 그림 컨트롤을 선택하여 프런트 패널에 적당한 크기로 위치시킵니다.
2. 블록다이어그램에서 마우스 오른쪽 클릭하여, 프로그래밍>>그래픽 & 사운드>>3D 그림 컨트롤>>객체>>객체 생성을 클릭하여 블록다이어그램에 위치시킵니다.
3. 프로그래밍>>그래픽 & 사운드>>3D 그림 컨트롤>>기하>>원뿔형 생성을 클릭하여 블록다이어그램에 위치시킵니다.
4. 객체 생성 아이콘의 오른쪽 위에 있는 장면:새 객체 노드에 마우스 오른쪽 클릭 하여 생성>>장면 객체 클래스의 메소드>>기하 설정을 클릭하면 SceneObject-Set Geometry 인보크 노드가 생성됩니다.
5. 다음 그림 2와 같이 블록다이어그램을 구성합니다.

 


그림 2. 블록 다이어그램 구성

6. 프런트패널의 디스플레이 창에 마우스 오른쪽 클릭하여 카메라 컨트롤러>>구형좌표를 선택합니다.
7. 프런트 패널에서 shift+마우스 오른쪽 클릭하여 도구 팔레트에서 손가락 모양 아이콘을 선택하여 값 수행 모드로 마우스를 바꾼 후, 디스플레이된 3차원 원뿔형의 카메라 각도, 위치 이동, 확대 및 축소 등을 실습해 봅니다. 도구 팔레트의를 클릭하면 자동 도구 선택 상태로 돌아갑니다.

 

그림 3. 간단한 3차원 도형 그리기

▶ 3차원 도형의 이동

1. 방금 제작한 VI의 블록다이어그램에서 마우스 오른쪽 클릭하여 프로그래밍>>그래픽 & 사운드>>3D 그림 컨트롤>>변환>>객체 이동을 클릭하여 블록다이어그램에 위치 시키고 다음과 같이 프로그램을 수정합니다.

 


그림 4. 블록다이어그램 구성

2. 연속 실행 버튼을 누르고, 프런트패널의 이동 컨트롤의 X,Y,Z 값을 변경하여 도형을 이동시켜 봅니다.

 


그림 5. 3차원 도형의 이동

▶ 객체의 추가 및 이동

1. SceneObject–Set Geometry 인보크 노드의 오른쪽 위 노드에 마우스 오른쪽 클릭 하여 생성>>장면 객체 클래스의 메소드>>객체>>객체 추가를 클릭하면 SceneObject–Object.Add Object 인보크 노드가 생성됩니다.
2. 프로그래밍>>그래픽 & 사운드>>3D 그림 컨트롤>>기하>>원기둥형 생성을 블록다이어그램에 추가시키고 다음과 같이 프로그램을 수정합니다.

 

그림 6. 블록다이어그램의 구성
3. 연속 실행 버튼을 누르고, 프런트패널의 이동 컨트롤의 X,Y,Z 값을 변경하면 원기둥의 위치만 변경됨을 알 수 있습니다.

 


그림 7. 객체의 추가 및 이동

[보너스 예제] 지구 사진을 이용하여 지구본 만들기

다음과 같이 직사각형 평면 지구 사진을 이용하여 3차원 지구본을 제작해보겠습니다.

 

 

그림 8. 평면 사진을 3차원 구형에 투영

1. 새 VI를 열고, 팔레트에서 일반>>문자열 & 경로>>파일 경로 컨트롤을 선택하여 프런트패널에 위치시키고, 일반>>그래프>>3D 그림 컨트롤을 선택하여 프런트 패널에 적당한 크기로 위치시킵니다.
2. 블록 다이어그램에서 프로그래밍>>그래픽 & 사운드>>3D 그림 컨트롤>>객체>>객체 생성, 프로그래밍>>그래픽 & 사운드>>3D 그림 컨트롤>>기하>>구형 생성, 프로그래밍>>그래픽 & 사운드>>3D 그림 컨트롤>>고급 그림 기능>>텍스처, 프로그래밍>>그래픽 & 사운드>>그래픽 포멧>>JPEG 파일 읽기를 선택하여 위치시킵니다.
3. 객체 생성 아이콘의 오른쪽 위에 있는 장면:새 객체 노드에 마우스 오른쪽 클릭 한 후 생성>>장면 객체 클래스의 메소드>>기하 설정을 클릭하여 SceneObject-Set Geometry 인보크 노드 생성, 같은 방법으로 생성>>장면 객체 클래스의 메소드>>텍스처>>텍스처 설정을 클릭하여 SceneObject-Texture.Set Texture 인보크 노드 생성, 생성>>장면 객체 클래스의 프로퍼티>>특수기능>>텍스처링을 클릭하여 SceneObject-Specials.Texturing 프로퍼티 노드 생성합니다.
4. 텍스처 아이콘의 오른쪽 위에 있는 새 텍스처 참조 번호 노드에 마우스 오른쪽 클릭한 후 생성>>장면 텍스처 클래스의 프로퍼티>>적용 모드를 클릭하여 SceneTexture-Apply Mode 프로퍼티 노드를 생성한 후 아래 그림과 같이 프로그래밍 합니다. 각각의 연결된 상수는 노드에 마우스 오른쪽 클릭하여 생성>>상수를 선택하면 됩니다.

 


그림 9. 블록다이어그램

5. 프로그램이 완성되었으면 프런트패널의 디스플레이 창에 마우스 오른쪽 클릭하여 카메라 컨트롤러>>구형좌표를 선택하고, 경로에는 다운받은 파일 중 Earth Morning.jpg 또는 Earth Night.jpg를 선택합니다. 프로그램을 실행 한 후, 지구본의 카메라 각도와 크기, 위치 등을 조정해봅니다.

 


그림 10. 지구 사진을 이용하여 지구본 만들기

3차원 그래픽 툴과 형상

▶ 3차원 그래픽 툴을 이용하여 제작한 형상 디스플레이

1. 새 VI를 열고, 일반>>그래프>>3D 그림 컨트롤을 선택하여 프런트 패널에 적당한 크기로 위치시킵니다
2. 블록다이어그램에서 프로그래밍>>그래픽 & 사운드>>3D 그림 컨트롤>>파일 로드>>VRML 파일 로드를 선택하여 위치시키고 다음과 같이 프로그래밍 합니다.

 


그림 11. 블록다이어그램

3. 프런트패널의 경로에 3DModel.wrl 파일을 선택하고 프로그램을 실행합니다. 파일을 읽는 동안 수 초의 시간이 소요됩니다. 디스플레이 창에 마우스 오른쪽 클릭하여 카메라 컨트롤러>>구형좌표를 선택한 후 카메라 각도, 크기, 위치 등을 조정해봅니다.

 


그림 12. 3차원 그래픽 툴을 이용하여 제작한 형상 디스플레이

▶ 3차원 그래픽 툴을 이용하여 제작한 형상의 파트만 분리하여 보기
1. VRML 파일 로드의 오른쪽 위 장면:새 객체 노드에 마우스 오른쪽 클릭을 한 후, 생성>>장면 객체 클래스의 메소드>>객체>>객체 얻기를 선택하여 SceneObject-Object.Get Object 인보크 노드를 생성하고, 다음과 같이 프로그램을 수정합니다.

 

그림 13. 블록다이어그램

2. 인덱스는 0에서 9번까지 선택할 수 있습니다. 이외의 숫자를 정하면 에러가 발생합니다. 실행하여 각각의 파트만 따로 분리되어 디스플레이 되는지 확인합니다.

 


그림 14. 3차원 그래픽 툴을 이용하여 제작한 형상의 파트만 분리하여 보기

다운 받으신 예제 코드 안의 Import3DFile Folder, RobotArm Folder 안의 예제를 각각 실행하여 보시기 바랍니다.

 


그림 15. Main_RobotArm.vi

 

추가 학습 자료

>> Create Advanced User Interfaces with OpenGL Based 3D Visualization