2017-03-09 73 views
1

我正在與AVCapturePhotoOutput圖像,然後使用他們的JPEG表示作爲上的SceneKit SCNPlane紋理也就是相同的縱橫比的圖像:旋轉我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) 

這是行不通的屬性;結果圖像無法識別。看起來,圖像的一小部分已被拉伸到一個巨大的尺寸。我認爲這可能是軸心,但我嘗試了所有三個結果相同。

任何想法?

+0

我不熟悉SceneKit但會不會是圖像(紋理)是不是在它的中心,但它的一個角落和旋轉,除非你的形象是完美的正方形,它可以用拉伸/平鋪一次旋轉渲染,這可能會產生奇怪的結果? –

回答

3

您正在按照Alain T的建議在左上角旋轉。 如果您向下移動圖像,您可能會獲得您期望的旋轉。

試試這個:

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。它在工作,謝謝! –