2017-07-21 11 views
3

私はARKitのオンラインチュートリアルから飛行機に物体を置くことを学んでいます。ARKit飛行機に物体を置く

hitResult.worldTransform.columns.3.x 

それが列をcolumns.3とされていない理由:

boxNode.position = SCNVector3(hitResult.worldTransform.columns.3.x,hitResult.worldTransform.columns.3.y + Float(boxGeometry.height/2), hitResult.worldTransform.columns.3.z) 

彼は、あなたがこの平均値が何をするか、画面上

をタップした場所でそれを配置するために上記のコードを使用しています。例えば0?

+0

他の行では、チュートリアルのリンクを投稿できますか? –

答えて

5

ARHitTestResult.worldTransformmatrix_float4x4である。だから、それは4x4の行列です。 .columns0から番号が付けられているので、ベクトル(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z)は、4x4ベクトルの最終列の先頭にある3つのものです。

行列の一番下の行が(0, 0, 0, 1)で、位置ベクトルが(x, y, z, 1)の形式であるとしても問題ありません。それではベクトルに適用されたときにマトリックスが何をするかを見て:

a b c d   x   a*x + b*y + c*z + d 
e f g h   y   e*x + f*y + g*z + h 
i j k l * z = i*x + j*y + k*z + l 
0 0 0 1   1   1 

(d, h, l)は掛けません、彼らは別のベクトルであるかのようにちょうど上の追加されます。だから、行列の左上の3x3の部分が(x, y, z)に何かをするが、それを移動しません

a b c   x   d 
e f g * y + h 
i j k   z   l 

:それは同じです。例えば。開始時に(x, y, z)(0, 0, 0)の場合は、最後にはまだ(0, 0, 0)になります。したがって、3x3行列は回転、拡大、または他の多くのことをするかもしれませんが、翻訳はできません。

(d, h, l)しかし、それはちょうどあなたが最後に追加するものなので、明らかにちょうど翻訳です。翻訳はあなたが望むものです。現在のカメラの位置から飛行機に乗る方法です。だからあなたはそれをまっすぐに引き出すことができます。

+0

これについてもっと読むことができるソースがありますか? – BalintD

-2

これは、simdtransformのレイアウト方法と関係があります。そのうちの1つは回転、1つはスケール、もう1つは平行移動です。列3は、翻訳行列に関する。

関連する問題