[VTK] MFC์์ VTK 3D ๋ชจ๋ธ ํ์ผ ๋ถ๋ฌ์ Renderingํ๊ธฐ
VTK๋ Visualization ToolKit์ ์ฝ์์ด์ฃ ?
์์๋ค์ํผ VTK์๋ 3D ๋ฐ์ดํฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํ๋๋ฐ ๋ง๊ฐํ ๊ธฐ๋ฅ๋ค์ด ํฌํจ๋์ด ์์ต๋๋ค.
๊ทธ ์ค Point Cloud Data๋ฅผ ํํํด์ฃผ๋ ๊ฒ์ด ๊ฐ์ฅ ๊ธฐ์ด๋ผ ์๊ฐ๋๋๋ฐ์.
์ด๋ฒ ํฌ์คํ ์์๋ 3D ๋ชจ๋ธ ํ์ผ(PLY, STL, OBJ ๋ฑ)์ ๋ถ๋ฌ์ 3D Renderingํ๋ ์์ ๋ฅผ ์๊ฐํ๊ณ ์ ํฉ๋๋ค.
์๋ ๋งํฌ๋ VTK์์ ์ ๊ณตํ๋ ๊ณต์ ์์ ์ฌ์ดํธ์ ๋๋ค.
๋งํฌ: https://lorensen.github.io/VTKExamples/site/Cxx
<MFC 3D Rendering ์์ >
์ฐ๊ด๋ ์์ ๋ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์์ต๋๋ค.
๋งํฌ: https://lorensen.github.io/VTKExamples/site/Cxx/Snippets/ReadPolyData/
3D ํ๋ก๊ทธ๋จ์ ์ ํ์ ๋ถ์ด๋ผ๋ฉด ์ต์ํ ๋์์ด๋ผ ์๊ฐ๋ฉ๋๋ค.
ํ์ , ํ๋, ์ถ์, ์ด๋์ ๊ฐ๋จํ ๋์๋ค์ ํฉ๋๋ค. ๋ฌผ๋ก ๋ฒํผ์ ๋ฐ๋ฅธ ๋์์ด ์กฐ๊ธ ๋ค๋ฅผ ์ ์์ต๋๋ค.
3D ๋ชจ๋ธ ํ์ผ์ ์๋ ๋งํฌ์์ ์ฐธ๊ณ ํ์ต๋๋ค.
๋งํฌ: https://www.laserdesign.com/sample-files/type/ply/
์, ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ ๋ง๋ค๊ธฐ๋ฅผ ์ค์ตํด ๋ณด๊ฒ ์ต๋๋ค.
(ํต์ฌ ๋ถ๋ถ๋ง ์ค๋ช
ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ณธ๋ฌธ ํ๋จ์ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.)
๋จผ์ Dialog ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ MFC์์ VTK ์ฌ์ฉ์ ์ํด ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ค์ ํฉ๋๋ค.
1. VTK ์ด๊ธฐํ
Main Dialog header ํ์ผ์ ์๋์ ์ด๊ธฐํ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
#pragma once
#include <vtkAutoInit.h>
#define vtkRenderingCore_AUTOINIT 3(vtkRenderingOpenGL2,vtkInteractionStyle, vtkRenderingFreeType)
#define vtkRenderingContext2D_AUTOINIT 1(vtkRenderingContextOpenGL2)
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkRenderWindow.h>
#include <vtkSmartPointer.h>
#include <vtkPLYReader.h>
#include <vtkPolyDataMapper.h>
2. Picture Control์ ๊ทธ๋ ค์ง vtkRenderWindow๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
<Header File>
public :
vtkNew<vtkRenderWindow> m_vtkRenderWindow;
void InitializeVTKWindow(void* hWnd);
void ResizeVTKWindow();
<Source File>
void CExampleLinePlotDlg::InitializeVTKWindow(void* hWnd)
{
vtkNew<vtkRenderWindowInteractor> interactor;
interactor->SetInteractorStyle(vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New());
vtkNew<vtkRenderer> renderer;
renderer->SetBackground(0.1, 0.2, 0.3);
m_vtkRenderWindow->SetParentId(hWnd);
m_vtkRenderWindow->SetInteractor(interactor);
m_vtkRenderWindow->AddRenderer(renderer);
m_vtkRenderWindow->Render();
}
void CExampleLinePlotDlg::ResizeVTKWindow()
{
CRect rc;
GetDlgItem(IDC_PC_CHART)->GetClientRect(rc);
m_vtkRenderWindow->SetSize(rc.Width(), rc.Height());
}
3. Button Event์ 3D ๋ชจ๋ธ ํ์ผ์ ๋ถ๋ฌ์ค๋ ์ฝ๋๋ฅผ ์ ์ํฉ๋๋ค.
์ฐธ๊ณ ๋ก, ์์ ๋ PLY๋ง ์ฌ์ฉํ์ง๋ง 'vtkSTLReader'ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด STL ํ์ผ๋ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
void CExample3DRenderingDlg::OnBnClickedBtnLoadply()
{
vtkNew<vtkPLYReader> pPLYReader;
pPLYReader->SetFileName("Anno.ply");
pPLYReader->Update();
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputConnection(pPLYReader->GetOutputPort());
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
vtkNew<vtkRenderer> renderer;
renderer->AddActor(actor);
renderer->SetBackground(.1, .2, .3);
renderer->ResetCamera();
m_vtkRenderWindow->AddRenderer(renderer);
m_vtkRenderWindow->Render();
renderer->ResetCamera();
m_vtkRenderWindow->Render();
}
์์ธํ ๋ด์ฉ์ ์ฒจ๋ถ๋ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
'Programming > VTK' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[VTK] MFC์์ VTK ๋ง์ฐ์ค ์ผ์ชฝ ํด๋ฆญ ์ด๋ฒคํธ ๋ฐ ์ขํ ์ ๋ณด ์ป๊ธฐ (0) | 2019.07.01 |
---|---|
[VTK] MFC์์ VTK ScalrBar ์ฌ์ฉํ๊ธฐ (0) | 2019.06.12 |
[VTK] MFC์์ VTK 2D Line Plot ์ฌ์ฉํ๊ธฐ (5) | 2019.05.30 |
[VTK] MFC์์ VTK 2D Bar ์ฐจํธ ์ฌ์ฉํ๊ธฐ (0) | 2019.05.28 |
[VTK] Visual Studio 2015 MFC์์ VTK ์ฌ์ฉ ์ค๋นํ๊ธฐ (9) | 2019.05.26 |
[VTK] VTK 8.2 ๋ฐ Visual Studio 2015 ํ๊ฒฝ ๊ตฌ์ฑ (22) | 2019.05.15 |
[VTK] VTK SDK ์๊ฐ (2) | 2019.05.13 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[VTK] MFC์์ VTK ๋ง์ฐ์ค ์ผ์ชฝ ํด๋ฆญ ์ด๋ฒคํธ ๋ฐ ์ขํ ์ ๋ณด ์ป๊ธฐ
[VTK] MFC์์ VTK ๋ง์ฐ์ค ์ผ์ชฝ ํด๋ฆญ ์ด๋ฒคํธ ๋ฐ ์ขํ ์ ๋ณด ์ป๊ธฐ
2019.07.01 -
[VTK] MFC์์ VTK ScalrBar ์ฌ์ฉํ๊ธฐ
[VTK] MFC์์ VTK ScalrBar ์ฌ์ฉํ๊ธฐ
2019.06.12 -
[VTK] MFC์์ VTK 2D Line Plot ์ฌ์ฉํ๊ธฐ
[VTK] MFC์์ VTK 2D Line Plot ์ฌ์ฉํ๊ธฐ
2019.05.30 -
[VTK] MFC์์ VTK 2D Bar ์ฐจํธ ์ฌ์ฉํ๊ธฐ
[VTK] MFC์์ VTK 2D Bar ์ฐจํธ ์ฌ์ฉํ๊ธฐ
2019.05.28