在Unity中使用Direct2D
在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?
- #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);
- }
#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); }
面的代码封装成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?
- // 初始化 D2D 管理器
- publicdelegate System.UInt32 D2DManagerInit();
- public D2DManagerInit m_D2DManagerInit;
// 初始化 D2D 管理器 public delegate System.UInt32 D2DManagerInit(); public D2DManagerInit m_D2DManagerInit;
使用:
[csharp] view plaincopyprint?
- proc = GetProcAddressWrap(m_unityd2ddll, "D2DManagerInit");
- m_D2DManagerInit = (D2DManagerInit)Marshal.GetDelegateForFunctionPointer(proc, typeof(D2DManagerInit));
proc = GetProcAddressWrap(m_unityd2ddll, "D2DManagerInit"); m_D2DManagerInit = (D2DManagerInit)Marshal.GetDelegateForFunctionPointer(proc, typeof(D2DManagerInit));
之后使用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?
- 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;
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;
必须有D3D11_BIND_RENDER_TARGET,否则不能创建渲染目标呈现器。记得保留这个指针。
然后对 D3D11Textue2D 使用QueryInterface获取 Dxgi表面
使用这个Dxgi表面利用D2D工厂CreateDxgiSurfaceRenderTarget创建RT
就好了,记得释放这个Dxgi表面:
渲染D2D
如同一般那样,不过由于变成了dll,可能一些习惯要改成C语言那样。
呈现D2D
渲染完成后,使用
D3D11设备上下文的CopyResource方法就能拷贝渲染结果到目标纹理了:
DirectWrite简直不错:
稍微写点代码就能模仿某游戏那样的效果:
嗯,看来还不够完善,再加油吧:
话说自带的Sprite着色器很不错,简直赞

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le lien magnétique est une méthode de lien pour télécharger des ressources, qui est plus pratique et efficace que les méthodes de téléchargement traditionnelles. Les liens magnétiques vous permettent de télécharger des ressources de manière peer-to-peer sans recourir à un serveur intermédiaire. Cet article explique comment utiliser les liens magnétiques et à quoi il faut prêter attention. 1. Qu'est-ce qu'un lien magnétique ? Un lien magnétique est une méthode de téléchargement basée sur le protocole P2P (Peer-to-Peer). Grâce à des liens magnétiques, les utilisateurs peuvent se connecter directement à l'éditeur de la ressource pour finaliser le partage et le téléchargement des ressources. Par rapport aux méthodes de téléchargement traditionnelles, magnétique

Comment utiliser les fichiers mdf et mds Grâce aux progrès continus de la technologie informatique, nous pouvons stocker et partager des données de différentes manières. Dans le domaine des médias numériques, nous rencontrons souvent des formats de fichiers particuliers. Dans cet article, nous discuterons d'un format de fichier courant - les fichiers mdf et mds, et présenterons comment les utiliser. Tout d’abord, nous devons comprendre la signification des fichiers mdf et mds. mdf est l'extension du fichier image CD/DVD et le fichier mds est le fichier de métadonnées du fichier mdf.

CrystalDiskMark est un petit outil de référence pour disques durs qui mesure rapidement les vitesses de lecture/écriture séquentielles et aléatoires. Ensuite, laissez l'éditeur vous présenter CrystalDiskMark et comment utiliser crystaldiskmark~ 1. Introduction à CrystalDiskMark CrystalDiskMark est un outil de test de performances de disque largement utilisé pour évaluer la vitesse et les performances de lecture et d'écriture des disques durs mécaniques et des disques SSD (SSD). ). Performances d’E/S aléatoires. Il s'agit d'une application Windows gratuite qui fournit une interface conviviale et divers modes de test pour évaluer différents aspects des performances du disque dur. Elle est largement utilisée dans les revues de matériel.

foobar2000 est un logiciel qui peut écouter des ressources musicales à tout moment. Il vous offre toutes sortes de musique avec une qualité sonore sans perte. La version améliorée du lecteur de musique vous permet d'obtenir une expérience musicale plus complète et plus confortable. lire l'audio avancé sur l'ordinateur. L'appareil est transplanté sur le téléphone mobile pour offrir une expérience de lecture de musique plus pratique et efficace. La conception de l'interface est simple, claire et facile à utiliser. opérations pour démarrer rapidement. Il prend également en charge une variété de skins et de thèmes, personnalisez les paramètres en fonction de vos propres préférences et créez un lecteur de musique exclusif prenant en charge la lecture de plusieurs formats audio. Il prend également en charge la fonction de gain audio pour régler le volume. selon vos propres conditions auditives pour éviter les dommages auditifs causés par un volume excessif. Ensuite, laisse-moi t'aider

NetEase Mailbox, en tant qu'adresse e-mail largement utilisée par les internautes chinois, a toujours gagné la confiance des utilisateurs grâce à ses services stables et efficaces. NetEase Mailbox Master est un logiciel de messagerie spécialement créé pour les utilisateurs de téléphones mobiles. Il simplifie grandement le processus d'envoi et de réception d'e-mails et rend le traitement de nos e-mails plus pratique. Alors comment utiliser NetEase Mailbox Master, et quelles sont ses fonctions spécifiques Ci-dessous, l'éditeur de ce site vous donnera une introduction détaillée, en espérant vous aider ! Tout d’abord, vous pouvez rechercher et télécharger l’application NetEase Mailbox Master dans la boutique d’applications mobiles. Recherchez « NetEase Mailbox Master » dans l'App Store ou Baidu Mobile Assistant, puis suivez les instructions pour l'installer. Une fois le téléchargement et l'installation terminés, nous ouvrons le compte de messagerie NetEase et nous connectons. L'interface de connexion est la suivante

Le stockage cloud est devenu aujourd’hui un élément indispensable de notre vie quotidienne et de notre travail. En tant que l'un des principaux services de stockage cloud en Chine, Baidu Netdisk a gagné la faveur d'un grand nombre d'utilisateurs grâce à ses puissantes fonctions de stockage, sa vitesse de transmission efficace et son expérience de fonctionnement pratique. Et que vous souhaitiez sauvegarder des fichiers importants, partager des informations, regarder des vidéos en ligne ou écouter de la musique, Baidu Cloud Disk peut répondre à vos besoins. Cependant, de nombreux utilisateurs peuvent ne pas comprendre l'utilisation spécifique de l'application Baidu Netdisk, ce didacticiel vous présentera donc en détail comment utiliser l'application Baidu Netdisk. Si vous êtes toujours confus, veuillez suivre cet article pour en savoir plus ! Comment utiliser Baidu Cloud Network Disk : 1. Installation Tout d'abord, lors du téléchargement et de l'installation du logiciel Baidu Cloud, veuillez sélectionner l'option d'installation personnalisée.

MetaMask (également appelé Little Fox Wallet en chinois) est un logiciel de portefeuille de cryptage gratuit et bien accueilli. Actuellement, BTCC prend en charge la liaison au portefeuille MetaMask. Après la liaison, vous pouvez utiliser le portefeuille MetaMask pour vous connecter rapidement, stocker de la valeur, acheter des pièces, etc., et vous pouvez également obtenir un bonus d'essai de 20 USDT pour la première liaison. Dans le didacticiel du portefeuille BTCCMetaMask, nous présenterons en détail comment enregistrer et utiliser MetaMask, ainsi que comment lier et utiliser le portefeuille Little Fox dans BTCC. Qu'est-ce que le portefeuille MetaMask ? Avec plus de 30 millions d’utilisateurs, MetaMask Little Fox Wallet est aujourd’hui l’un des portefeuilles de crypto-monnaie les plus populaires. Son utilisation est gratuite et peut être installée sur le réseau en tant qu'extension

Après avoir appuyé longuement sur le bouton play de l'enceinte, connectez-vous au wifi dans le logiciel pour l'utiliser. Tutoriel Modèle applicable : Xiaomi 12 Système : EMUI11.0 Version : Xiaoai Classmate 2.4.21 Analyse 1 Trouvez d'abord le bouton de lecture du haut-parleur et maintenez-le enfoncé pour accéder au mode de distribution réseau. 2 Connectez-vous à votre compte Xiaomi dans le logiciel Xiaoai Speaker sur votre téléphone et cliquez pour ajouter un nouveau haut-parleur Xiaoai. 3. Après avoir entré le nom et le mot de passe du wifi, vous pouvez appeler Xiao Ai pour l'utiliser. Supplément : quelles sont les fonctions de Xiaoai Speaker ? 1 Xiaoai Speaker a des fonctions système, des fonctions sociales, des fonctions de divertissement, des fonctions de connaissances, des fonctions de vie, une maison intelligente et des plans de formation. Résumé/Remarques : L'application Xiao Ai doit être installée à l'avance sur votre téléphone mobile pour une connexion et une utilisation faciles.
