iOSの3 Dパース投影

15135 ワード

HOME
ABOUT
GUESTBOOK
CATEGORIES
TAGS
LINKS
SUBSCRIBE
一.概説
iOSではCATransform 3 Dという構造体を用いて3次元の整列座標変換行列を表す.整列座標は座標の表現方法であり,n次元空間の座標はn+1要素の座標メタグループで表す必要があり,Quartz 2 D Transformでは整列座標に関する応用があり,あちらは2次元空間の変換に関するものである.ポイントの整列座標の最後の要素は常に1に設定されます.単純な数学的座標ではなく整列座標を用いることは、図形のシミュレーション変換を容易にするためであり、シミュレーション変換はシミュレーション変換マトリクスによって実現することができ、3 Dのシミュレーション変換は、平行移動(translation)、回転(rotation)、スケール(scaling)、切断(shear)などの変換を実現することができる.整列座標を使用しない場合、座標変換は2つの演算に関連する可能性があります.加算(平行移動)と乗算(回転、スケール)ですが、整列座標と整列座標変換マトリクスを使用すると、マトリクス乗算だけですべてが完了します.これらを深く理解するには,グラフィック変換に関する知識を学び,マトリクスの乗算を自分で演算する必要がある.
iOSのCALayerの3 Dは本質的に本物の3 Dとは言えない(その視点である観察点やいわゆるカメラの位置は変換できない)が、3 Dの2次元平面上の投影だけで、投影平面は携帯電話の画面であるxy軸からなる平面(iOSでは左手座標系に注意)であるが、視点の位置はどのように決定されるのだろうか.CATransform 3 Dのm 34によって間接的に指定することができ、m 34=-1/zであり、ここでzは観察点のz軸の値であり、Layerのz軸の位置はanchorPointによって指定され、いわゆるanchorPoint(アンカーポイント)は変換中に不変の点、すなわちあるLayerの変換中の原点であり、xyzの3軸はこの点に交差する.iOSでは、LayerのanchorPointはunit coordinate spaceを使用して記述されています.unit coordinate spaceは、特定の実際の座標点を指定する必要はなく、layer boundsの相対的な位置を使用しています.次の図は、1つのLayerのいくつかの特殊なアンカー点を示しています.
m 34=-1/zでは,zが正の場合,我々の目で現実世界を観察する効果,すなわち投影平面において近大遠小の効果を示し,zが原点に近づくほどこの効果は顕著になり,原点から離れるほど顕著にならず,zが正無限大の場合,近大遠小の効果を失い,このとき投影線は投影平面に垂直になり,すなわち、視点が無限遠である、CATransform 3 Dにおけるm 34のデフォルト値が0である、すなわち視点が無限遠である.
なお、整次座標から数学座標への変換に共通する整次座標は(a,b,c,h)、数学座標への変換は(a/h,b/h,c/h)である.
二.代数解釈
Layer anchorPointがデフォルト(0.5,0.5)で、その3次元空間のA点(6,0,0)、m 34=-1/1000,0.0であると仮定すると、この点がz軸の負の方向に10単位移動した後、投影平面に見える点の座標はいくらですか?
A点は整列座標で(6,0,0,1)
QuartzCoreフレームワークは必要な行列を算出するための関数を提供します.
    CATransform3D transform = CATransform3DIdentity;
    transform.m34 = -1/1000.0;
    transform = CATransform3DTranslate(transform, 0, 0, -10);

計算された行列は
 
{ 1,    0,    0,     0;   
  0,    1,    0,     0;   
  0,    0,    1,     -0.001;   
  0,    0,  -10,    1.01;      
}   

実は上の変換行列は本質的に2つの行列を乗算した変換行列*投影行列変換行列が
{1,    0,    0,    0;   
 0,    1,    0,    0;   
 0,    0,    1,    0;   
 0,    0,   -10,  1;      
}     

投影マトリクスは
 
{1,    0,    0,    0;   
 0,    1,    0,    0;   
 0,    0,    1, -0.001;   
 0,    0,    0,    1;   
}     

上の2つのマトリクスを乗算すると最終的な変換マトリクスが得られるので(マトリクス乗算を忘れた場合は線形代数の復習を見ることができる)、1つのマトリクスで変換と投影を完了することができます.
A点座標に最終的な変換行列を乗じると,{6,0,−10,1.01}が得られ,数学的座標点が{6/1.01,0,10/1.01}に変換されると,投影平面上の投影点が{6/1.01,0,0}すなわち我々が見た変換後の点であることがわかる.以前よりも原点に近い.Z軸負方向に移動するほど、投影平面上で原点に近づきます.
三.幾何学的解釈
上記の例を幾何学的に解釈解析し,y軸の正方向に沿って下を見ると次のような光景が得られる.
破線は投影線であり、x軸との交点がA点の投影点である.似たような三角形の定理から投影の点を簡単に算出します.
1000/(1000+10)=x/6、x=6*1000/1010=6/1.01