1575863606_7740045abc_m







photo by mikael altemark



804 :名無しさん@編集中:2009/09/10(木) 14:36:32 ID:wzL7wbcd
エクスプレッションの質問です。 

3Dレイヤーとカメラとの距離を計算したいのですが、 
カメラに親のヌルがあると、 
カメラのpositionは親との相対的な値になってしまいます。 

親とカメラのxyz座標を計算して、割り出すしかないでしょうか? 
しかし、この場合、親にさらに親がある(カメラが孫)と、結果が違ってしまいます。 
親が無い場合はエラーになるし・・・ 

絶対位置を割り出すうまいやり方はありますでしょうか? 

toWorldというメソッドを使用してみましたが、うまく行きませんでした。 

805 :804:2009/09/10(木) 14:42:10 ID:wzL7wbcd
追記 

親が無い場合エラーになってしまうのは、hasParentを使うことで回避できました。 




806 :名無しさん@編集中:2009/09/10(木) 14:59:30 ID:mK3CN3Nq
toWorldでリファレンス 

807 :804:2009/09/10(木) 15:29:54 ID:wzL7wbcd
>>806 
レスありがとうございます。 

親があるカメラに対して、 

camPosition = toWorld(thisComp.layer("カメラ 1").position) 

とした時、親を動かしても、camPositionに入る値が変化しません・・・ 
何が間違っているのでしょうか? 

808 :804:2009/09/10(木) 15:41:01 ID:wzL7wbcd
すみません。リファレンスに例文がありました。 
これからトライしてみます。 

809 :名無しさん@編集中:2009/09/10(木) 15:46:15 ID:mK3CN3Nq
最初に俺がトライしたときとおんなじミスしてるなw 
まあアレはヘルプの書き方が悪い。というか知ってて意地悪したw 


リファレンスを見てもらえばわかると思うけど、このメソッドはレイヤーオブジェクトの配下。 
関数のあらましは「レイヤー座標系の指定された点をワールド座標に変換する」なんで 

その指定の仕方だと「エクスプレッションを書いたレイヤーの座標系からカメラのローカル座標を 
引っ張ってオフセットした点の座標」という誰も欲しがらない点になってるわけよ。 

カメラレイヤーのワールド座標が欲しいなら 

 thisComp.activeCamera.toWorld([0,0,0],time) 

が正解。 

810 :804:2009/09/10(木) 16:04:50 ID:wzL7wbcd
なるほど!! 
たしかにリファレンスからは読み取りづらいですね。 
例文ありがとうございます。これで解決できそうです。 

811 :名無しさん@編集中:2009/09/10(木) 16:20:54 ID:Yx85hkXS
あ、例文は時間外指定するとエラー出るんで 

try{ 
cam = thisComp.activeCamera; 
}catch(err){ 
cam = thisComp.layer("カメラ 1") 


cam.toWorld([0,0,0],time) 

とすると保守性がアップする。 
compItem.hasActiveCameraが無いのがイラっとくるが仕方が無い。 

812 :804:2009/09/10(木) 16:37:08 ID:wzL7wbcd
なるほど。 
adobeの例文ではカメラが無い場合、 

catch(err){ // No camera, so assume 50mm. 
w = thisComp.width * thisComp.pixelAspect; 
z = (w/2)/Math.tan(degreesToRadians(19.799)); 
cam = [0,0,-z]; 


という感じの処理で、仮想の50mmカメラを設定してるっぽいですが、 
そもそもカメラありきのエクスプレッションなので、 
あまり有効に感じなかったのでシカトしてました。 

教えていただいたエラー回避のほうが、使い勝手がよさそうですね。 
導入検討してみます。ありがとうございます。 

エクスプレッションがわからん! はじめてのAfter Effects エクスプレッション奮闘記