2016-12-17 7 views
-1

3Dモデル(.objブレンダーのような)を.hファイルに変換したいと思います。そこにgithubののツールですが、私はそれを実行したとき、私は、メッセージのエラーを得た:Blenderブレンド(または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]; 
} 

問題がどこにあるか分かりません。 OSはWindows 64です。前にperlをインストールしました。

+0

githubリンクの行番号154です。このスクリプトは、Perlの特に良い例ではありません。どのPerlバージョンをWindowsにインストールしましたか?イチゴまたはActivePerl?どのバージョン番号ですか?以前のバージョンでは、その特定の構文は大丈夫でしたが、ある時点で 'defined(@array)'は非難されました。あなたのPerlはとても新しいので、これは実際には今のところエラーです。行が 'if(@center){'となるよう 'defined'を削除してください。 '@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# (@配列)_and_defined(%hash)_are_now_fatal_errors) – Borodin

+0

ありがとう@ボロディン。私が引用した5.24のperldocの中にはまだdede_recated_と書かれています。 – simbabque

関連する問題