C++ 如何使用Arnold API实现lambert着色器?(适用于初学者)

C++ 如何使用Arnold API实现lambert着色器?(适用于初学者),c++,shader,writing,C++,Shader,Writing,如何使用Arnold API实现lambert着色器?(适用于初学者) 这是一个实现常量着色器的示例。 我不知道如何使用Arnold API(集成灯光和采样)实现lambert着色器 #包括 #包括 AI_着色器_节点_导出_方法(LambertMethods); 枚举朗伯参数{p_反照率}; 节点参数{ AIG(“反照率”,1.0f,1.0f,1.0f); } 节点加载器{ 如果(i>0)返回false; 节点->方法=兰伯特方法; 节点->输出类型=AI类型\U RGB; 节点->名称=“兰

如何使用Arnold API实现lambert着色器?(适用于初学者)

这是一个实现常量着色器的示例。 我不知道如何使用Arnold API(集成灯光和采样)实现lambert着色器

#包括
#包括
AI_着色器_节点_导出_方法(LambertMethods);
枚举朗伯参数{p_反照率};
节点参数{
AIG(“反照率”,1.0f,1.0f,1.0f);
}
节点加载器{
如果(i>0)返回false;
节点->方法=兰伯特方法;
节点->输出类型=AI类型\U RGB;
节点->名称=“兰伯特”;
节点->节点类型=AI\U节点\U着色器;
strcpy(节点->版本,AI_版本);
返回true;
}
节点_初始化{}
节点_更新{}
明暗器{
AtColor反照率=AiShaderEvalParamRGB(p_反照率);
sg->out.RGB=反照率;
}
节点_finish{}

在场景中的灯光上循环

shader\u求值{
AtColor反照率=AiShaderEvalParamRGB(p_反照率);
AtColor漫反射=AI_RGB_黑色;
航灯准备(sg);
while(AiLightsGetSample(sg)){
if(AillightGetAffectDiffuse(sg->Lp)){
浮动LdotN=AiV3Dot(sg->Ld,sg->N)
漫反射+=反照率*sg->Li*sg->we*AI_ONEOVERPI*max(0,LdotN);
}
}
sg->out.RGB=漫反射;
}

来源:

在场景中的灯光上循环

shader\u求值{
AtColor反照率=AiShaderEvalParamRGB(p_反照率);
AtColor漫反射=AI_RGB_黑色;
航灯准备(sg);
while(AiLightsGetSample(sg)){
if(AillightGetAffectDiffuse(sg->Lp)){
浮动LdotN=AiV3Dot(sg->Ld,sg->N)
漫反射+=反照率*sg->Li*sg->we*AI_ONEOVERPI*max(0,LdotN);
}
}
sg->out.RGB=漫反射;
}
来源:

“它不起作用”不是什么错误描述。你能详细说明一下吗?你有生成错误吗?运行时错误(崩溃)?意外的结果?拜托,“它不起作用”不是什么错误描述。你能详细说明一下吗?你有生成错误吗?运行时错误(崩溃)?意外的结果?请