2015-11-22 3 views
0

Je voudrais rendre quelque chose à une résolution, mais l'afficher dans une fenêtre à une autre résolution (par exemple, rendre la scène à 640x480 et l'étirer à une fenêtre 1024x768). Il suffit de redimensionner la fenêtre après la création pour que cela fonctionne - cependant, l'image est filtrée en utilisant le plus proche voisin. Y a-t-il un moyen de changer l'algorithme de filtrage par ex. bilinéaire?Filtrage bilinéaire de l'image de sortie dans Direct3D 11

Répondre

3

Il y a essentiellement trois approches de ce:

Une approche consiste à utiliser un backbuffer Direct3D qui est toujours 640 x 480, mais permettre à la DXGI Present pour gérer la mise à l'échelle à une autre taille de la fenêtre (1024 x 768). Dans Direct3D 11.1, vous pouvez réaliser ceci en utilisant DXGI_SWAP_CHAIN_DESC1.Scaling et réglez le DXGI_SCALING_STRETCH. Sur Windows Phone 8 ou Windows 10, vous pouvez aussi utiliser DXGI_SCALING_ASPECT_RATIO_STRETCH. Dans ce cas, vous n'avez aucun contrôle sur la façon dont le filtrage est réalisé, mais il est principalement automatique.

DXGI_SCALING_ASPECT_RATIO_STRETCH fonctionne uniquement avec swapchains CoreWindow et DirectComposition utilisant CreateSwapChainForCoreWindow ou CreateSwapChainForComposition (à savoir non classiques Windows Win32 à l'aide CreateSwapChainForHwnd). Pour savoir où dans la fenêtre de sortie, le est réellement placé l'image préservée aspect ratio, voir Viewport::ComputeDisplayArea

du code pour DirectX Tool Kit L'autre approche consiste à redimensionner votre backbuffer pour correspondre à la fenêtre de sortie, mais utiliser texturation sur un «quad complet» pour atteindre l'étirement. Dans ce cas, vous avez un contrôle plus direct sur le filtrage utilisé. Voir SpriteBatch et D3D11_FILTER du kit d'outils DirectX.

Enfin, vous pouvez redimensionner l'image d'origine sur la CPU. Ici vous avez le plus de flexibilité et de contrôle pour faire le redimensionnement, mais les performances seront nettement plus lentes. Vous pouvez également redimensionner avec WIC ou DirectXTex.

+0

Merci. J'essaie en fait de modifier une application existante pour le faire. La deuxième méthode peut-elle être effectuée en insérant des appels avant et après le rendu de la scène entière? –