Membuat proyek DirectX holografik
Catatan
Artikel ini berkaitan dengan API asli WinRT warisan. Untuk proyek aplikasi asli baru, sebaiknya gunakan OpenXR API.
Aplikasi holografik yang Anda buat untuk HoloLens akan menjadi aplikasi Platform Windows Universal (UWP). Jika menargetkan headset Windows Mixed Reality desktop, Anda dapat membuat aplikasi UWP atau aplikasi Win32.
Templat aplikasi UWP holografik DirectX 11 mirip dengan templat aplikasi DirectX 11 UWP. Templat ini mencakup perulangan program, kelas DeviceResources untuk mengelola perangkat dan konteks Direct3D, dan kelas perender konten yang disederhanakan. Ini juga memiliki IFrameworkView, sama seperti aplikasi UWP lainnya.
Namun, aplikasi realitas campuran memiliki beberapa kemampuan tambahan yang tidak ada di aplikasi UWP Direct3D biasa. Templat aplikasi Windows Mixed Reality dapat:
- Menangani sumber daya perangkat Direct3D yang terkait dengan kamera holografik.
- Ambil buffer kamera kembali dari sistem. Dalam kasus Direct3D12, buat sumber daya buffer kembali holografik dan kelola masa pakai sumber daya.
- Tangani input tatapan , dan kenali gerakan.
- Masuk ke mode penyajian stereo layar penuh.
Bagaimana cara memulainya?
Pertama-tama instal alat, ikuti instruksi tentang mengunduh Visual Studio 2019 dan templat aplikasi Windows Mixed Reality. Templat aplikasi realitas campuran tersedia di marketplace Visual Studio sebagai unduhan web, atau dengan menginstalnya sebagai ekstensi melalui UI Visual Studio.
Sekarang Anda siap untuk membuat aplikasi Windows Mixed Reality DirectX 11 Anda! Catatan, untuk menghapus konten sampel, komentari direktif praproscesor DRAW_SAMPLE_CONTENT di pch.h.
Membuat proyek UWP
Setelah alat diinstal, Anda kemudian dapat membuat proyek UWP DirectX holografik.
Untuk membuat proyek baru di Visual Studio 2019:
- Mulai Visual Studio.
- Di bagian Memulai di sebelah kanan, pilih Buat proyek baru.
- Di menu drop-down dalam dialog Buat proyek baru, pilih C++, Windows Mixed Reality, dan UWP.
- Pilih Aplikasi Holographic DirectX 11 (Universal Windows) (C++/WinRT).
Templat proyek aplikasi Holographic DirectX 11 C++/WinRT UWP di Visual Studio 2019Penting
Pastikan bahwa nama templat proyek menyertakan "(C++/WinRT)". Jika tidak, Anda memiliki versi templat proyek holografik yang lebih lama yang terinstal. Untuk mendapatkan templat proyek terbaru, instal sebagai ekstensi ke Visual Studio 2019.
- Pilih Selanjutnya.
- Isi kotak teks Nama proyek dan Lokasi , dan pilih atau ketuk Buat. Proyek aplikasi holografik dibuat.
- Untuk penargetan pengembangan hanya HoloLens 2, pastikan versi Target dan Versi minimum diatur ke Windows 10, versi 1903. Jika Anda juga menargetkan headset HoloLens (generasi ke-1) atau desktop Windows Mixed Reality, Anda dapat mengatur Versi minimum ke Windows 10, versi 1809. Ini akan memerlukan beberapa pemeriksaan adaptif versi dalam kode Anda saat menggunakan fitur baru HoloLens 2.
Mengatur Windows 10, versi 1903 sebagai target dan versi minimumPenting
Jika Anda tidak melihat Windows 10, versi 1903 sebagai opsi, Anda tidak memiliki SDK Windows 10 terbaru yang terinstal. Agar opsi ini muncul, instal versi 10.0.18362.0 atau yang lebih baru dari Windows 10 SDK.
Untuk membuat proyek baru di Visual Studio 2017:
- Mulai Visual Studio.
- Dari menu File , arahkan ke Baru dan pilih Proyek dari menu konteks. Dialog Proyek Baru terbuka.
- Perluas Terinstal di sebelah kiri dan perluas simpul bahasa Visual C++.
- Navigasikan ke simpul Holografik Universal > Windows dan pilih Aplikasi DirectX 11 Holografik (Windows Universal) (C++/WinRT).
Templat proyek aplikasi Holographic DirectX 11 C++/WinRT UWP di Visual Studio 2017Penting
Pastikan bahwa nama templat proyek menyertakan "(C++/WinRT)". Jika tidak, Anda memiliki versi templat proyek holografik yang lebih lama yang terinstal. Untuk mendapatkan templat proyek terbaru, instal sebagai ekstensi ke Visual Studio 2017.
- Isi kotak teks Nama dan Lokasi , dan pilih atau ketuk OK. Proyek aplikasi holografik dibuat.
- Untuk penargetan pengembangan hanya HoloLens 2, pastikan versi Target dan Versi minimum diatur ke Windows 10, versi 1903. Jika Anda juga menargetkan headset HoloLens (generasi ke-1) atau desktop Windows Mixed Reality, Anda dapat mengatur Versi minimum ke Windows 10, versi 1809. Ini akan memerlukan beberapa pemeriksaan adaptif versi dalam kode Anda saat menggunakan fitur baru HoloLens 2.
Mengatur Windows 10, versi 1903 sebagai target dan versi minimumPenting
Jika Anda tidak melihat Windows 10, versi 1903 sebagai opsi, Anda tidak memiliki SDK Windows 10 terbaru yang terinstal. Agar opsi ini muncul, instal versi 10.0.18362.0 atau yang lebih baru dari Windows 10 SDK.
Templat menghasilkan proyek menggunakan C++/WinRT, proyeksi bahasa C++17 dari API Windows Runtime yang mendukung pengkompilasi C++17 yang mematuhi standar. Proyek ini menunjukkan cara membuat kubus terkunci dunia yang ditempatkan 2 meter dari pengguna. Pengguna dapat mengetuk udara atau menekan tombol pada pengontrol untuk menempatkan kubus dalam posisi berbeda yang ditentukan oleh tatapan pengguna. Anda dapat memodifikasi proyek ini untuk membuat aplikasi realitas campuran apa pun.
Anda juga dapat membuat proyek baru menggunakan templat proyek holografik Visual C #, yang didasarkan pada SharpDX. Jika proyek C# holografik Anda tidak dimulai dari templat aplikasi Windows Holographic, Anda harus menyalin file ms.fxcompile.targets dari proyek templat Windows Mixed Reality C# dan mengimpornya di file your.csproj untuk mengkompilasi file HLSL yang Anda tambahkan ke proyek Anda. Templat Direct3D 12 juga disediakan dalam ekstensi templat aplikasi Windows Mixed Reality ke Visual Studio.
Tinjau Menggunakan Visual Studio untuk menyebarkan dan men-debug informasi tentang cara membuat dan menyebarkan sampel ke HoloLens, PC dengan perangkat imersif yang terpasang, atau emulator.
Instruksi lainnya di bawah ini akan mengasumsikan bahwa Anda menggunakan C++ untuk membangun aplikasi Anda.
Titik masuk aplikasi UWP
Aplikasi UWP holografik Anda dimulai dalam fungsi wWinMain di AppView.cpp. Fungsi wWinMain membuat IFrameworkView aplikasi dan memulai CoreApplication dengannya.
Dari AppView.cpp:
// The main function bootstraps into the IFrameworkView.
int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
{
winrt::init_apartment();
CoreApplication::Run(AppViewSource());
return 0;
}
Sejak saat itu, kelas AppView menangani interaksi dengan peristiwa input dasar Windows, peristiwa dan pesan CoreWindow, dan sebagainya. Ini juga akan membuat HolographicSpace yang digunakan oleh aplikasi Anda.
Membuat proyek Win32
Cara termampu untuk mulai membangun proyek holografik Win32 adalah dengan menyesuaikan sampel BasicHologram Win32.
Sampel Win32 ini menggunakan C++/WinRT, proyeksi bahasa C++17 dari API Windows Runtime yang mendukung pengkompilasi C++17 yang mematuhi standar. Proyek ini menunjukkan cara membuat kubus terkunci dunia yang ditempatkan 2 meter dari pengguna. Pengguna dapat menekan tombol pada pengontrol untuk menempatkan kubus dalam posisi berbeda yang ditentukan oleh tatapan pengguna. Anda dapat memodifikasi proyek ini untuk membuat aplikasi realitas campuran apa pun.
Titik entri aplikasi Win32
Aplikasi Win32 holografik Anda dimulai dalam fungsi wWinMain di AppMain.cpp. Fungsi wWinMain membuat HWND aplikasi dan memulai perulangan pesannya.
Dari 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;
}
Sejak saat itu, kelas AppMain menangani interaksi dengan pesan jendela dasar, dan sebagainya. Ini juga akan membuat HolographicSpace yang digunakan oleh aplikasi Anda.
Merender konten holografik
Folder Konten proyek berisi kelas untuk merender hologram di ruang holografik. Hologram default dalam templat adalah kubus berputar yang ditempatkan 2 meter dari pengguna. Menggambar kubus ini diimplementasikan di SpinningCubeRenderer.cpp, yang memiliki metode utama ini:
Metode | Penjelasan |
---|---|
CreateDeviceDependentResources |
Memuat shader dan membuat jala kubus. |
PositionHologram |
Tempatkan hologram di lokasi yang ditentukan oleh SpatialPointerPose yang disediakan. |
Update |
Memutar kubus, dan mengatur matriks model. |
Render |
Merender bingkai menggunakan vertex dan shader piksel. |
Subfolder Shaders berisi empat implementasi shader default:
Shader | Penjelasan |
---|---|
GeometryShader.hlsl |
Pass-through yang membuat geometri tidak dimodifikasi. |
PixelShader.hlsl |
Melewati data warna. Data warna diinterpolasi dan ditetapkan ke piksel pada langkah rasterisasi. |
VertexShader.hlsl |
Shader sederhana untuk melakukan pemrosesan verteks pada GPU. |
VPRTVertexShader.hlsl |
Shader sederhana untuk melakukan pemrosesan vertex pada GPU, yang dioptimalkan untuk rendering stereo Windows Mixed Reality. |
VertexShaderShared.hlsl
berisi kode umum yang dibagikan antara VertexShader.hlsl
dan VPRTVertexShader.hlsl
.
Catatan: Templat aplikasi Direct3D 12 juga menyertakan ViewInstancingVertexShader.hlsl
. Varian ini menggunakan fitur opsional D3D12 untuk merender gambar stereo secara lebih efisien.
Shader mengkompilasi saat proyek dibangun, dan dimuat dalam metode SpinningCubeRenderer::CreateDeviceDependentResources .
Berinteraksi dengan hologram Anda
Input pengguna diproses di kelas SpatialInputHandler , yang mendapatkan instans SpatialInteractionManager dan berlangganan peristiwa SourcePressed . Ini memungkinkan mendeteksi gerakan ketukan udara dan peristiwa input spasial lainnya.
Memperbarui konten holografik
Pembaruan aplikasi realitas campuran Anda dalam perulangan game, yang secara default diimplementasikan dalam metode Pembaruan di AppMain.cpp
. Metode Pembaruan memperbarui objek adegan, seperti kubus berputar, dan mengembalikan objek HolographicFrame yang digunakan untuk mendapatkan tampilan terbaru dan matriks proyeksi dan untuk menyajikan rantai pertukaran.
Metode Render dalam AppMain.cpp
mengambil HolographicFrame dan merender bingkai saat ini ke setiap kamera holografik, sesuai dengan aplikasi saat ini dan status posisi spasial.
Catatan
Templat aplikasi Windows Mixed Reality sekarang mendukung kompilasi dengan bendera mitigasi Spectre diaktifkan (/Qspectre). Pastikan untuk menginstal versi runtime Microsoft Visual C++ (MSVC) yang dimitigasi Spectre sebelum mengkompilasi konfigurasi dengan mitigasi Spectre diaktifkan. Untuk menginstal pustaka C++ yang dimitigasi Spectre, luncurkan Penginstal Visual Studio dan pilih Ubah. Navigasi ke Komponen individual dan cari "spectre". Pilih kotak yang sesuai dengan platform target dan versi MSVC yang perlu Anda kompilasi kode yang dimitigasi Spectre, dan klik Ubah untuk memulai penginstalan.