2012-05-02 29 views
0

我正在写一个基本的Web服务来渲染具有漂亮照明和阴影的色彩样本,在其'命令行'模式下使用搅拌器,并从php脚本(也处理数据库中的编目色板)调用。一切运行在win32上的apache下,用php 5.2如何使用从PHP脚本调用的Blender呈现文件?

一切似乎都运行良好,直到实际渲染某个点的最后一步都失败了。我尝试过使用所有不同的PHP执行命令(exec(),system(),passthru()等),并且都有相同的结果 - 例如什么也没有。奇怪的是,它工作正常,因为如果我向搅拌机传递一个格式错误的参数,那么php会从搅拌机回应正确的错误消息,这将验证它确实正在启动程序。如果我提供了正确的参数,那么exec()等只是挂起,并且任何搅拌器进程都不会出现在任务管理器中。

我有一种感觉它的文件权限问题,因为Blender需要写一个jpg文件到web文件夹(这是坐在默认的apache安装目录,例如:在程序文件中),但我不知道如何在windows下设置正确的权限。

从命令窗口执行我的渲染命令时,它确实应该输出渲染的文件,但PHP中的相同命令失败。

这里是我的PHP代码(在这种情况下使用系统(),但所有其他变体似乎有相同的结果):

$swatchId = $args->swatchId; 
$sql = "SELECT * FROM `colours` WHERE `Id` = ".$swatchId." LIMIT 0, 1 "; 
$rows = mysql_query($sql); 
$command = ".\blender\blender -b _swatches.blend "; 

while ($row = mysql_fetch_assoc($rows)) { 
    $filename = $row["ProductCode"]; 
    $red = $row["Red"]; 
    $green = $row["Green"]; 
    $blue = $row["Blue"]; 
} 

$command = $command."-o ".$filename." -F JPEG -x 1 -f 1"; 
echo json_encode(array("Command"=>$command)); 
$result = system($command); 

这导致命令:

.\blender\blender -b _swatches.blend -o NPRKGAP -F JPEG -x 1 -f 1 

,其执行正确地在一个命令窗口中,但不是在php中调用时(来自Web请求)。

我已经在PHP中关闭了安全模式,并且已经提高了脚本可以使用的最大内存,尽管渲染的混合并不那么苛刻。

如果有人能帮助,我会永远感激。

+0

这可能不会有用:http://sourceforge.net/projects/phpblender/ –

+1

有关使用netrender渲染引擎的信息:http://wiki.blender.org/index.php/Doc:2.6 /手动/渲染/性能/ Netrender –

+0

感谢乔治 - 我会研究这些链接,但phpBlender看起来和我一样完全一样。 – bharling

回答

0

尝试将标志添加到blender命令中。

-noaudio -nojoystick 

我在做类似的事情,但我使用python。

故事背景: 当我试图让万维网数据用户启动搅拌机(你也在做什么)时,我正在疯狂的权限问题。我看着George Reith的评论,并在网络上的例子中看到,他们让你把no nodio和nojoystick。所以我随机试了一下,突然WWW数据可以运行搅拌机!