홀로그램 DirectX 프로젝트 만들기
참고
이 문서는 레거시 WinRT 네이티브 API와 관련이 있습니다. 새 네이티브 앱 프로젝트의 경우 OpenXR API를 사용하는 것이 좋습니다.
HoloLens용으로 만드는 홀로그램 앱은 UWP(유니버설 Windows 플랫폼) 앱이 됩니다. 데스크톱 Windows Mixed Reality 헤드셋을 대상으로 하는 경우 UWP 앱 또는 Win32 앱을 만들 수 있습니다.
DirectX 11 홀로그램 UWP 앱 템플릿은 DirectX 11 UWP 앱 템플릿과 매우 유사합니다. 템플릿에는 프로그램 루프, Direct3D 디바이스 및 컨텍스트를 관리하는 DeviceResources 클래스 및 간소화된 콘텐츠 렌더러 클래스가 포함됩니다. 또한 다른 UWP 앱과 마찬가지로 IFrameworkView도 있습니다.
그러나 혼합 현실 앱에는 일반적인 Direct3D UWP 앱에 없는 몇 가지 추가 기능이 있습니다. Windows Mixed Reality 앱 템플릿은 다음을 수행할 수 있습니다.
- 홀로그램 카메라와 연결된 Direct3D 디바이스 리소스를 처리합니다.
- 시스템에서 카메라 백 버퍼를 검색합니다. Direct3D12의 경우 홀로그램 백 버퍼 리소스를 만들고 리소스 수명을 관리합니다.
- 응시 입력을 처리하고 제스처를 인식합니다.
- 전체 화면 스테레오 렌더링 모드로 이동합니다.
시작하려면 어떻게 해야 하나요?
먼저 Visual Studio 2019 및 Windows Mixed Reality 앱 템플릿 다운로드에 대한 지침에 따라 도구를 설치합니다. 혼합 현실 앱 템플릿은 Visual Studio 마켓플레이스에서 웹 다운로드로 사용하거나 Visual Studio UI를 통해 확장으로 설치하여 사용할 수 있습니다.
이제 DirectX 11 Windows Mixed Reality 앱을 만들 준비가 되었습니다. 샘플 콘텐츠를 제거하려면 pch.h에서 DRAW_SAMPLE_CONTENT 전처리기 지시문을 주석으로 처리합니다.
UWP 프로젝트 만들기
도구가 설치되면 홀로그램 DirectX UWP 프로젝트를 만들 수 있습니다.
Visual Studio 2019에서 새 프로젝트를 만들려면 다음을 수행합니다.
- Visual Studio를 시작합니다.
- 오른쪽의 시작 섹션에서 새 프로젝트 만들기를 선택합니다.
- 새 프로젝트 만들기 대화 상자의 드롭다운 메뉴에서 C++, Windows Mixed Reality 및 UWP를 선택합니다.
-
홀로그램 DirectX 11 앱(유니버설 Windows)(C++/WinRT)을 선택합니다.
Visual Studio 2019의 홀로그램 DirectX 11 C++/WinRT UWP 앱 프로젝트 템플릿중요
프로젝트 템플릿의 이름에 "(C++/WinRT)"가 포함되어 있는지 확인합니다. 그렇지 않은 경우 이전 버전의 홀로그램 프로젝트 템플릿이 설치되어 있습니다. 최신 프로젝트 템플릿을 얻으려면 Visual Studio 2019의 확장으로 설치합니다 .
- 다음을 선택합니다.
- 프로젝트 이름 및 위치 텍스트 상자를 입력하고 만들기를 선택하거나 탭합니다. 홀로그램 앱 프로젝트가 만들어집니다.
- HoloLens 2 개발 대상 지정의 경우 대상 버전 및 최소 버전이 Windows 10 버전 1903으로 설정되어 있는지 확인합니다. HoloLens(1세대) 또는 데스크톱 Windows Mixed Reality 헤드셋을 대상으로 하는 경우 최소 버전을Windows 10, 버전 1809 설정할 수 있습니다. 이렇게 하려면 HoloLens 2 새로운 기능을 사용할 때 코드에서 일부 버전 적응 검사가 필요합니다.
Windows 10 버전 1903을 대상 및 최소 버전으로 설정중요
Windows 10 버전 1903이 옵션으로 표시되지 않으면 최신 Windows 10 SDK가 설치되어 있지 않습니다. 이 옵션을 표시하려면 Windows 10 SDK 버전 10.0.18362.0 이상을 설치합니다.
Visual Studio 2017에서 새 프로젝트를 만들려면 다음을 수행합니다.
- Visual Studio를 시작합니다.
- 파일 메뉴에서 새로 만들기를 가리키고 상황에 맞는 메뉴에서 프로젝트를 선택합니다. 새 프로젝트 대화 상자가 열립니다.
- 왼쪽에 설치됨 을 확장하고 Visual C++ 언어 노드를 확장합니다.
-
Windows 유니버설 > 홀로그램 노드로 이동하고 홀로그램 DirectX 11 앱(유니버설 Windows)(C++/WinRT)을 선택합니다.
Visual Studio 2017의 홀로그램 DirectX 11 C++/WinRT UWP 앱 프로젝트 템플릿중요
프로젝트 템플릿의 이름에 "(C++/WinRT)"가 포함되어 있는지 확인합니다. 그렇지 않은 경우 이전 버전의 홀로그램 프로젝트 템플릿이 설치되어 있습니다. 최신 프로젝트 템플릿을 얻으려면 Visual Studio 2017의 확장으로 설치합니다 .
- 이름 및 위치 텍스트 상자를 입력하고 확인을 선택하거나 탭합니다. 홀로그램 앱 프로젝트가 만들어집니다.
- HoloLens 2 개발 대상 지정의 경우 대상 버전 및 최소 버전이 Windows 10 버전 1903으로 설정되어 있는지 확인합니다. HoloLens(1세대) 또는 데스크톱 Windows Mixed Reality 헤드셋을 대상으로 하는 경우 최소 버전을Windows 10, 버전 1809 설정할 수 있습니다. 이렇게 하려면 HoloLens 2 새로운 기능을 사용할 때 코드에서 일부 버전 적응 검사가 필요합니다.
Windows 10 버전 1903을 대상 및 최소 버전으로 설정중요
Windows 10 버전 1903이 옵션으로 표시되지 않으면 최신 Windows 10 SDK가 설치되어 있지 않습니다. 이 옵션을 표시하려면 Windows 10 SDK 버전 10.0.18362.0 이상을 설치합니다.
템플릿은 표준 규격 C++17 컴파일러를 지원하는 Windows 런타임 API의 C++17 언어 프로젝션인 C++/WinRT를 사용하여 프로젝트를 생성합니다. 이 프로젝트는 사용자로부터 2미터 떨어진 월드로 잠긴 큐브를 만드는 방법을 보여줍니다. 사용자는 컨트롤러의 단추를 에어 탭 하거나 눌러 큐브를 사용자의 응시에 지정된 다른 위치에 배치할 수 있습니다. 이 프로젝트를 수정하여 혼합 현실 앱을 만들 수 있습니다.
SharpDX를 기반으로 하는 Visual C# 홀로그램 프로젝트 템플릿을 사용하여 새 프로젝트를 만들 수도 있습니다. 홀로그램 C# 프로젝트가 Windows Holographic 앱 템플릿에서 시작되지 않은 경우 Windows Mixed Reality C# 템플릿 프로젝트에서 ms.fxcompile.targets 파일을 복사하고.csproj 파일로 가져와 프로젝트에 추가한 HLSL 파일을 컴파일해야 합니다. Direct3D 12 템플릿은 Visual Studio에 대한 Windows Mixed Reality 앱 템플릿 확장에도 제공됩니다.
HoloLens, 몰입형 디바이스가 연결된 PC 또는 에뮬레이터에 샘플을 빌드하고 배포하는 방법에 대한 자세한 내용은 Visual Studio를 사용하여 배포 및 디버그 를 검토하세요.
아래의 나머지 지침에서는 C++를 사용하여 앱을 빌드한다고 가정합니다.
UWP 앱 진입점
홀로그램 UWP 앱은 AppView.cpp의 wWinMain 함수에서 시작됩니다. wWinMain 함수는 앱의 IFrameworkView를 만들고 CoreApplication을 시작합니다.
AppView.cpp에서:
// The main function bootstraps into the IFrameworkView.
int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
{
winrt::init_apartment();
CoreApplication::Run(AppViewSource());
return 0;
}
이 시점부터 AppView 클래스는 Windows 기본 입력 이벤트, CoreWindow 이벤트 및 메시징 등과의 상호 작용을 처리합니다. 또한 앱에서 사용하는 HolographicSpace를 만듭니다.
Win32 프로젝트 만들기
Win32 홀로그램 프로젝트 빌드를 시작하는 가장 쉬운 방법은 BasicHologram Win32 샘플을 조정하는 것입니다.
이 Win32 샘플에서는 표준 규격 C++17 컴파일러를 지원하는 Windows 런타임 API의 C++17 언어 프로젝션인 C++/WinRT를 사용합니다. 이 프로젝트는 사용자로부터 2미터 떨어진 월드로 잠긴 큐브를 만드는 방법을 보여줍니다. 사용자는 컨트롤러의 단추를 눌러 큐브를 사용자의 응시로 지정된 다른 위치에 배치할 수 있습니다. 이 프로젝트를 수정하여 혼합 현실 앱을 만들 수 있습니다.
Win32 앱 진입점
홀로그램 Win32 앱은 AppMain.cpp의 wWinMain 함수에서 시작됩니다. wWinMain 함수는 앱의 HWND를 만들고 메시지 루프를 시작합니다.
AppMain.cpp에서:
int APIENTRY wWinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
winrt::init_apartment();
App app;
// Initialize global strings, and perform application initialization.
app.Initialize(hInstance);
// Create the HWND and the HolographicSpace.
app.CreateWindowAndHolographicSpace(hInstance, nCmdShow);
// Main message loop:
app.Run(hInstance);
// Perform application teardown.
app.Uninitialize();
return 0;
}
해당 시점부터 AppMain 클래스는 기본 창 메시지와의 상호 작용 등을 처리합니다. 또한 앱에서 사용하는 HolographicSpace를 만듭니다.
홀로그램 콘텐츠 렌더링
프로젝트의 Content 폴더에는 홀로그램 공간에서 홀로그램을 렌더링하기 위한 클래스가 포함되어 있습니다. 템플릿의 기본 홀로그램은 사용자로부터 2미터 떨어진 회전 큐브입니다. 이 큐브 그리기는 다음 주요 메서드가 있는 SpinningCubeRenderer.cpp에서 구현됩니다.
방법 | 설명 |
---|---|
CreateDeviceDependentResources |
셰이더를 로드하고 큐브 메시를 만듭니다. |
PositionHologram |
제공된 SpatialPointerPose에서 지정한 위치에 홀로그램을 배치합니다. |
Update |
큐브를 회전하고 모델 행렬을 설정합니다. |
Render |
꼭짓점 및 픽셀 셰이더를 사용하여 프레임을 렌더링합니다. |
셰이더 하위 폴더에는 네 가지 기본 셰이더 구현이 포함됩니다.
셰이더 | 설명 |
---|---|
GeometryShader.hlsl |
기하 도형을 수정되지 않은 상태로 두는 통과입니다. |
PixelShader.hlsl |
색 데이터를 전달합니다. 색 데이터는 보간되고 래스터화 단계에서 픽셀에 할당됩니다. |
VertexShader.hlsl |
GPU에서 꼭짓점 처리를 수행하는 간단한 셰이더입니다. |
VPRTVertexShader.hlsl |
GPU에서 꼭짓점 처리를 수행하는 간단한 셰이더로, 스테레오 렌더링에 최적화되어 Windows Mixed Reality. |
VertexShaderShared.hlsl
에는 및 간에 VertexShader.hlsl
공유되는 일반적인 코드가 포함되어 있습니다 VPRTVertexShader.hlsl
.
참고: Direct3D 12 앱 템플릿에는 도 포함됩니다 ViewInstancingVertexShader.hlsl
. 이 변형은 D3D12 선택적 기능을 사용하여 스테레오 이미지를 보다 효율적으로 렌더링합니다.
셰이더는 프로젝트가 빌드될 때 컴파일되고 , SpinningCubeRenderer::CreateDeviceDependentResources 메서드에 로드됩니다.
홀로그램과 상호 작용
사용자 입력은 SpatialInputHandler 클래스에서 처리되며, SpatialInteractionManager instance 가져오고 SourcePressed 이벤트를 구독합니다. 이를 통해 에어 탭 제스처 및 기타 공간 입력 이벤트를 감지할 수 있습니다.
홀로그램 콘텐츠 업데이트
혼합 현실 앱은 게임 루프에서 업데이트되며, 기본적으로 의 Update 메서드에서 AppMain.cpp
구현됩니다.
Update 메서드는 회전하는 큐브와 같은 장면 개체를 업데이트하고 최신 보기 및 프로젝션 행렬을 가져와 스왑 체인을 표시하는 데 사용되는 HolographicFrame 개체를 반환합니다.
의 AppMain.cpp
Render 메서드는 HolographicFrame을 사용하고 현재 앱 및 공간 위치 상태에 따라 현재 프레임을 각 홀로그램 카메라에 렌더링합니다.
참고
이제 Windows Mixed Reality 앱 템플릿은 Spectre 완화 플래그를 사용하도록 설정된 컴파일을 지원합니다(/Qspectre). Spectre 완화를 사용하도록 설정된 구성을 컴파일하기 전에 Spectre 완화 버전의 MSVC(Microsoft Visual C++) 런타임 라이브러리를 설치해야 합니다. Spectre 완화 C++ 라이브러리를 설치하려면 Visual Studio 설치 관리자 시작하고 수정을 선택합니다. 개별 구성 요소로 이동하여 "spectre"를 검색합니다. Spectre 완화 코드를 컴파일해야 하는 대상 플랫폼 및 MSVC 버전에 해당하는 상자를 선택하고 수정 을 클릭하여 설치를 시작합니다.