2016-12-17 254 views
-1

我想将3d模型(.obj like blender)转换为.h文件。有在github上的工具,但是当我运行它,我得到一个消息错误:如何将Blender blend(或obj)文件转换为.h文件?

工具: https://github.com/HBehrens/obj2opengl/

我称道行:

C:\Users\***>perl C:\Users\***\Desktop\vuforia\obj2opengl.pl C:\ 
Users\***\Desktop\vuforia\cc.obj 

cc.obj是搅拌机软件的出口。

错误:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at C:\Users\***\Desktop\vuforia\obj2opengl.pl line 118. 

线118:

if(defined(@center)) { //line 118 
    $xcen = $center[0]; 
    $ycen = $center[1]; 
    $zcen = $center[2]; 
} 

我不知道问题出在哪里。 我的操作系统是Windows 64。我之前安装了perl。

+0

在第154行的github链接中。该脚本不是Perl的特别好的例子。你在Windows上安装了哪个Perl版本?草莓或ActivePerl?哪个版本号?在较老的版本中,该特定语法是可以的,但在某些时候'定义(@array)'已被弃用。你的Perl很新,现在这实际上是一个错误。尝试删除'defined',以便行说'if(@center){'。 '@ center'将返回其元素的数量,这将是3,这是真实的,然后它将进入块。 – simbabque

+0

你的回答正确。请发表您的评论作为答案。 –

回答

1

不能使用“定义(@array)”(也许你应该只是省略了定义()?)

这告诉你,语法defined(@array)是无效的,甚至给出了一个暗示。您只需要移除defined()即可。然后,您的代码会读

if(@center) { 
    $xcen = $center[0]; 
    $ycen = $center[1]; 
    $zcen = $center[2]; 
} 

if评价迫使数组标量上下文,这使得它返回元素的个数。这可能是3,或0.如果它是0,那么它是一个错误的值,该块被跳过。 3另一方面是一个真正的价值和块将被执行。

defined(@array)语法was deprecated from Perl

不推荐使用定义在聚合(散列和数组)上的定义。它用来报告是否曾经分配过该聚集的内存。这种行为在未来的Perl版本中可能会消失。

您安装的Perl版本比您使用的脚本的作者版本更新,这是一个不兼容的更改的罕见场合。

+0

我无法找到哪个发行版弃用了该行为。 – simbabque

+2

[已弃用** Perl v5.6.1 **,致命于** Perl v5.22.0 **](http://search.cpan.org/~rjbs/perl-5.22.0/pod/perldelta.pod#定义(@array)_and_defined(%散列)_are_now_fatal_errors) – Borodin

+0

谢谢@Borodin。它仍然在我引用的5.24 perldoc中表示_deprecated_。 – simbabque