ランドスケープでのみ機能するこのアプリがあります。
シーンキットにオブジェクトがあります。そのオブジェクトは、次のように指定された特定の位置にあります。
SCNNode * buttonRef = [scene.rootNode childNodeWithName:@"buttonRef" recursively:YES];
SCNVector3 buttonRefPosition = [buttonRef position];
SCNVector3
これをmainView
2D 座標に変換する必要があります。
mainView = (SCNView *)self.view;
シーンは直交カメラを使用しているため、パースペクティブはありません。カメラはデフォルトのカメラです。回転なし、並進なし。カメラの orthographicScale は 5.4 です。
どうすればそれを変換できますか?
CGPoint から SCNVector3 に変換するという逆の質問について、SO で他の回答を見つけましたが、SCNVector3 から CGPoint に逆にする方法は明らかではありません。
SCNView が UIView のサブクラスである場合、(0,0) は左上のポイントであり、iPhone 6 の横向きの場合、(667, 375) は右下のポイントです。
私のこのボタンは、高さのほぼ右端と中央にあります。UIKit に関して言えば、このボタンは (600, 187) にあると言えますが、これを行うと:
SCNNode * buttonRef = [scene.rootNode childNodeWithName:@"buttonRef" recursively:YES];
SCNVector3 buttonRefPosition = [buttonRef position];
SCNVector3 projectedPoint = [mainView projectPoint: buttonRefPosition];
projectPoint が (7.8, 375, 0) に等しい (?)
UIKitを使用して座標(7.8、375)に10x10のビューを追加すると、左下にビューが表示されます!!
私が言ったように、アプリはランドスケープでのみ動作しますが、これらの座標系はすべて混乱しています.