libre3d/render-3d

用于帮助渲染常见3D文件格式的包装库。

1.2.1 2017-06-17 20:42 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:58:03 UTC


README

Build Status codecov.io

render-3d

用于帮助渲染常见3D文件格式的包装库。

需求

该库运行需要一些条件。

  • 对于 Open SCAD 文件:需要 Open SCAD
  • 对于实际渲染,需要 POV Ray
  • Composer
  • stl2pov v3.2.0+ python 脚本,是 stltools 的一部分
    • 自1.2.0版本起不再需要。有关详细信息,请参阅问题 #4。

安装

如果您使用composer,只需将 "libre3d/render-3d": "~1.2.0" 添加到 require 部分,然后运行 composer update

或者如果您不使用composer,克隆此仓库。然后 获取composer。然后从该库的根目录运行 composer install 以安装依赖项。

使用方法

如果您尚未将composer供应商自动加载PHP文件包含到项目中,您需要将其包含,如下所示

require 'render-3d/vendor/autoload.php';

此路径可能需要调整。

然后您需要初始化Render3d对象,并让它知道一些位置(请注意,这是一个快速示例,有更多选项和不同的方式可以使用此库渲染文件)

$render3d = new \Libre3d\Render3d\Render3d();

// this is the working directory, where it will put any files used during the render process, as well as the final
// rendered image.
$render3d->workingDir('/path/to/working/folder/');

// Set paths to the executables on this system
$render3d->executable('openscad', '/path/to/openscad');
$render3d->executable('povray', '/path/to/povray');

try {
	// This will copy in your starting file into the working DIR if you give the full path to the starting file.
	// This will also set the fileType for you.
	$render3d->filename('/path/to/starting/stlfile.stl');

	// Render!  This will do all the necessary conversions as long as the render engine (in this
	// case, the default engine, PovRAY) "knows" how to convert the file into a file it can use for rendering.
	// Note that this is a multi-step process that can be further broken down if you need it to.
	$renderedImagePath = $render3d->render('povray');

	echo "Render successful!  Rendered image will be at $renderedImagePath";
} catch (\Exception $e) {
	echo "Render failed :( Exception: ".$e->getMessage();
}

主要工作流程

  • 转换为STL文件格式(如果起始文件不是STL格式)
  • 将STL转换为POVRay文件格式。
  • 使用POV Ray和一个常见场景模板渲染图像。

选项

$Render3d->render() 方法接受一个可选的第二个参数 $options,它是一个选项数组。您也可以在调用之前设置选项:$Render3d->options(['option1' => 'val1']);

以下是一些值得注意的选项

  • buffer 这控制了命令行上运行的命令的输出将如何处理。有效值有
    • Render3d::BUFFER_OFF - 默认值。不显示任何内容,也不进行缓冲。
    • Render3d::BUFFER_ON - 缓存输出,并将其保存,以便您可以稍后使用 $Render3d->getBufferAndClean() 获取它
    • Render3d::BUFFER_STD_OUT - 将任何输出直接发送到标准输出(发送到浏览器或控制台)
  • width - 渲染图像的宽度,以像素为单位。默认值为1600
  • height - 渲染图像的高度,以像素为单位。默认值为1200
  • fwrite_buffer_size - 整数 - 写入POV文件(以及可能的其他文件)时的缓冲区大小,以字节为单位。某些系统可能需要不同的缓冲区大小才能获得更好的性能,默认值为8000(设置为0以禁用fwrite缓冲)

版本 & 更新日志

我们遵循 语义版本规范(SemVer)

更新日志:我们使用GitHub问题和里程碑来跟踪版本之间的更改。要查看特定版本中的更改,请查看对应里程碑已关闭的问题。

致谢

来源

这个库最初是bash脚本的移植版本,尽管我们主要保留了“如何工作”的整体概念,并重新编写了大部分细节。关于它的原始页面已经不存在,幸运的是我们在Wayback上找到了缓存版本。

您仍然可以找到原始文件(截至我最后一次检查时)在http://diyhpl.us/~bryan/irc/stl2pov/ - render.sh 是执行所有功能的整体文件。

我们借鉴了shell脚本“如何做事”的“想法”,并将其移植到PHP库中,该库执行系统调用。渲染图像的外观不够好,因此场景的模板文件几乎完全改变。我们发现,如果你花时间学习如何设置场景并进行一些数学计算以确定最佳摄像机角度等,POVRay背后有很大的潜力。

src/Scenes/axes_macro.inc

与bash脚本一样,我们也坚持使用AxesAndGridMacro来创建一个漂亮的网格。我们没有更改inc文件,但对其使用方式进行了大幅改变,现在它主要只是在地板上渲染网格。我们还让它根据模型的大小动态改变网格大小,它总是以10的倍数出现,如10mm、10cm等,具体取决于模型的大小。

stl2pov

早期版本依赖于stl2pov python脚本。在1.2.0版本中,转换已经被移植到这个PHP脚本中。

我们要特别感谢stltools的作者,他在我们试图将功能移植到PHP的过程中给予了巨大的帮助,通过深入回答我们的问题。如果您正在寻找使用Python的转换工具,我们强烈推荐stltools