2016-03-15 211 views
0

我可以爲此着色器的每個頂點實例製作不同的顏色嗎?我必須發送實例到o.output到碎片顏色嗎?這是Unity3d實現HLSL運行Graphics.DrawProcedural(MeshTopology.LineStrip);HLSL片段着色器對於每個頂點都有不同的顏色?

 #pragma fragment frag 
     #include "UnityCG.cginc" 

       StructuredBuffer<float3> buf_Points; 
       StructuredBuffer<float3> buf_Positions; 

       struct ps_input { 
        float4 pos : SV_POSITION; 
       }; 

       ps_input vert (uint id : SV_VertexID, uint inst : SV_InstanceID) 
       { 
        ps_input o; 
        float3 worldPos = buf_Points[id] + buf_Positions[inst]; 
        o.pos = mul (UNITY_MATRIX_VP, float4(worldPos,1.0f)); 
        return o; 
       } 

       float4 frag (ps_input i) : COLOR 
       { 
        return float4(1,0,0,1); 
       } 

       ENDCG 

回答

0

我解決了它,它是這樣的東西:

 struct ps_input { 
      float4 pos : SV_POSITION ; 
      float4 col : COLOR; 
     }; 

     ps_input vert (uint id : SV_VertexID, uint inst : SV_InstanceID) 
     { 
      bla 

      o.pos = mul (UNITY_MATRIX_VP, float4(worldPos,1.0f)); 
      o.col = float4(sin(inst),0,0,1); 
      return o; 
     } 

     float4 frag (ps_input i) : COLOR 
     { 
      return i.col;//float4(0.7f,.7f,.7f,1); 
     } 

     ENDCG