2012-06-27 1 views
0

Comment puis-je transmettre plusieurs fois un élément du vertex shader au pixel shader. Par exemple, j'ai besoin de sortir la couleur vertex en tant que float 4 pour le pixel shader 4 fois après avoir effectué des opérations mathématiques différentes sur la couleur du vertex dans le shader vert?Shader CGFX produisant des données vert plusieurs fois

puis-je faire ceci? J'ai essayé de créer un float4 color2 vide, en lisant le In.vertcolor de In.color et en produisant cela ... Je ne reçois aucune erreur mais ma texture est blanche. Il suffit de lire tout flottant vide 4 ...

Voici mon code pour cette section. Merci!

////////////////////////////////////////////////////////////// 
// Structs section 
// input from application 
struct a2v { 
float4 position : POSITION; 
float4 normal : NORMAL; 
float2 texCoord : TEXCOORD0; 
float2 secondUV : TEXCOORD1; 
float4 color: COLOR; 
float4 color2; 

}; 

// output to fragment program 
struct v2f { 
    float4 position  : POSITION; 
    float2 texCoord : TEXCOORD0; 

    float2 secondUV : TEXCOORD1; 
    float3 worldNormal  : TEXCOORD2; 
    float4 color: COLOR; 
    float4 color2; 

}; 



////////////////////////////////////////////////////////////// 
// Vertex Shader 

v2f vShader(a2v In) 
{ 
v2f Out; 
Out.texCoord = In.texCoord; 
Out.secondUV = In.secondUV; 

float4 Mask1 = floor ((fmod((In.color * 100f), 10f))) *.111f; 
float4 Mask2 = floor ((fmod((In.color2 * 100f), 10f))) *.111f; 
Out.color = Mask1; 
Out.color2 = Mask2; 


Out.position = mul(WorldViewProjection, In.position); 
Out.worldNormal = mul(WorldInverseTranspose, In.normal).xyz; 

return Out; 
} 

Répondre

0

Il est un attribut de liaison COLOR1 que vous pouvez attribuer au champ « couleur2 » dans les structures A2V et V2F.

Assurez-vous d'allouer la couleur secondaire (COLOR1) en tant que flux d'attributs dans votre application.

+0

Edit: Merci beaucoup! J'ai passé quelques heures coincé là-dessus. Y a-t-il de toute façon une sortie multiple de la couleur ou 2 la limite? Je demande car Unity Game Engine semble cesser de fonctionner après COLOR1, par exemple COLOR2 ne fonctionne pas. Au moins, je peux le sortir deux fois grâce à vous. Un des shaders que je veux mettre en communication a besoin que j'effectue 4 fois des calculs sur les couleurs de vertex dans le vertex shader et que je produise leurs résultats différents dans le pixel shader. Maya cgfx est bien car il prend en charge plusieurs jeux de couleurs, donc il peut prendre COLOR4 etc Mais Unity, d'autre part ... semble prendre seulement COULEUR, COLOR1 – fghajhe

+0

Désolé, pas un expert sur l'unité. Recherchez tous les flux Aux possibles. Peut-être que vous pouvez emballer le Color2 dans des tableaux tangents/binormaux si vous ne les utilisez pas pour d'autres choses. –

+0

D'accord, pas de problème. Juste être capable de le sortir deux fois m'aide beaucoup! Je vais regarder dans l'emballage dans d'autres tableaux aussi – fghajhe

Questions connexes