2017-03-09 21 views
1

を回転させて、私はAVCapturePhotoOutputで画像を撮影し、その画像と同じアスペクト比であるSceneKit SCNPlaneにテクスチャとして彼らのJPEG表現を使用しています:は私SceneKit材料

let image = UIImage(data: dataImage!) 
let rectangle = SCNPlane(width:9, height:12) 
let rectmaterial = SCNMaterial() 
rectmaterial.diffuse.contents = image 
rectmaterial.isDoubleSided = true 
rectangle.materials = [rectmaterial] 
let rectnode = SCNNode(geometry: rectangle) 
let pos = sceneSpacePosition(inFrontOf: self.pictCamera, atDistance: 16.5) // 16.5 is arbitrary, but makes the rectangle the same size as the camera 
rectnode.position = pos 
rectnode.orientation = self.pictCamera.orientation 
pictView.scene?.rootNode.addChildNode(rectnode) 

sceneSpacePositionは、コードのビットですCoreMotionをSceneKitの向きにマップするのはcan be found here on SOです。それは実際に正しいサイズで正しい位置に現れる矩形を配置するために使用されます。すべて非常にクールです。

問題は、画像が長方形に90度回転していることです。だからわかりました:

rectmaterial.diffuse.contentsTransform = SCNMatrix4MakeRotation(Float.pi/2, 0, 0, 1) 

これは機能しません。結果の画像は認識できません。画像の1つの小さな部分が大きなサイズに伸びているようです。私はそれが軸かもしれないと思ったが、私は同じ結果で3つのすべてを試した。

アイデア?

+0

を正方形の場合、一度回転させるとストレッチ/タイリングがレンダリングされ、奇妙な結果が生じることがありますか? –

答えて

3

Alain Tさんが提案したように、左上隅を回転しています。 イメージを下に移動すると、期待していた回転が得られることがあります。

このお試しください:私はSceneKitに慣れていないんだけど、それはあなたのイメージが完璧でない限り、画像(テクスチャ)は、その中心ではなく、その四隅のいずれかに回転していないことが考えられ

let translation = SCNMatrix4MakeTranslation(0, -1, 0) 
let rotation = SCNMatrix4MakeRotation(Float.pi/2, 0, 0, 1) 
let transform = SCNMatrix4Mult(translation, rotation) 
rectmaterial.diffuse.contentsTransform = transform 
+0

私はこれを実装し、画像が上下逆さまであることを発見しました。正しい回転は-pi/2になります。だから、私は回転を-pi/2に変更しました。その時点で、再び宇宙ではオフになりました。 –

+0

申し訳ありませんが、私は前のメッセージを編集したいと思っていましたが、長くかかりました。それについて少し考えた後、私は問題を見ました - その場合、翻訳は-1,0,0です。それは働いています、ありがとう! –