diff --git a/examples/printScene.php b/examples/printScene.php index 463918a..23f885d 100644 --- a/examples/printScene.php +++ b/examples/printScene.php @@ -5,227 +5,461 @@ namespace Blobt\Luxcore\scene; include dirname(dirname(__FILE__)) . "/vendor/autoload.php"; +const OPEN = true; +const CLOSE = false; -$scene = new Scene(); // 创建一个场景 + +$scene = new Scene(); // 创建一个场景 // 一、创建光场: // 1、创建 面片光001 -$obj = new objects\Objects(); // 创建 面片光001 的实体 -$obj->ply = './ply/面光.001.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 中 +$obj = new objects\Objects(); // 创建 面片光001 的实体 +$obj->ply = './ply/面光.001.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/面光.002.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( // 设置发光属性 +$obj = new objects\Objects(); // 创建 面片光002 的实体 +$obj->ply = './ply/面光.002.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", // 设置发光增益 + 'gain' => "30 30 30", // 设置发光增益 ] ); -$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 -$obj->setMaterial($materials); // 为 面片光002 指定一个自发光材质 -$scene->registerObjects($obj); // 将 面片光002 注册到 scene 中 +$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 +$obj->setMaterial($materials); // 为 面片光002 指定一个自发光材质 +$scene->registerObjects($obj); // 将 面片光002 注册到 scene 中 // 3、创建 面片光003 -$obj = new objects\Objects(); // 创建 面片光003 的实体 -$obj->ply = './ply/面光.003.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( // 设置发光属性 +$obj = new objects\Objects(); // 创建 面片光003 的实体 +$obj->ply = './ply/面光.003.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", // 设置发光增益 + 'gain' => "50 50 50", // 设置发光增益 ] ); -$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 -$obj->setMaterial($materials); // 为 面片光003 指定一个自发光材质 -$scene->registerObjects($obj); // 将 面片光003 注册到 scene 中 +$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 +$obj->setMaterial($materials); // 为 面片光003 指定一个自发光材质 +$scene->registerObjects($obj); // 将 面片光003 注册到 scene 中 // 4、创建 面片光004 -$obj = new objects\Objects(); // 创建 面片光004 的实体 -$obj->ply = './ply/面光.004.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( // 设置发光属性 +$obj = new objects\Objects(); // 创建 面片光004 的实体 +$obj->ply = './ply/面光.004.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", // 设置发光增益 + 'gain' => "4 4 4", // 设置发光增益 ] ); -$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 -$obj->setMaterial($materials); // 为 面片光004 指定一个自发光材质 -$scene->registerObjects($obj); // 将 面片光004 注册到 scene 中 +$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 +$obj->setMaterial($materials); // 为 面片光004 指定一个自发光材质 +$scene->registerObjects($obj); // 将 面片光004 注册到 scene 中 // 5、创建 面片光005 -$obj = new objects\Objects(); // 创建 面片光005 的实体 -$obj->ply = './ply/面光.005.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( // 设置发光属性 +$obj = new objects\Objects(); // 创建 面片光005 的实体 +$obj->ply = './ply/面光.005.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", // 设置发光增益 + 'gain' => "10 10 10", // 设置发光增益 ] ); -$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 -$obj->setMaterial($materials); // 为 面片光005 指定一个自发光材质 -$scene->registerObjects($obj); // 将 面片光005 注册到 scene 中 +$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 +$obj->setMaterial($materials); // 为 面片光005 指定一个自发光材质 +$scene->registerObjects($obj); // 将 面片光005 注册到 scene 中 // 6、创建 面片光006 -$obj = new objects\Objects(); // 创建 面片光006 的实体 -$obj->ply = './ply/面光.006.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( // 设置发光属性 +$obj = new objects\Objects(); // 创建 面片光006 的实体 +$obj->ply = './ply/面光.006.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' => "SD-037.exr", // 加载一个光域文件 - 'gamma' => 1, // 设置校正光域文件的gamma值 - 'storage' => "float" // 声明光域文件表示色值的数据类型 + 'gain' => "8 8 8", // 设置发光增益 + 'mapfile' => "SD-037.exr", // 加载一个光域文件 + 'gamma' => 1, // 设置校正光域文件的gamma值 + 'storage' => "float" // 声明光域文件表示色值的数据类型 ] ); -$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 -$obj->setMaterial($materials); // 为 面片光006 指定一个自发光材质 -$scene->registerObjects($obj); // 将 面片光006 注册到 scene 中 +$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 +$obj->setMaterial($materials); // 为 面片光006 指定一个自发光材质 +$scene->registerObjects($obj); // 将 面片光006 注册到 scene 中 // 7、创建 面片光006 -$obj = new objects\Objects(); // 创建 面片光 的实体 -$obj->ply = './ply/面光.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( // 设置发光属性 +$obj = new objects\Objects(); // 创建 面片光 的实体 +$obj->ply = './ply/面光.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", // 设置发光增益 + 'gain' => "3.3 3.3 3.3", // 设置发光增益 ] ); -$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 -$obj->setMaterial($materials); // 为 面片光 指定一个自发光材质 -$scene->registerObjects($obj); // 将 面片光 注册到 scene 中 +$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 +$obj->setMaterial($materials); // 为 面片光 指定一个自发光材质 +$scene->registerObjects($obj); // 将 面片光 注册到 scene 中 // 8、创建环境光 -$light = new lights\env\HdrImage( // new 一个环境光对象 +$light = new lights\env\HdrImage( // new 一个环境光对象 [ - 'gain' => "1.25 1.25 1.25", // 设置颜色增益 + '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' => "env.png", // 加载一个全景图像文件 - 'gamma' => 1, // 设置一个校正全景图像文件的 gamma 值 - 'storage' => "byte" // 声明这个图像文件表示色值的数据类型 + 'file' => "env.png", // 加载一个全景图像文件 + 'gamma' => 1, // 设置一个校正全景图像文件的 gamma 值 + 'storage' => "byte" // 声明这个图像文件表示色值的数据类型 ] ); -$scene->registerLight($light); // 将环境光注册到 scene 中 - - - - -// 二、加载要渲染的模型 - - - - - - - - - - +$scene->registerLight($light); // 将环境光注册到 scene 中 -// //添加第一个模型 -// $obj = new objects\Objects( [ 'ply' => 'mesh-10086.ply','appliedtransformation' => '1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1' ] ); //创建一个的模型 -// $cloudsMap = new texture\procedural\BlenderClouds(); //创建一个 Clouds类的贴图对象 -// $scene->registerTexture($cloudsMap); //将这个对象注册到 Scene +// 二、添加要渲染的模型 +// 1、创建地面模型 +$obj = new objects\Objects(); // 创建 地面 的实体 +$obj->ply = './ply/地面.ply'; // 指定 地面 实体网格数据 -// $imageMap = new texture\procedural\ImageMap(); //创建一个 ImageMap类的贴图对象 -// $scene->registerTexture($imageMap); //将这个对象注册到 Scene - -// $blend = new texture\procedural\BlenderBlend(); //创建一个 Blend类的贴图对象 -// $scene->registerTexture($blend); //将这个对象注册到 Scene - - -// $disney = new materials\Disney(); //创建一个 Disney 材质对象 -// $disney->setBaseColor($cloudsMap); //为 basecolor 指定一个贴图对象,如果这个对象没有注册到Scene,则 set函数抛出异常,以下同理 -// $disney->setMetallic($blend); -// $disney->setBumptex($imageMap); -// $scene->registerMaterial($disney); //将这个对象注册到 Scene +$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' => "方形阴影遮照 (3).png", // 加载一个图像文件 + 'gain' => 0.6, // 设置颜色增益 + 'gamma' => 1, // 设置校正图像文件的gamma值 + ] +); +$texture->mapping = $mapping; // 将铺贴对象赋值给纹理的“mapping”属性 +$scene->registerTexture($texture); // 将纹理注册到 scene 中 -// $metal = new materials\Metal(); //创建一个 Disney 材质对象 -// $metal->setBumptex($cloudsMap); -// $scene->registerMaterial($metal); //将这个对象注册到 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/刷毛003.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/刷毛002.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/刷毛001.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/牙刷头.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/牙刷头文字.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/金属振动轴.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/金属按扭底坐.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/刷毛样本金属圆管.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/金属印字.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/刷毛样本印字.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/刷毛样本001.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/刷毛样本002.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/透明塑料壳.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/圆柱形塑料壳.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/塑料垫子.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/按扭印字.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/散光灯罩.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.75'); +$materials->setTransparencyBack('0.75'); +$scene->registerMaterial($materials); // 将材质注册到 scene 中 +$obj->setMaterial($materials); // 设置 散光灯罩 的材质属性 +$scene->registerObjects($obj); // 将 散光灯罩 注册到 scene 中 + + +// 18、创建 蓝色灯光 模型 +$obj = new objects\Objects(); // 创建 蓝色灯光 的实体 +$obj->ply = './ply/蓝色灯光.ply'; // 指定 蓝色灯光 实体网格数据 +$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' => "5 5 5", // 设置发光增益 + ] +); +$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 +$obj->setMaterial($materials); // 为 蓝色灯光 指定一个自发光材质 +$scene->registerObjects($obj); // 将 蓝色灯光 注册到 scene 中 + + +// 19、创建 櫈色灯光 模型 +$obj = new objects\Objects(); // 创建 櫈色灯光 的实体 +$obj->ply = './ply/櫈色灯光.ply'; // 指定 櫈色灯光 实体网格数据 +$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' => "10 10 10", // 设置发光增益 + ] +); +$scene->registerMaterial($materials); // 将的自发光材质注册到 scene 中 +$obj->setMaterial($materials); // 为 櫈色灯光 指定一个自发光材质 +$scene->registerObjects($obj); -// $mix = new materials\Mix(); //创建 Mix 材质对象 -// $mix->setMaterial1($disney); //为材质通道1 指定一个键名 -// $mix->setMaterial2($metal); //为材质通道2 指定一个键名 -// $mix->setAmount($blend ); //指定混合系数为 0.6 -// $scene->registerMaterial($mix); //将这个对象注册到 Scene -// $obj->setMaterial($mix) ; //为模型的指定一个混合材质 -// $scene->registerObjects($obj); //将模型添加到场景中 +// 三、创建相机 +$camera = new camera\Perspective(); +$scene->registerCamera($camera); -// //添加第二个模型 -// $obj = new objects\Objects( [ 'ply' => 'mesh-119.ply','appliedtransformation' => '1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1' ] ); //创建一个的模型, -// $scene->registerObjects($obj); //将模型添加到场景中 -// //添加第三个模型 -// $obj = new objects\Objects( [ 'ply' => 'mesh-119.ply','appliedtransformation' => '1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1' ] ); //创建一个的模型, -// $scene->registerObjects($obj); //将模型添加到场景中 +// bokeh.blades = 0 +// bokeh.power = 3 +// bokeh.distribution.type = "NONE" +// bokeh.scale.x = 0.7071068 +// bokeh.scale.y = 0.7071068 -// //添加第四个模型 -// $obj = new objects\Objects( [ 'ply' => 'mesh-119.ply','appliedtransformation' => '1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1' ] ); //创建一个的模型, +echo $scene; -// $ClearVol = new volumes\Clear(); //创建一个 Clear体积效果 -// $scene->registerVolume($ClearVol); //将体积效果注册到Scene -// $colorGlass = new materials\Glass(); //创建一个玻璃材质, -// $colorGlass->setVolumeInterior($ClearVol); //将 Clear体积效果赋值到玻璃材质 的 体积属性 -// $scene->registerMaterial($colorGlass); //将玻璃材质注册到 Scene -// $obj->setMaterial($colorGlass); //将玻璃材质赋值到模型的材质属性 -// $scene->registerObjects($obj); //将模型添加到场景中 -// //添加一个世界对象 -// $default = new world\WorldDefault(); -// $default->setDefaultVolume($ClearVol); -// $scene->registerWorld($default); -// //添加一个相机 -// $camera = new camera\Perspective(); -// $scene->registerCamera($camera); -echo $scene; ?> diff --git a/src/core/LoardObj.php b/src/core/LoardObj.php index 5e18216..696ec23 100644 --- a/src/core/LoardObj.php +++ b/src/core/LoardObj.php @@ -29,9 +29,9 @@ class LoardObj ]; /** - * @var array 1、储存ply模型数据,Ply文件头部数据(内容包括顶点数据、面数据、线数据、材质数据或其他数据的格式及属性) - * 2、顶点数据,每行数据描述了顶点的坐标、法线、及UV坐标; - * 3、索引顶点数据,每行数据描述了索引顶点的个数,及顶点数据的素引。 + * @var array 1、储存ply模型数据,Ply文件头部数据(内容包括顶点数据、面数据、线数据、材质数据或其他数据的格式及属性) + * 2、顶点数据,每行数据描述了顶点的坐标、法线、及UV坐标; + * 3、索引顶点数据,每行数据描述了索引顶点的个数,及顶点数据的素引。 */ private $plyData = []; diff --git a/src/scene/BaseCfg.php b/src/scene/BaseCfg.php index e3b8908..957c20d 100644 --- a/src/scene/BaseCfg.php +++ b/src/scene/BaseCfg.php @@ -50,14 +50,15 @@ class BaseCfg extends Base switch(gettype($value)) { case 'string': - if( count(explode(" ", $value)) != 3 || in_array(false,array_map('is_numeric',explode(" ", $value))) ) - { - $ret .= "{$className}.{$name} = \"{$value}\"\n"; - } - else - { - $ret .= "{$className}.{$name} = {$value}\n"; - } + // if( count(explode(" ", $value)) != 3 || in_array(false,array_map('is_numeric',explode(" ", $value))) ) + // { + // $ret .= "{$className}.{$name} = \"{$value}\"\n"; + // } + // else + // { + // $ret .= "{$className}.{$name} = {$value}\n"; + // } + $ret .= "{$className}.{$name} = \"{$value}\"\n"; break; case 'integer': @@ -74,6 +75,8 @@ class BaseCfg extends Base break; case 'NULL': + // echo "已经从这里退出\n"; + // exit; break; case 'double': diff --git a/src/scene/camera/Perspective.php b/src/scene/camera/Perspective.php index 2f50261..83f370c 100644 --- a/src/scene/camera/Perspective.php +++ b/src/scene/camera/Perspective.php @@ -32,7 +32,7 @@ class Perspective extends CameraBase /** * @var float 景深(取值:0.0001744423-0.2232861),使用较高的值可得到更大程度的散焦效果,使用较低的值可得到更锐利的图像效果 */ - public $lensradius = 0; + public $lensradius = 0; //输不出 0 /** * @var float 物距,相机成像焦点到被拍摄物体的距离 @@ -54,8 +54,8 @@ class Perspective extends CameraBase /** * @var float TODO:运动模糊,其参数意义还需测试才能确定 */ - public $shutteropen = 0; - public $shutterclose = 1; + public $shutteropen = self::CLOSE; + public $shutterclose = self::OPEN; diff --git a/src/scene/texture/mapping/Mapping.php b/src/scene/texture/mapping/Mapping.php index 22911d4..3844ef0 100644 --- a/src/scene/texture/mapping/Mapping.php +++ b/src/scene/texture/mapping/Mapping.php @@ -10,12 +10,12 @@ class Mapping extends BaseCfg /** * 铺贴类型 */ - const TYPE_UVMAPPING2D = 'uvmapping2d'; //以模型的UV坐标,调整贴图变换参数的类型 - const TYPE_UVRANDOMMAPPING2D = 'uvrandommapping2d'; //以模型的UV坐标,调整贴图随机变换参数的类型 - const TYPE_LOCALMAPPING3D = 'localmapping3d'; //以模型的本地坐标,调整贴图三维变换参数的类型 - const TYPE_GLOBALMAPPING3D = 'globalmapping3d'; //以世界坐标,调整贴图三维变换参数的类型 - const TYPE_LOCALRANDOMMAPPING3D = 'localrandommapping3d'; //以模型的本地坐标,调整贴图三维随机变换参数的类型 - const TYPE_UVMAPPING3D = 'uvmapping3d'; //以模型的UV坐标,调整贴图三维变换参数的类型 + const TYPE_UVMAPPING2D = 'uvmapping2d'; // 以模型的UV坐标,调整贴图变换参数的类型 + const TYPE_UVRANDOMMAPPING2D = 'uvrandommapping2d'; // 以模型的UV坐标,调整贴图随机变换参数的类型 + const TYPE_LOCALMAPPING3D = 'localmapping3d'; // 以模型的本地坐标,调整贴图三维变换参数的类型 + const TYPE_GLOBALMAPPING3D = 'globalmapping3d'; // 以世界坐标,调整贴图三维变换参数的类型 + const TYPE_LOCALRANDOMMAPPING3D = 'localrandommapping3d'; // 以模型的本地坐标,调整贴图三维随机变换参数的类型 + const TYPE_UVMAPPING3D = 'uvmapping3d'; // 以模型的UV坐标,调整贴图三维变换参数的类型 /** @@ -30,31 +30,31 @@ class Mapping extends BaseCfg /** * @var string 铺贴类型 */ - public $type; + private $type; //当坐标为UV时,以下参数才可设以置和输出 /** * @var integer UV通道,只有当坐标为UV时,参数才可设以置和输出 */ - public $uvindex; + private $uvindex; //当铺贴类型属于随机时,以下参数才可设以置和输出 /** * @var string 随机种子类型,当铺贴类型为随机时,参数才可设以置和输出,当随机种子类型为 triangle_aov时,有一个生成1个多余ply文件的Bug */ - public $seedType; + private $seedType; /** * @var integer 当随机种子类型为 object_id_offset时,可以设置为大于等于的整数,否则只能为0,当铺贴类型为随机时,参数才可设以置和输出 */ - public $objectidoffsetValue; + private $objectidoffsetValue; /** * @var integer TODO:具体作用尚未明确,(固定取值:0),当铺贴类型为随机时,参数才可设以置和输出 */ - public $triangleaovIndex; + private $triangleaovIndex; @@ -62,57 +62,99 @@ class Mapping extends BaseCfg /** * @var integer TODO:具体作用尚未明确,(固定取值:1),当铺贴类型为二维且随机时,参数才可设以置和输出 */ - public $uvscaleUniform; + private $uvscaleUniform; /** * @var string 贴图缩放参数,取值为 大于等于0 的小数,当铺贴类型为随机时,需要为两个轴方指定最大和最小值,如 ‘1 100 1 50’ */ - public $uvscale; + private $uvscale; /** * @var string 贴图偏移参数,取值为 一个自然数,正负号决定其偏移方向,当铺贴类型为随机时,需要为两个轴方指定最大和最小值,如 ‘1 100 1 50’ */ - public $uvdelta; + private $uvdelta; /** - * @var float 贴图旋转参数,取值为 0到小于360 的小数,当铺贴类型为随机时,需要指定为最大和最小值,如 ‘1 100’ + * @var string 贴图旋转参数,取值为 0到小于360 的小数,当铺贴类型为随机时,需要指定为最大和最小值,如 ‘1 100’ */ - public $rotation; + private $rotation; //当铺贴类型属于三维时,以下参数才可设以置和输出 /** - * @var string 贴图位置变换参数,只有当铺贴类型为三维且时,才可以设置和输出此参数 + * @var string 贴图位置变换参数,只有当铺贴类型为三维且非随机时,才可以设置和输出此参数 */ - public $transformation; + private $transformation; + + //当铺贴类型属于 三维 且 随机 且 非VU坐标 时,以下参数才可设以置和输出 /** * @var float 三个轴向的旋转参数,取值为 0到小于360 的小数,当最小值与最大值相等时,则关闭此三项参数的随机功能 */ - public $xrotation; - public $yrotation; - public $zrotation; + private $xrotation; + private $yrotation; + private $zrotation; /** * @var bool 指定是否等比缩放 */ - public $xyzscaleUniform; + private $xyzscaleUniform; /** * @var float 三个轴向的缩放参数,取值为 大于等于0 的小数,当最小值与最大值相等时,则关闭此三项参数的随机功能 */ - public $xscale; - public $yscale; - public $zscale; + private $xscale; + private $yscale; + private $zscale; /** * @var float 三个轴向的偏移参数,取值为 一个自然数,正负号决定其偏移方向,当最小值与最大值相等时,则关闭此三项参数的随机功能 */ - public $xtranslate; - public $ytranslate; - public $ztranslate; - + private $xtranslate; + private $ytranslate; + private $ztranslate; + + public function useUVMapping2d + ( + int $uvindex = 0, + string $rotation = '0', + string $uvscale = '0', + string $uvdelta = '0' + ) + { + $this->type = self::TYPE_UVMAPPING2D; + $this->uvindex = $uvindex; + $this->rotation = $rotation; + $this->uvscale = $uvscale; + $this->uvdelta = $uvdelta; + } + + public function useUVRandomMapping2d() + { + // 等完善 + } + + public function useLocalMapping3d() + { + // 等完善 + } + + public function useGlobalMapping3d() + { + // 等完善 + } + + public function useLocalRandomMapping3d() + { + // 等完善 + } + + public function useUVMapping3d() + { + // 等完善 + } + } ?>