感谢这里的mr shader教程
http://www.lvyuedong.org/projects/tech/mentalray/magazines/august/august.html
custom shader 中文件引用、函数命名的关联关系如下:
文件目录如下:
city.mi
shader_lensfog/lensfog.c
shader_lensfog/lensfog_mi.mi
shader_lensfog/lensfog_dll.dll
---------------------------------city.mi:-------------------------------------------
...
link "shader_lensfog/lensfog_dll.dll "
$include "shader_lensfog/lensfog_mi.mi "
...
camera "perspShape"
output "rgba" "tga" "city.tga"
resolution 640 480
aspect 1.33333
lens "lensfogshader " ("depth" 480, "color" 0.866 0.813 0.775, "power" 2 )
focal 1.1
environment = "env"
end camera
--------------------------------lensfog_mi.mi --------------------------------------------
declare shader
color "lensfogshader " (
scalar "depth",
color "color",
scalar "power"
)
version 1
apply lens
end declare
--------------------------------lensfog.c --------------------------------------------
....
#define SHADER_MAIN_PARM parm
#define SHADER_MAIN_FUNC lensfogshader
#define SHADER_VERSION_FUNC lensfogshader ##_version
struct SHADER_MAIN_PARM {
miScalar depth;
miColor color;
miScalar power;
};
DLLEXPORT int SHADER_VERSION_FUNC (void)
{
return 1;
}
DLLEXPORT miBoolean SHADER_MAIN_FUNC (
miColor *result,
miState *state,
struct SHADER_MAIN_PARM *paras
)
{
....
}
最主要的是.mi文件引用的shader名字是“.c文件中定义的主函数的名字SHADER_MAIN_FUNC ”
而.mi文件引用的shader的参数是“.c文件中定义的主函数中的参数SHADER_MAIN_PARM ”