Rumah pangkalan data tutorial mysql 在Unity中使用Direct2D

在Unity中使用Direct2D

Jun 07, 2016 pm 03:48 PM
unity guna

在Unity中可能需要在纹理上面绘制文字、图像等。比如游戏中的显示器,手机等等等等等。太多了。 Unity的Textute2D类提供了设置像素的操作, 但是这效率实在不敢恭维。 汉字数量巨大,全部贴在一张图上既耗空间,不方便改变字体样式。 使用FreeType2等CPU计算

在Unity中可能需要在纹理上面绘制文字、图像等。比如游戏中的显示器,手机等等等等等。太多了。

Unity的Textute2D类提供了设置像素的操作,但是这效率实在不敢恭维。


汉字数量巨大,全部贴在一张图上既耗空间,不方便改变字体样式。

使用FreeType2等CPU计算的文字库一帧又画不了多少,毕竟还要提交到显存


于是瞄准了Direct2D,当初学习这图像接口时就被微软说的“能与Direct3D进行完美交互”所吸引。

好在Unity支持DX11了,我们能够在Unity上面使用Direct2D了。所以只能在支持DX11的机器上面运行。


首先得说一下授权许可,毕竟Unity是一款商业软件。

Unity明确指出:Unity Pro才能使用Plug-in,即插件。Unity Free版本是不可以使用的。

但是,它说的是“插件”,而不是“本地代码”。

有童鞋肯定就会说我这是咬文嚼字了。非也非也,“插件”是指遵循当前环境并按照其对接口的相关规定写的代码。


那么,Unity插件有什么规定呢?

需要提供UnitySetGraphicsDevice与UnityRenderEvent

前者获取图形设备信息与图像设备相关事件,后者提供渲染事件。这两个接口是Unity自动调用的(或者也算半自动),

不能显式调用——因为没意义.....


你的本地代码提供了这两个接口就算插件,否则就是普通的本地代码库。

作为本地代码库不能放在plugin文件夹内,不能调用,因为Unity会认为是个插件,而应该直接放在工厂目录下。


再者,假设你写了个插件却放在这个目录下,那么那两个接口不能自动被调用。



好了,就这样可以创建Direct2D了,那个版本的?1.0?1.1?甚至1.2?随意啦!


但是,我建议这样做:

[cpp] view plaincopyprint?

  1. #include "windows.h" 
  2.  
  3. HMODULE WINAPI LoadLibraryWrapA(char* file_name){ 
  4.     return LoadLibraryA(file_name); 
  5.  
  6. HMODULE WINAPI LoadLibraryWrapW(wchar_t* file_name){ 
  7.     return LoadLibraryW(file_name); 
  8.  
  9. BOOL WINAPI FreeLibraryWrap(HMODULE hLibModule){ 
  10.     return FreeLibrary(hLibModule); 
  11.  
  12. FARPROC WINAPI GetProcAddressWrap(HMODULE hModule, char* lpProcName){ 
  13.     return GetProcAddress(hModule, lpProcName); 
#include "windows.h"

HMODULE WINAPI LoadLibraryWrapA(char* file_name){
    return LoadLibraryA(file_name);
}

HMODULE WINAPI LoadLibraryWrapW(wchar_t* file_name){
    return LoadLibraryW(file_name);
}

BOOL WINAPI FreeLibraryWrap(HMODULE hLibModule){
    return FreeLibrary(hLibModule);
}

FARPROC WINAPI GetProcAddressWrap(HMODULE hModule, char* lpProcName){
    return GetProcAddress(hModule, lpProcName);
}
Salin selepas log masuk


面的代码封装成dll文件,这样像C++一样显式调用dll文件。

好处如下:

1. 方便: 不知道是不是Unity的原因,反正假设你想一般dll一样使用Unity C#中的DllImport,

使用后除非关闭Unity,否则不能再次修改dll文件。这简直蛋疼,修改一行代码就需要:

关闭Unity -> 复制dll -> 打开Unity

2. 方便调试,在VS Express 2013 for Windows Desktop中,选择


工具——附加到进程,选择Unity进程


就能直接调试dll文件了,很方便。


使用GetProcAddressWrap获取函数指针之后使用C#中的

Marshal.GetDelegateForFunctionPointer

就能将函数指针换成C#中的托管方法。


比如先定义:

[csharp] view plaincopyprint?

  1. // 初始化 D2D 管理器 
  2. publicdelegate System.UInt32 D2DManagerInit(); 
  3. public D2DManagerInit m_D2DManagerInit; 
    // 初始化 D2D 管理器
    public delegate System.UInt32 D2DManagerInit();
    public D2DManagerInit m_D2DManagerInit;
Salin selepas log masuk

使用:

[csharp] view plaincopyprint?

  1. proc = GetProcAddressWrap(m_unityd2ddll, "D2DManagerInit"); 
  2. m_D2DManagerInit = (D2DManagerInit)Marshal.GetDelegateForFunctionPointer(proc, typeof(D2DManagerInit)); 
            proc = GetProcAddressWrap(m_unityd2ddll, "D2DManagerInit");
            m_D2DManagerInit = (D2DManagerInit)Marshal.GetDelegateForFunctionPointer(proc, typeof(D2DManagerInit));
Salin selepas log masuk

之后使用m_D2DManagerInit()就能调用dll文件中的D2DManagerInit函数了。


最后在OnApplicationQuit里面释放即可。




创建 D2D 1.0 的 流程:


首先创建一个公共的  D2D工厂  ,毕竟可能创建多个


Unity中 Texture2D::GetNativeTextureID在DX11环境下就能获取一个ID3D11Texture2D的指针


这个指针能获取     D3D11设备  ,D3D11设备 能获取当前    D3D11设备上下文。


D3D与D2D交互要D3D设备有D3D11_CREATE_DEVICE_BGRA_SUPPORT(D3D11环境下)




D3D11设备   -------> 创建Texture2D,D3D11_TEXTURE2D_DESC参考如下:

[cpp] view plaincopyprint?

  1. sharedTextureDesc.Width = 512; 
  2. sharedTextureDesc.Height = 512; 
  3. sharedTextureDesc.MipLevels = 1; 
  4. sharedTextureDesc.ArraySize = 1; 
  5. sharedTextureDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; 
  6. sharedTextureDesc.SampleDesc.Count = 1; 
  7. sharedTextureDesc.Usage = D3D11_USAGE_DEFAULT; 
  8. sharedTextureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; 
            sharedTextureDesc.Width = 512;
            sharedTextureDesc.Height = 512;
            sharedTextureDesc.MipLevels = 1;
            sharedTextureDesc.ArraySize = 1;
            sharedTextureDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
            sharedTextureDesc.SampleDesc.Count = 1;
            sharedTextureDesc.Usage = D3D11_USAGE_DEFAULT;
            sharedTextureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
Salin selepas log masuk

必须有D3D11_BIND_RENDER_TARGET,否则不能创建渲染目标呈现器。记得保留这个指针。



然后对 D3D11Textue2D 使用QueryInterface获取 Dxgi表面

使用这个Dxgi表面利用D2D工厂CreateDxgiSurfaceRenderTarget创建RT

就好了,记得释放这个Dxgi表面:



渲染D2D

如同一般那样,不过由于变成了dll,可能一些习惯要改成C语言那样。


呈现D2D

渲染完成后,使用

D3D11设备上下文的CopyResource方法就能拷贝渲染结果到目标纹理了:


DirectWrite简直不错:

在Unity中使用Direct2D



稍微写点代码就能模仿某游戏那样的效果:

在Unity中使用Direct2D

嗯,看来还不够完善,再加油吧:


话说自带的Sprite着色器很不错,简直赞

在Unity中使用Direct2D

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan pautan magnet Cara menggunakan pautan magnet Feb 18, 2024 am 10:02 AM

Pautan magnet ialah kaedah pautan untuk memuat turun sumber, yang lebih mudah dan cekap daripada kaedah muat turun tradisional. Pautan magnet membolehkan anda memuat turun sumber secara peer-to-peer tanpa bergantung pada pelayan perantara. Artikel ini akan memperkenalkan cara menggunakan pautan magnet dan perkara yang perlu diberi perhatian. 1. Apakah pautan magnet? Pautan magnet ialah kaedah muat turun berdasarkan protokol P2P (Peer-to-Peer). Melalui pautan magnet, pengguna boleh menyambung terus kepada penerbit sumber untuk melengkapkan perkongsian dan muat turun sumber. Berbanding dengan kaedah muat turun tradisional, magnet

Cara menggunakan fail mdf dan mds Cara menggunakan fail mdf dan mds Feb 19, 2024 pm 05:36 PM

Cara menggunakan fail mdf dan fail mds Dengan kemajuan teknologi komputer yang berterusan, kami boleh menyimpan dan berkongsi data dalam pelbagai cara. Dalam bidang media digital, kita sering menghadapi beberapa format fail khas. Dalam artikel ini, kami akan membincangkan format fail biasa - fail mdf dan mds, dan memperkenalkan cara menggunakannya. Pertama, kita perlu memahami maksud fail mdf dan fail mds. mdf ialah lanjutan fail imej CD/DVD, dan fail mds ialah fail metadata bagi fail mdf.

Apakah perisian crystaldiskmark? -Bagaimana menggunakan crystaldiskmark? Apakah perisian crystaldiskmark? -Bagaimana menggunakan crystaldiskmark? Mar 18, 2024 pm 02:58 PM

CrystalDiskMark ialah alat penanda aras HDD kecil untuk pemacu keras yang cepat mengukur kelajuan baca/tulis berurutan dan rawak. Seterusnya, biarkan editor memperkenalkan CrystalDiskMark kepada anda dan cara menggunakan crystaldiskmark~ 1. Pengenalan kepada CrystalDiskMark CrystalDiskMark ialah alat ujian prestasi cakera yang digunakan secara meluas yang digunakan untuk menilai kelajuan baca dan tulis serta prestasi pemacu keras mekanikal dan pemacu keadaan pepejal (SSD Prestasi I/O rawak. Ia adalah aplikasi Windows percuma dan menyediakan antara muka mesra pengguna dan pelbagai mod ujian untuk menilai aspek prestasi cakera keras yang berbeza dan digunakan secara meluas dalam ulasan perkakasan

Bagaimana untuk memuat turun foobar2000? -Cara menggunakan foobar2000 Bagaimana untuk memuat turun foobar2000? -Cara menggunakan foobar2000 Mar 18, 2024 am 10:58 AM

foobar2000 ialah perisian yang boleh mendengar sumber muzik pada bila-bila masa Ia membawakan anda semua jenis muzik dengan kualiti bunyi tanpa kehilangan Versi pemain muzik yang dipertingkatkan membolehkan anda mendapatkan pengalaman muzik yang lebih komprehensif dan selesa mainkan audio lanjutan pada komputer Peranti dipindahkan ke telefon mudah alih untuk memberikan pengalaman main balik muzik yang lebih mudah dan cekap Reka bentuk antara muka adalah ringkas, jelas dan mudah digunakan Ia menggunakan gaya reka bentuk minimalis tanpa terlalu banyak hiasan dan operasi yang menyusahkan untuk bermula dengan cepat. Ia juga menyokong pelbagai kulit dan Tema, memperibadikan tetapan mengikut pilihan anda sendiri, dan mencipta pemain muzik eksklusif yang menyokong main balik berbilang format audio. Ia juga menyokong fungsi perolehan audio untuk melaraskan kelantangan kepada keadaan pendengaran anda sendiri untuk mengelakkan kerosakan pendengaran yang disebabkan oleh kelantangan yang berlebihan. Seterusnya, izinkan saya membantu anda

Cara menggunakan NetEase Mailbox Master Cara menggunakan NetEase Mailbox Master Mar 27, 2024 pm 05:32 PM

NetEase Mailbox, sebagai alamat e-mel yang digunakan secara meluas oleh netizen Cina, sentiasa memenangi kepercayaan pengguna dengan perkhidmatannya yang stabil dan cekap. NetEase Mailbox Master ialah perisian e-mel yang dicipta khas untuk pengguna telefon mudah alih. Ia sangat memudahkan proses menghantar dan menerima e-mel dan menjadikan pemprosesan e-mel kami lebih mudah. Jadi bagaimana untuk menggunakan NetEase Mailbox Master, dan apakah fungsi khusus yang ada di bawah, editor tapak ini akan memberi anda pengenalan terperinci, dengan harapan dapat membantu anda. Mula-mula, anda boleh mencari dan memuat turun aplikasi NetEase Mailbox Master di gedung aplikasi mudah alih. Cari "Induk Peti Mel NetEase" dalam App Store atau Baidu Mobile Assistant, dan kemudian ikut gesaan untuk memasangnya. Selepas muat turun dan pemasangan selesai, kami membuka akaun e-mel NetEase dan log masuk. Antara muka log masuk adalah seperti yang ditunjukkan di bawah

Cara menggunakan aplikasi Baidu Netdisk Cara menggunakan aplikasi Baidu Netdisk Mar 27, 2024 pm 06:46 PM

Storan awan telah menjadi bahagian yang amat diperlukan dalam kehidupan dan kerja harian kita pada masa kini. Sebagai salah satu perkhidmatan storan awan terkemuka di China, Baidu Netdisk telah memenangi hati sebilangan besar pengguna dengan fungsi storan yang berkuasa, kelajuan penghantaran yang cekap dan pengalaman operasi yang mudah. Dan sama ada anda ingin menyandarkan fail penting, berkongsi maklumat, menonton video dalam talian atau mendengar muzik, Baidu Cloud Disk boleh memenuhi keperluan anda. Walau bagaimanapun, ramai pengguna mungkin tidak memahami penggunaan khusus aplikasi Baidu Netdisk, jadi tutorial ini akan memperkenalkan anda tentang cara menggunakan aplikasi Baidu Netdisk secara terperinci Jika anda masih keliru, sila ikuti artikel ini untuk mengetahui lebih lanjut! Cara menggunakan Cakera Rangkaian Awan Baidu: 1. Pemasangan Mula-mula, semasa memuat turun dan memasang perisian Baidu Cloud, sila pilih pilihan pemasangan tersuai.

Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Tutorial BTCC: Bagaimana untuk mengikat dan menggunakan dompet MetaMask pada pertukaran BTCC? Apr 26, 2024 am 09:40 AM

MetaMask (juga dipanggil Little Fox Wallet dalam bahasa Cina) ialah perisian dompet penyulitan percuma dan diterima baik. Pada masa ini, BTCC menyokong pengikatan pada dompet MetaMask Selepas mengikat, anda boleh menggunakan dompet MetaMask untuk log masuk dengan cepat, menyimpan nilai, membeli syiling, dsb., dan anda juga boleh mendapatkan bonus percubaan 20 USDT untuk pengikatan pertama. Dalam tutorial dompet BTCCMetaMask, kami akan memperkenalkan secara terperinci cara mendaftar dan menggunakan MetaMask, dan cara mengikat dan menggunakan dompet Little Fox dalam BTCC. Apakah dompet MetaMask? Dengan lebih 30 juta pengguna, MetaMask Little Fox Wallet ialah salah satu dompet mata wang kripto yang paling popular hari ini. Ia percuma untuk digunakan dan boleh dipasang pada rangkaian sebagai sambungan

Bagaimana untuk menggunakan Xiaoai Speaker Bagaimana untuk menyambung Xiaoai Speaker ke telefon bimbit Bagaimana untuk menggunakan Xiaoai Speaker Bagaimana untuk menyambung Xiaoai Speaker ke telefon bimbit Feb 22, 2024 pm 05:19 PM

Selepas lama menekan butang main pembesar suara, sambungkan ke wifi dalam perisian dan anda boleh menggunakannya. Tutorial Model Berkenaan: Xiaomi 12 Sistem: EMUI11.0 Versi: Xiaoai Classmate 2.4.21 Analisis 1 Mula-mula cari butang main pembesar suara, dan tekan dan tahan untuk memasuki mod pengedaran rangkaian. 2 Log masuk ke akaun Xiaomi anda dalam perisian Xiaoai Speaker pada telefon anda dan klik untuk menambah Speaker Xiaoai baharu. 3. Selepas memasukkan nama dan kata laluan wifi, anda boleh menghubungi Xiao Ai untuk menggunakannya. Tambahan: Apakah fungsi yang ada pada Xiaoai Speaker 1 Xiaoai Speaker mempunyai fungsi sistem, fungsi sosial, fungsi hiburan, fungsi pengetahuan, fungsi kehidupan, rumah pintar dan rancangan latihan. Ringkasan/Nota: Apl Xiao Ai mesti dipasang pada telefon mudah alih anda terlebih dahulu untuk sambungan dan penggunaan yang mudah.

See all articles