2016-03-15 210 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