Question

I besoin pour calculer les valeurs UV minimale et maximale assignée aux pixels produites quand un objet donné est tracé à l'écran à partir d'un certain point de vue. Par exemple, si j'ai un cube mappé UV, mais seule la face avant est visible, min (UV) et max (UV) doit être réglée sur les coordonnées UV minimum et maximum associées aux pixels de la face visible.

Je voudrais faire cela en utilisant Direct3D 9 (shaders et le modèle de shader le plus bas possible) pour accélérer le traitement. Le vertex shader pourrait être aussi simple que de prendre chaque coordonnées des UV sommet d'entrée et de les transmettre, non modifié, au pixel shader. Le pixel shader, d'autre part, devrait prendre les valeurs produites par le vertex shader et les utiliser pour calculer les valeurs UV minimum et maximum.

Ce que je voudrais savoir est:

  1. Comment puis-je conserver l'état (min en cours et les valeurs max) entre les invocations du pixel shader?
  2. Comment puis-je obtenir la dernière minute et les valeurs max produites par le shader dans mon programme?

Est-il possible de le faire en HLSL, ou suis-je coincé le faire à la main? Si HLSL ne fonctionnera pas, ce serait la façon la plus efficace de le faire sans l'utilisation de shaders?

Était-ce utile?

La solution

1) Vous n'avez pas. 2) Vous devez faire un retour de lecture à un moment donné. Ce sera un processus assez lent et provoquer un décrochage de pipeline.

En général je ne peux pas penser à une bonne façon de le faire. Qu'est-ce que vous essayez exactement acheieve avec cela? Il peut y avoir une autre façon d'obtenir le résultat que vous recherchez.

« peut » être en mesure d'obtenir quelque chose en utilisant plusieurs cibles de rendu et d'écrire les UVs pour chaque pixel à la cible de rendu. Ensuite, vous aurez besoin de passer le dos cible rendu à la mémoire principale, puis l'analyser pour votre valeurs min et max. Ceci est une solution lente et très laid realy.

Si vous pouvez le faire en tant que couple de passe séparé vous pourriez être en mesure de rendre à une très petite cible de rendu et d'utiliser 1 passe avec Max et 1 passe avec un op alpha blend min. Encore une fois ... pas une bonne solution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top