从应用程序到CGFX获取顶点颜色的问题

时间:2011-07-09 21:58:10

标签: maya cg

问题:我想在我的cgfx着色器中使用Maya提供的顶点颜色。这应该是一个微不足道的问题,但到目前为止我没有运气。

尝试:下面我写了一个超级简单的着色器,它应该只显示原始顶点颜色。结果虽然是纯白色。

细节:在内部,着色器工作正常,如果我在vs中将vert颜色设置为红色,它就会很好。所以问题是从Maya获得价值。同时尝试使用COLOR和COLOR0。

感谢任何帮助或指导。

// string Category = "Effects\\Cg\\BRDF";
// string keywords = "texture";
string description = "Pure vertex color";

//////////////////////////////////////////////////////////
// untweakables //////////////////////////////////////////
//////////////////////////////////////////////////////////

float4x4 WorldViewProjXf : WorldViewProjection < string UIWidget="none";>;

/****************************************************/
/********** SAMPLERS ********************************/
/****************************************************/

texture ColorTex : Diffuse
<
    string ResourceName = "default_color.dds";
    string ResourceType = "2D";
>;

sampler2D ColorSampler = sampler_state
{
    Texture = <ColorTex>;
      MagFilter = Linear;
      MinFilter = LinearMipmapLinear;
};

/****************************************************/
/********** CG SHADER FUNCTIONS *********************/
/****************************************************/

/**************************************/
/***** SHARED STRUCT ******************/
/**** Data from app vertex buffer *****/
/****     for all passes          *****/
/**************************************/

struct appData {
    float3 Position    : POSITION;
    float4 VertColor: COLOR;
};

/****************************************/
/****************************************/

// vertex->fragment registers used for this pass only
struct outVertexData {
    float4 HPosition    : POSITION;
    float4 vertColor     : TEXCOORD1;
};

/****************************************/
/****************************************/

outVertexData textureVS(appData IN)
{
    outVertexData OUT;

    OUT.vertColor = IN.VertColor;
    //OUT.vertColor = float4(1.0f,0.0f,0.0f,0.0f);

    float4 Po = float4(IN.Position.xyz,1.0);    
    OUT.HPosition = mul(WorldViewProjXf, Po);

    return OUT;
}

float4 texturePS(outVertexData IN)    : COLOR
{
    return IN.vertColor;
}

/****************************************************/
/********** TECHNIQUES ******************************/
/****************************************************/

technique main {
    pass p0 {
        VertexProgram = compile arbvp1 textureVS();
        DepthTestEnable = true;
        DepthMask = true;
        CullFaceEnable = false;
        FragmentProgram = compile arbfp1 texturePS();
    }
}

/***************************** eof ***/

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。尝试将着色器的“顶点数据”属性部分中的颜色设置为“color:colorSet1”,这样就解决了这个问题。