From 0b1a25dc8c2269237303f7c426f25778fdb7f8f5 Mon Sep 17 00:00:00 2001 From: yuanjiajia <1139393632@qq.com> Date: Sat, 21 May 2022 18:31:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=BA=E6=99=AF=E6=96=87=E4=BB=B6=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E5=86=99=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 2 +- examples/printRender.php | 107 -------- examples/printScene.php | 468 -------------------------------- examples/startDome.php | 522 ++++++++++++++++++++++++++++++++++++ src/scene/Gltf.php | 58 ---- src/scene/Scene.php | 32 +-- src/scene/render/Filter.php | 2 +- src/scene/render/Image.php | 12 +- src/scene/render/Sobol.php | 2 +- src/utils/StringHelper.php | 3 +- 10 files changed, 548 insertions(+), 660 deletions(-) delete mode 100644 examples/printRender.php delete mode 100644 examples/printScene.php create mode 100644 examples/startDome.php delete mode 100644 src/scene/Gltf.php diff --git a/.vscode/launch.json b/.vscode/launch.json index 576ac63..eb29118 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -12,7 +12,7 @@ "name": "Launch currently open script", "type": "php", "request": "launch", - "program": "${workspaceFolder}/examples/printScene.php", + "program": "${workspaceFolder}/examples/startDome.php", "cwd": "${workspaceFolder}", "port": 9055 } diff --git a/examples/printRender.php b/examples/printRender.php deleted file mode 100644 index a143b02..0000000 --- a/examples/printRender.php +++ /dev/null @@ -1,107 +0,0 @@ -effect = [new render\effect\Pretreatment(),new render\effect\ToneMapLinear(),new render\effect\CammaCorrection()]; -// $film->addImage($img); - -// $film->addImage(new render\Image(['type' => 'ALBEDO'])); -// $film->addImage(new render\Image(['type' => 'AVG_SHADING_NORMAL'])); - -// $film->addImage(new render\Image(['type' => 'OBJECT_ID'])); - - -// $img = new render\Image(); -// $img->effect = [new render\effect\NoiseReducerOIDN(),new render\effect\Pretreatment(),new render\effect\ToneMapLinear(),new render\effect\CammaCorrection()]; -// $film->addImage($img); - - -// echo $film; - -// class vector implements \JsonSerializable -// { -// public function __construct( $arr ) -// { -// $this->array = $arr; -// } - -// public function jsonSerialize() -// { -// return $this->array; -// } -// } - - -// $test = [ -// "x" => "geeks", -// "y" => "for", -// "z" => "geeks" -// ]; - -// $test = new Gltf(); - -// echo json_encode($test, JSON_PRETTY_PRINT); - -$rr = 'AACAPwAAgD8AAIA/AACAPwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIA/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAgPwAAgD4AACA/AAAAPwAAYD8AAAA/AABgPwAAgD4AAAEAAgAAAAIAAwA='; - -// echo base64_decode($rr); - -// $fileType = base64_decode($rr); -$fileType = "\x04\x00\xa0\x00"; - -echo $fileType; -echo "\n\n"; - -$rr = unpack("cchars/nint",$fileType); - -var_dump($rr); - - -$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw=='; -echo base64_decode($str); - - -?> diff --git a/examples/printScene.php b/examples/printScene.php deleted file mode 100644 index 58e5a93..0000000 --- a/examples/printScene.php +++ /dev/null @@ -1,468 +0,0 @@ -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( // 设置发光属性 -// [ -// '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/面光.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", // 设置发光增益 -// ] -// ); -// $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( // 设置发光属性 -// [ -// '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/面光.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", // 设置发光增益 -// ] -// ); -// $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( // 设置发光属性 -// [ -// '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 中 - -// // 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( // 设置发光属性 -// [ -// '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' => "env.png", // 加载一个全景图像文件 -// 'gamma' => 1, // 设置一个校正全景图像文件的 gamma 值 -// 'storage' => "byte" // 声明这个图像文件表示色值的数据类型 -// ] -// ); -// $scene->registerLight($light); // 将环境光注册到 scene 中 - - - - - - - - -// // 二、添加要渲染的模型 -// // 1、创建地面模型 -// $obj = new objects\Objects(); // 创建 地面 的实体 -// $obj->ply = './ply/地面.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' => "方形阴影遮照 (3).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/刷毛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); - - - - - -// 三、创建相机 -$camera = new camera\Perspective(); -// echo $camera; - -$scene->registerCamera($camera); - - - - -// bokeh.blades = 0 -// bokeh.power = 3 -// bokeh.distribution.type = "NONE" -// bokeh.scale.x = 0.7071068 -// bokeh.scale.y = 0.7071068 - - - - echo $scene; - - - - - - - - - - -?> diff --git a/examples/startDome.php b/examples/startDome.php new file mode 100644 index 0000000..fa9961f --- /dev/null +++ b/examples/startDome.php @@ -0,0 +1,522 @@ +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( // 设置发光属性 + [ + '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/面光.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", // 设置发光增益 + ] +); +$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( // 设置发光属性 + [ + '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/面光.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", // 设置发光增益 + ] +); +$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( // 设置发光属性 + [ + '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 中 + +// 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( // 设置发光属性 + [ + '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' => "env.png", // 加载一个全景图像文件 + 'gamma' => 1, // 设置一个校正全景图像文件的 gamma 值 + 'storage' => "byte" // 声明这个图像文件表示色值的数据类型 + ] +); +$scene->registerLight($light); // 将环境光注册到 scene 中 + + + + +// 二、添加要渲染的模型 +// 1、创建地面模型 +$obj = new objects\Objects(); // 创建 地面 的实体 +$obj->ply = './ply/地面.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' => "方形阴影遮照.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/刷毛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); + + + + + +// 三、创建相机 +$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 中 + +echo $scene; +$handle = fopen( "/home/yuanjiajia/Desktop/blender/blender_test/scene/scene.scn",'w+'); +fwrite($handle,$scene); +fclose($handle); + + + + +// 四、设置渲染参数 +$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 类型的自适应采样器 +$sampler->sampling->superSampling = render\Sobol::POW_TWO_SIX; // 设置采样基数的倍数 +$render .= $sampler; + +$lightStrategy = new render\LightStrategy(); // 设置 灯光策略 类型,默认使用 LOG_POWER 类型 +$render .= $lightStrategy; + +$filesaver = new render\FileSaver(); // 设置 文件储存格式 配置参数 +$render .= $filesaver; + +$batch = new render\Batch(); // 设置 渲染终止 参数, +$batch->halttime = 600; // 设置 渲染 超时参数, +$render .= $batch; + +$scene = new render\Scene(); // 设置 场景属性 参数 +$render .= $scene; + + +$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' => "./纯白242.png" + ] +); +$img->effect[] = new render\effect\CammaCorrection(); // 添加一个 gamma 校正,,使用默认参数 +$film->addImage($img); // 将该图像输出添加到渲染胶片 +$render .= $film; + + +echo $render ; +$handle = fopen( "/home/yuanjiajia/Desktop/blender/blender_test/scene/render.cfg",'w+'); +fwrite($handle,$render); +fclose($handle); + +?> diff --git a/src/scene/Gltf.php b/src/scene/Gltf.php deleted file mode 100644 index ba77c4a..0000000 --- a/src/scene/Gltf.php +++ /dev/null @@ -1,58 +0,0 @@ - diff --git a/src/scene/Scene.php b/src/scene/Scene.php index ef37cb8..fd2f2a0 100644 --- a/src/scene/Scene.php +++ b/src/scene/Scene.php @@ -7,39 +7,39 @@ class Scene extends BaseCfg { /** - * @var array 模型数组 + * @var array 相机数组 */ - private $objects = []; + private $camera = []; /** - * @var array 材质数组 + * @var array 灯光数组 */ - private $materials = []; + private $lights = []; /** - * @var array 贴图数组 + * @var array 世界对象数组 */ - private $textures = []; + public $world = []; /** * @var array 体积材质数组 */ - private $volumes = []; + private $volumes = []; /** - * @var array 灯光数组 + * @var array 贴图数组 */ - private $lights = []; + private $textures = []; /** - * @var array 相机数组 + * @var array 材质数组 */ - private $cameras = []; + private $materials = []; /** - * @var array 世界对象数组 + * @var array 模型数组 */ - public $world = []; + private $objects = []; /** * 为每个需要存到Scene的实例化对象生成一个唯一的ID @@ -115,19 +115,19 @@ class Scene extends BaseCfg */ public function registerCamera(&$camera) { - $this->cameras = []; + $this->camera = []; foreach( get_object_vars($camera) as $key => $value ) { if( $value !== null ) { $key = implode(".", array_map('strtolower', StringHelper::camelStrToArray($key))); - $this->cameras[$key] = $value; + $this->camera[$key] = $value; } } } /** - * @param object $camera 接收一个World类对象,为其颁发一个注册信息,并将其存到Scene + * @param object $world 接收一个World类对象,为其颁发一个注册信息,并将其存到Scene */ public function registerWorld(&$world) { diff --git a/src/scene/render/Filter.php b/src/scene/render/Filter.php index 2583702..5766f92 100644 --- a/src/scene/render/Filter.php +++ b/src/scene/render/Filter.php @@ -18,7 +18,7 @@ class Filter extends BaseCfg /** * @var string 使用何种抗锯齿类型 */ - public $type = self::TYPE_BLACKMANHARRIS; + public $type = self::TYPE_NONE; /** * @var float 边缘抗锯齿宽度,单位像素(取值:大于0的数浮点数) diff --git a/src/scene/render/Image.php b/src/scene/render/Image.php index f6c94b2..16ff566 100644 --- a/src/scene/render/Image.php +++ b/src/scene/render/Image.php @@ -151,18 +151,18 @@ class Image extends BaseCfg Base::__construct($config); if( in_array($this->type,self::PNG ) ) { - if($this->index == null) $this->filename = "{$this->type}.png"; - else $this->filename = "{$this->type}_{$this->index}.png"; + if($this->index == null) $this->filename = "../{$this->type}.png"; + else $this->filename = "../{$this->type}_{$this->index}.png"; } else if ( in_array($this->type,self::EXR) ) { - if($this->index == null) $this->filename = "{$this->type}.exr"; - else $this->filename = "{$this->type}_{$this->index}.exr"; + if($this->index == null) $this->filename = "../{$this->type}.exr"; + else $this->filename = "../{$this->type}_{$this->index}.exr"; } else { - if($this->index == null) $this->filename = "{$this->type}.jpg"; - else $this->filename = "{$this->type}_{$this->index}.jpg"; + if($this->index == null) $this->filename = "../{$this->type}.jpg"; + else $this->filename = "../{$this->type}_{$this->index}.jpg"; } } diff --git a/src/scene/render/Sobol.php b/src/scene/render/Sobol.php index b250057..0cca0e1 100644 --- a/src/scene/render/Sobol.php +++ b/src/scene/render/Sobol.php @@ -23,7 +23,7 @@ class Sobol extends BaseCfg const POW_TWO_SIX = 64; /** - * @var integer TODO:初步判断为每过程每像素采样的样本数 + * @var integer TODO:初步判断为每像素采样的样本数其数 */ public $overlapping = self::PROGRESSIVE; diff --git a/src/utils/StringHelper.php b/src/utils/StringHelper.php index 7a56a43..1910ce7 100644 --- a/src/utils/StringHelper.php +++ b/src/utils/StringHelper.php @@ -35,7 +35,6 @@ class StringHelper $retStr[] = "{$key}.{$value}"; } } - else if(is_object($value) && $value instanceof BaseCfg) { foreach( explode("\n", $value->toString()) as $value ) @@ -45,7 +44,7 @@ class StringHelper $value = substr($value,strpos($value,'.')); $retStr[] = "{$key}{$value}"; } - } + } } else if( is_bool($value) ) {