<?php



namespace Blobt\Luxcore\scene;
include dirname(dirname(__FILE__)) . "/vendor/autoload.php";

const OPEN = true;
const CLOSE = false;




$scene = new Scene();                                // 创建一个场景

// 一、创建光场:
// 1、创建 面片光001
$obj = new objects\Objects();                        // 创建 面片光001 的实体
$obj->ply = './ply/FaceLight001.ply';                // 指定 面片光001 实体网格数据
$materials = new materials\Matte();                  // 创建一个材质
$materials->setBaseColor('0 0 0');                   // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');          // 设置材质产生阴影的透明度
$materials->setEmission('1 1 1');                    // 设置材质为一个自发光材质,并指定发光颜色
$scene->registerMaterial($materials);                // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                       // 为 面片光001 指定一个自发光材质
$scene->registerObjects($obj);                       // 将 面片光001 注册到 scene 中

// 2、创建 面片光002
$obj = new objects\Objects();                        // 创建 面片光002 的实体
$obj->ply = './ply/FaceLight002.ply';                // 指定 面片光002 实体网格数据
$materials = new materials\Matte();                  // 创建一个材质
$materials->setBaseColor('0 0 0');                   // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');          // 设置材质产生阴影的透明度
$materials->setEmission('0 0 0');                    // 设置材质为一个自发光材质,并指定发光颜色
$materials->emissionCfg = new lights\Emission(       // 设置发光属性
    [
        'gain' => "30 30 30",                        // 设置发光增益
    ]
);
$scene->registerMaterial($materials);                // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                       // 为 面片光002 指定一个自发光材质
$scene->registerObjects($obj);                       // 将 面片光002 注册到 scene 中

// 3、创建 面片光003
$obj = new objects\Objects();                        // 创建 面片光003 的实体
$obj->ply = './ply/FaceLight003.ply';                // 指定 面片光003 实体网格数据
$materials = new materials\Matte();                  // 创建一个材质
$materials->setBaseColor('0 0 0');                   // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');          // 设置材质产生阴影的透明度
$materials->setEmission('1 1 1');                    // 设置材质为一个自发光材质,并指定发光颜色
$materials->emissionCfg = new lights\Emission(       // 设置发光属性
    [
        'gain' => "50 50 50",                        // 设置发光增益
    ]
);
$scene->registerMaterial($materials);                // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                       // 为 面片光003 指定一个自发光材质
$scene->registerObjects($obj);                       // 将 面片光003 注册到 scene 中

// 4、创建 面片光004
$obj = new objects\Objects();                        // 创建 面片光004 的实体
$obj->ply = './ply/FaceLight004.ply';                // 指定 面片光004 实体网格数据
$materials = new materials\Matte();                  // 创建一个材质
$materials->setBaseColor('0 0 0');                   // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');          // 设置材质产生阴影的透明度
$materials->setEmission('0 0 0');                    // 设置材质为一个自发光材质,并指定发光颜色
$materials->emissionCfg = new lights\Emission(       // 设置发光属性
    [
        'gain' => "4 4 4",                           // 设置发光增益
    ]
);
$scene->registerMaterial($materials);                // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                       // 为 面片光004 指定一个自发光材质
$scene->registerObjects($obj);                       // 将 面片光004 注册到 scene 中

// 5、创建 面片光005
$obj = new objects\Objects();                        // 创建 面片光005 的实体
$obj->ply = './ply/FaceLight005.ply';                // 指定 面片光005 实体网格数据
$materials = new materials\Matte();                  // 创建一个材质
$materials->setBaseColor('0 0 0');                   // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');          // 设置材质产生阴影的透明度
$materials->setEmission('1 1 1');                    // 设置材质为一个自发光材质,并指定发光颜色
$materials->emissionCfg = new lights\Emission(       // 设置发光属性
    [
        'gain' => "10 10 10",                        // 设置发光增益
    ]
);
$scene->registerMaterial($materials);                // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                       // 为 面片光005 指定一个自发光材质
$scene->registerObjects($obj);                       // 将 面片光005 注册到 scene 中

// 6、创建 面片光006
$obj = new objects\Objects();                        // 创建 面片光006 的实体
$obj->ply = './ply/FaceLight006.ply';                // 指定 面片光006 实体网格数据
$materials = new materials\Matte();                  // 创建一个材质
$materials->setBaseColor('0 0 0');                   // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');          // 设置材质产生阴影的透明度
$materials->setEmission('1 1 1');                    // 设置材质为一个自发光材质,并指定发光颜色
$materials->emissionCfg = new lights\Emission(       // 设置发光属性
    [
        'gain' => "8 8 8",                           // 设置发光增益
        'mapfile' => "./map/SD-037.exr",             // 加载一个光域文件
        'gamma' => 1,                                // 设置校正光域文件的gamma值
        'storage' => "float"                         // 声明光域文件表示色值的数据类型
    ]
);
$scene->registerMaterial($materials);                // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                       // 为 面片光006 指定一个自发光材质
$scene->registerObjects($obj);                       // 将 面片光006 注册到 scene 中

// 7、创建 面片光000
$obj = new objects\Objects();                        // 创建 面片光 的实体
$obj->ply = './ply/FaceLight000.ply';                // 指定 面片光 实体网格数据
$materials = new materials\Matte();                  // 创建一个材质
$materials->setBaseColor('0 0 0');                   // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');          // 设置材质产生阴影的透明度
$materials->setEmission('1 1 1');                    // 设置材质为一个自发光材质,并指定发光颜色
$materials->emissionCfg = new lights\Emission(       // 设置发光属性
    [
        'gain' => "3.3 3.3 3.3",                     // 设置发光增益
    ]
);
$scene->registerMaterial($materials);                // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                       // 为 面片光 指定一个自发光材质
$scene->registerObjects($obj);                       // 将 面片光 注册到 scene 中

// 8、创建环境光
$light = new lights\env\HdrImage(                    // new 一个环境光对象
    [
        'gain' => "1.25 1.25 1.25",                  // 设置颜色增益
        'transformation' => "0.1736481 -0.9848078 0 0 -0.9848078 -0.1736481 0 0 0 0 1 0 0 0 0 1",   
                                                     //设置对象变换
        'file' => "./map/env.png",                   // 加载一个全景图像文件
        'gamma' => 1,                                // 设置一个校正全景图像文件的 gamma 值
        'storage' => "byte"                          // 声明这个图像文件表示色值的数据类型
    ]
);
$light->id = 0;                                      // 一个场景只能有一个环境光对象,并且 id 必须为 0
$scene->registerLight($light);                       // 将环境光注册到 scene 中




// 二、添加要渲染的模型
// 1、创建地面模型
$obj = new objects\Objects();                        // 创建 地面 模型
$obj->ply = './ply/ground.ply';                      // 指定 地面 模型网格数据

$mapping = new texture\mapping\Mapping();            // 创建一个铺贴对象
$mapping->useUVMapping2d(                            // 使用"uvmapping2d"类型的铺贴对象
     0,                                              // uv通道
     "0",                                            // 旋转角度
     "0.4 -0.966",                                   // 缩放比例
     "0.3 0.983"                                     // 偏移量
);

$texture = new texture\procedural\ImageMap(          // 创建一个纹理
    [
        'file' => "./map/方形阴影遮照.png",            // 加载一个图像文件
        'gain' => 0.6,                               // 设置颜色增益
        'gamma' => 1,                                // 设置校正图像文件的gamma值
    ]
);
$texture->mapping = $mapping;                        // 将铺贴对象赋值给纹理的“mapping”属性
$scene->registerTexture($texture);                   // 将纹理注册到 scene 中

$materials = new materials\Disney(                   // 创建一个材质
    [
        'shadowcatcherEnable' => OPEN,               // 设置为阴影捕捉器
        'photongiEnable' => CLOSE                    // 关闭此材质的全局光缓存
    ]
);            
$materials->setBaseColor('1 1 1');                   // 设置材质的漫反射
$materials->setTransparencyFront($texture);          // 将纹理设置为材质的正面透明度
$materials->setTransparencyBack($texture);           // 将纹理设置为材质的背面透明度
$scene->registerMaterial($materials);                // 将材质注册到 scene 中
$obj->setMaterial($materials);                       // 设置 地面模型 的材质属性
$scene->registerObjects($obj);                       // 将 地面模型 注册到 scene 中


// 2、创建 刷毛003 模型
$obj = new objects\Objects();                               // 创建 刷毛003 模型
$obj->ply = './ply/ShuaMao003.ply';                         // 指定 刷毛003 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.233238 0.567919 0.654361' );   // 设置材质的漫反射
$materials->setSpecular('1');                               // 设置材质的高光反射强度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 刷毛003 的材质属性
$scene->registerObjects($obj);                              // 将 刷毛003 注册到 scene 中


// 3、创建 刷毛002 模型
$obj = new objects\Objects();                               // 创建 刷毛002 模型
$obj->ply = './ply/ShuaMao002.ply';                         // 指定 刷毛002 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.0739024 0.0739024 0.0739024' );// 设置材质的漫反射
$materials->setSpecular('1');                               // 设置材质的高光反射强度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 刷毛002 的材质属性
$scene->registerObjects($obj);                              // 将 刷毛002 注册到 scene 中

// 3、创建 刷毛001 模型
$obj = new objects\Objects();                               // 创建 刷毛001 模型
$obj->ply = './ply/ShuaMao001.ply';                         // 指定 刷毛001 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.857449 0.857449 0.857449' );   // 设置材质的漫反射
$materials->setSpecular('1');                               // 设置材质的高光反射强度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 刷毛001 的材质属性
$scene->registerObjects($obj);                              // 将 刷毛001 注册到 scene 中

// 4、创建 牙刷头 模型
$obj = new objects\Objects();                               // 创建 牙刷头 模型
$obj->ply = './ply/YaShuaTou.ply';                          // 指定 牙刷头 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.701102 0.701102 0.701102' );   // 设置材质的漫反射
$materials->setSpecular('0.5');                             // 设置材质的高光反射强度
$materials->setRoughness('0.05');                           // 设置粗糙度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 牙刷头 的材质属性
$scene->registerObjects($obj);                              // 将 牙刷头 注册到 scene 中

// 5、创建 牙刷头文字 模型
$obj = new objects\Objects();                               // 创建 牙刷头文字 模型
$obj->ply = './ply/YaShuaTouWenZi.ply';                     // 指定 牙刷头文字 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.0144817 0.0144817 0.0144817' );// 设置材质的漫反射
$materials->setSpecular('1');                               // 设置材质的高光反射强度
$materials->setRoughness('0');                              // 设置粗糙度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 牙刷头文字 的材质属性
$scene->registerObjects($obj);                              // 将 牙刷头文字 注册到 scene 中


// 6、创建 金属振动轴 模型
$obj = new objects\Objects();                               // 创建 金属振动轴 模型
$obj->ply = './ply/JinShuZhenDongZhou.ply';                 // 指定 金属振动轴 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$texture = new texture\procedural\Fresnelcolor();           // 创建一个菲涅尔反射纹理                                                            
$texture->setRefraction('0.7 0.7 0.7');                     // 设置反射颜色
$scene->registerTexture($texture);                          // 将纹理注册到 scene 中
$materials = new materials\Metal();                         // 创建一个材质
$materials->setFresnel($texture);                           // 设置材质的金属度
$materials->setUroughness('0.15');                          // 设置U向粗糙度    
$materials->setVroughness('0.15');                          // 设置V向粗糙度 
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 金属振动轴 的材质属性
$scene->registerObjects($obj);                              // 将 金属振动轴 注册到 scene 中


// 7、创建 金属按扭底坐 模型
$obj = new objects\Objects();                               // 创建 金属按扭底坐 模型
$obj->ply = './ply/JinShuAnNiuDiZuo.ply';                   // 指定 金属按扭底坐 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$texture = new texture\procedural\Fresnelcolor();           // 创建一个菲涅尔反射纹理                                                            
$texture->setRefraction('0.7 0.7 0.7');                     // 设置反射颜色
$scene->registerTexture($texture);                          // 将纹理注册到 scene 中
$materials = new materials\Metal();                         // 创建一个材质
$materials->setFresnel($texture);                           // 设置材质的金属度
$materials->setUroughness('0.05');                          // 设置U向粗糙度    
$materials->setVroughness('0.05');                          // 设置V向粗糙度 
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 金属按扭底坐 的材质属性
$scene->registerObjects($obj);                              // 将 金属按扭底坐 注册到 scene 中


// 8、创建 刷毛样本金属圆管 模型
$obj = new objects\Objects();                               // 创建 刷毛样本金属圆管 模型
$obj->ply = './ply/ShuaMaoYangBenJinShuYuanGuan.ply';       // 指定 刷毛样本金属圆管 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$obj->setMaterial($materials);                              // 将上一个相同的材质设置为 刷毛样本金属圆管 的材质属性
$scene->registerObjects($obj);                              // 将 刷毛样本金属圆管 注册到 scene 中


// 9、创建 金属印字 模型
$obj = new objects\Objects();                               // 创建 金属印字 模型
$obj->ply = './ply/JinShuYinZi.ply';                        // 指定 金属印字 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$obj->setMaterial($materials);                              // 将上一个相同的材质设置为 金属印字 的材质属性
$scene->registerObjects($obj);                              // 将 金属印字 注册到 scene 中


// 10、创建 刷毛样本印字 模型
$obj = new objects\Objects();                               // 创建 刷毛样本印字 模型
$obj->ply = './ply/ShuaMaoYangBenYinZi.ply';                // 指定 刷毛样本印字 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.248287 0.0124709 0.0377595' ); // 设置材质的漫反射
$materials->setSpecular('0.5');                             // 设置材质的高光反射强度
$materials->setRoughness('0.2');                            // 设置粗糙度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 刷毛样本印字 的材质属性
$scene->registerObjects($obj);                              // 将 刷毛样本印字 注册到 scene 中

// 11、创建 刷毛样本001 模型
$obj = new objects\Objects();                               // 创建 刷毛样本001 模型
$obj->ply = './ply/ShuaMaoYangBen001.ply';                  // 指定 刷毛样本001 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.0204376 0.29558 0.16471' );    // 设置材质的漫反射
$materials->setSpecular('0.5');                             // 设置材质的高光反射强度
$materials->setRoughness('0.2');                            // 设置粗糙度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 刷毛样本001 的材质属性
$scene->registerObjects($obj);                              // 将 刷毛样本001 注册到 scene 中


// 12、创建 刷毛样本002 模型
$obj = new objects\Objects();                               // 创建 刷毛样本002 模型
$obj->ply = './ply/ShuaMaoYangBen002.ply';                  // 指定 刷毛样本002 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Glass();                         // 创建一个材质
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 刷毛样本002 的材质属性
$scene->registerObjects($obj);                              // 将 刷毛样本002 注册到 scene 中


// 13、创建 透明塑料壳 模型
$obj = new objects\Objects();                               // 创建 透明塑料壳 模型
$obj->ply = './ply/TouMingSuLiaoKe.ply';                    // 指定 透明塑料壳 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$obj->setMaterial($materials);                              // 将上一个相同的材质设置为 透明塑料壳 的材质属性
$scene->registerObjects($obj);                              // 将 透明塑料壳 注册到 scene 中


// 14、创建 圆柱形塑料壳 模型
$obj = new objects\Objects();                               // 创建 圆柱形塑料壳 模型
$obj->ply = './ply/YuanZhuXingSuLiaoKe.ply';                // 指定 圆柱形塑料壳 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.291771 0.361307 0.701102' );   // 设置材质的漫反射
$materials->setSpecular('0.5');                             // 设置材质的高光反射强度
$materials->setRoughness('0.0470588');                      // 设置粗糙度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 圆柱形塑料壳 的材质属性
$scene->registerObjects($obj);                              // 将 圆柱形塑料壳 注册到 scene 中


// 15、创建 塑料垫子 模型
$obj = new objects\Objects();                               // 创建 塑料垫子 模型
$obj->ply = './ply/SuLiaoDianZi.ply';                       // 指定 塑料垫子 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.701102 0.701102 0.701102' );   // 设置材质的漫反射
$materials->setSpecular('0.5');                             // 设置材质的高光反射强度
$materials->setRoughness('0.05');                           // 设置粗糙度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 塑料垫子 的材质属性
$scene->registerObjects($obj);                              // 将 塑料垫子 注册到 scene 中


// 16、创建 按扭印字 模型
$obj = new objects\Objects();                               // 创建 按扭印字 模型
$obj->ply = './ply/AnNiuYinZi.ply';                         // 指定 按扭印字 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.0144817 0.0144817 0.0144817' );// 设置材质的漫反射
$materials->setSpecular('1');                               // 设置材质的高光反射强度
$materials->setRoughness('0');                              // 设置粗糙度
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 按扭印字 的材质属性
$scene->registerObjects($obj);                              // 将 按扭印字 注册到 scene 中


// 17、创建 散光灯罩 模型
$obj = new objects\Objects();                               // 创建 散光灯罩 模型
$obj->ply = './ply/SanGuangDengZhao.ply';                   // 指定 散光灯罩 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 0 0 1";
                                                            // 设置模型的变换
$materials = new materials\Disney();                        // 创建一个材质
$materials->setBaseColor( '0.7 0.7 0.7' );                  // 设置材质的漫反射
$materials->setSpecular('0.5');                             // 设置材质的高光反射强度
$materials->setRoughness('1');                              // 设置粗糙度
$materials->setTransparencyFront('0.85');
$materials->setTransparencyBack('0.85');
$scene->registerMaterial($materials);                       // 将材质注册到 scene 中
$obj->setMaterial($materials);                              // 设置 散光灯罩 的材质属性
$scene->registerObjects($obj);                              // 将 散光灯罩 注册到 scene 中


// 18、创建 蓝色灯光 模型
$obj = new objects\Objects();                               // 创建 蓝色灯光 模型
$obj->ply = './ply/LanSeDengGuang.ply';                     // 指定 蓝色灯光 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 -0.0006325925 0 1";
                                                            // 设置模型的变换
$materials = new materials\Matte();                         // 创建一个材质
$materials->setBaseColor('0 0 0');                          // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');                 // 设置材质产生阴影的透明度
$materials->setEmission('0.00604871 0.278894 1');           // 设置材质为一个自发光材质,并指定发光颜色
$materials->emissionCfg = new lights\Emission(              // 设置发光属性
    [
        'gain' => "40 40 40",                               // 设置发光增益
    ]
);
$scene->registerMaterial($materials);                       // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                              // 为 蓝色灯光 指定一个自发光材质
$scene->registerObjects($obj);                              // 将 蓝色灯光 注册到 scene 中


// 19、创建 櫈色灯光 模型
$obj = new objects\Objects();                               // 创建 櫈色灯光 模型
$obj->ply = './ply/DengSeDengGuang.ply';                    // 指定 櫈色灯光 模型网格数据
$obj->appliedtransformation = "0.001 0 0 0 0 -1.629207e-10 0.001 0 0 -0.001 -1.629207e-10 0 0 -0.0006325925 0 1";
                                                            // 设置模型的变换
$materials = new materials\Matte();                         // 创建一个材质
$materials->setBaseColor('0 0 0');                          // 设置材质的漫反射
$materials->setTransparencyShadow('1 1 1');                 // 设置材质产生阴影的透明度
$materials->setEmission('1 0.0722717 0');                   // 设置材质为一个自发光材质,并指定发光颜色
$materials->emissionCfg = new lights\Emission(              // 设置发光属性
    [
        'gain' => "40 40 40",                               // 设置发光增益
    ]   
);  
$scene->registerMaterial($materials);                       // 将的自发光材质注册到 scene 中
$obj->setMaterial($materials);                              // 为 櫈色灯光 指定一个自发光材质
$scene->registerObjects($obj);





// 三、创建相机
$camera = new camera\Perspective(                           // 创建一个相机
    [
        'autovolumeEnable' => 0,                            // 关闭自动体积效果
        'lookatOrig' => "-3.197486 -4.560584 0.8914337",    // 视点坐标位置
        'lookatTarget' => "-2.632151 -3.747173 0.7544713",  // 目标点坐标位置
        'up' => "0.0781663 0.1124666 0.9905763",            // 旋转参数
        'screenwindow' => "-1 1 -1 1",                      // 视野比例
        'autofocusEnable' => 0,                             // 关闭自动对焦
        'fieldofview' => 3.40608,                           // 视野角度大小
        'cliphither' => 0.1                                 // 剪切成像起始位置,单位跟随系统
    ]
);
$camera->bokeh->blades = 0;                                 // 模拟镜头模糊效果的光圈数
$scene->registerCamera($camera);                            // 将相机注册到 scene 中




// 四、设置渲染参数
$render = '';
$renderEngine = new render\RenderEngine();                  // 设置 渲染引擎 的配置参数,默认使用了 PATHOCL,意义着将使用 GPU 设备渲染
$render .= $renderEngine;

$openCL = new render\OpenCL();                              // 设置 GPU 渲染参数,这里使用一个默认的参数
$render .= $openCL;
    
$path = new render\Path();                                  // 设置 光线跟踪 参数,这里使用一个默认的参数
$render .= $path;                                            

$sampler = new render\Sampler();                            // 设置 采样器 配置参数,默认使用 Sobol 类型的自适应采样器
$render .= $sampler;

$lightStrategy = new render\LightStrategy();                // 设置 灯光策略 类型,默认使用 LOG_POWER 类型
$render .= $lightStrategy;

$filesaver = new render\FileSaver();                        // 设置 文件储存格式 配置参数
$render .= $filesaver;

$batch = new render\Batch();                                // 设置 渲染终止 参数,
$batch->haltspp = 1000;                                      // 设置 每像素 采样达 800 则终止渲染
// $batch->halttime = 2000;                                 // 设置 渲染 超时参数,
$render .= $batch;

$sceneCfg = new render\Scene();                             // 设置 场景属性 参数
$render .= $sceneCfg;


$film = new render\Film();                                  // 添加一个渲染胶片
$film->width = 3000;                                        // 设置渲染胶片宽度,单位像素
$film->heigth = 3000;                                       // 设置渲染胶片宽度,单位像素
$img = new render\Image();                                  // 添加一个图像输出
$img->effect = [new render\effect\Pretreatment(),new render\effect\ToneMapLinear(),new render\effect\CammaCorrection()];
                                                            // 为该图像添加效果管线
$film->addImage($img);                                      // 将该图像输出添加到渲染胶片

$film->addImage(new render\Image(['type' => render\Image::TYPE_OBJECT_ID]));    // 为渲染胶片添加一个 通道图类型 的图像输出
$film->addImage(new render\Image(['type' => render\Image::TYPE_RGBA]));         // 添加一个 透明底 的图像输出        

$img = new render\Image();                                  // 添加一个图像输出,使用默认参数
$img->effect[] = new render\effect\NoiseReducerOIDN();      // 添加降噪效果管线,使用默认参数
$img->effect[] = new render\effect\Pretreatment();          //
$img->effect[] = new render\effect\ToneMapLinear();         // 添加一亮度效果管线,使用默认参数
$img->effect[] = new render\effect\Synthesis();             // 添加一个合成效果管线,使用默认参数
$img->effect[] = new render\effect\BackgroundImg(           // 添加一个背景图像,使用默认参数
    [
        'file' => "./map/纯白242.png"
    ]
);
$img->effect[] = new render\effect\CammaCorrection();       // 添加一个 gamma 校正,,使用默认参数
$film->addImage($img);                                      // 将该图像输出添加到渲染胶片
$render .= $film;




// 五、输出场景文件 scene.scn,及渲染文件 render.cfg
echo $scene;
$handle = fopen( "./DemoScene/scene.scn",'w+');
fwrite($handle,$scene);
fclose($handle);

echo $render ;
$handle = fopen( "./DemoScene/render.cfg",'w+');
fwrite($handle,$render);
fclose($handle);




// 六、启动渲染器
$cmd = "luxcoreconsole -o ./DemoScene/render.cfg -f ./DemoScene/scene.scn 1>./DemoScene/render.log 2>&1";
$output;
$returnVar;
exec($cmd,$output,$returnVar);

if( $returnVar == 127 ) throw new \Exception("Please install the luxcorerender bin file in the system directory correctly,Or add to the system environment variable");

?>