感謝這裡的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 ”
代碼在這裡 http://download.csdn.net/source/1745356