From c85c3aeced3d924f3e98cfbe048bb4e6ba89bcae Mon Sep 17 00:00:00 2001 From: yuanjiajia <1139393632@qq.com> Date: Wed, 5 Jul 2023 23:31:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B2=E6=9F=93=E6=B5=8B=E5=BC=8F=20?= =?UTF-8?q?=E6=A1=88=E4=BE=8B=20=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/testImage.php | 37 +++++++++++++++++++++++++++++++++++++ src/utils/MatHelper.php | 25 ++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 examples/testImage.php diff --git a/examples/testImage.php b/examples/testImage.php new file mode 100644 index 0000000..378ce3b --- /dev/null +++ b/examples/testImage.php @@ -0,0 +1,37 @@ +getPixelIterator(); + +$ll = 0; +foreach ($imageIterator as $row => $pixels) { + foreach ($pixels as $column => $pixel) { + // 获取每个像素色值; + $value = $pixel->getColor(); + + // 反相绿色通道色值; + $r = $value["r"]; + $g = abs(($value["g"] - 255)); + $b = $value["b"]; + $a = $value["a"]; + $pixel->setColor("rgba({$r}, {$g}, {$b}, {$a})"); + } + $imageIterator->syncIterator(); +} + +$imagick->writeImage("/media/yuanjiajia/zhiTai_300GB_P4/LuxcoreModel/normal_maps1-g.jpg"); + + + +?> diff --git a/src/utils/MatHelper.php b/src/utils/MatHelper.php index d14a934..262982b 100644 --- a/src/utils/MatHelper.php +++ b/src/utils/MatHelper.php @@ -107,8 +107,31 @@ class MatHelper{ $textureHandle = fopen($textureSavaPath, "w"); (new Client())->get($textureUrl, [RequestOptions::SINK => $textureHandle]); + // 因为 LuxCore 使用 opengl 规范的法线纹理格式,与 babylon 使用的 DirectX 不同, + // 所以这里需要反转 G 通道色值,以保证法线纹理应用效果与 babylon 一致。 + $fileName = preg_replace('/(\.[^\.]+)$/','',basename($textureSavaPath)); + $suffixName = preg_replace('/^('.$fileName.')+/','',basename($textureSavaPath)); + $textureInvertGPath = $downloadDir.$fileName.'_InvertG'.$suffixName; + $imagick = new \Imagick($textureSavaPath); + $imageIterator = $imagick->getPixelIterator(); + foreach ($imageIterator as $row => $pixels) { + foreach ($pixels as $column => $pixel) { + // 获取每个像素色值; + $value = $pixel->getColor(); + // 反相绿色通道色值; + $r = $value["r"]; + $g = abs(($value["g"] - 255)); + $b = $value["b"]; + $a = $value["a"]; + $pixel->setColor("rgba({$r}, {$g}, {$b}, {$a})"); + } + $imageIterator->syncIterator(); + } + $imagick->writeImage($textureInvertGPath); + + $bumpTexture = new ImageMap( - ['file' => $textureSavaPath] + ['file' => $textureInvertGPath] ); $bumpTexture->gamma = 1; $bumpTexture->mapping = $mapping;