Итак, у меня есть следующий код для создания пользовательской стены
let wall = SCNPlane(width: CGFloat(distance),
height: CGFloat(height))
wall.firstMaterial = wallMaterial()
let node = SCNNode(geometry: wall)
// always render before the beachballs
node.renderingOrder = -10
// get center point
node.position = SCNVector3(from.x + (to.x - from.x) * 0.5,
from.y + height * 0.5,
from.z + (to.z - from.z) * 0.5)
node.eulerAngles = SCNVector3(0,
-atan2(to.x - node.position.x, from.z - node.position.z) - Float.pi * 0.5,
0)
А теперь я добавляю простой SCNPlane в тест на попадание и добавляю видео (skscene к нему)
// first.node is hittest result
let node = SCNNode(geometry: SCNPlane(width: CGFloat(width) , height: CGFloat(height))
node.geometry?.firstMaterial?.isDoubleSided = true
node.geometry?.firstMaterial?.diffuse.contents = self.create2DVideoScene(xScale: first.node.eulerAngles.y < 0 ? -1 : nil)
node.position = nodesWithDistance.previous.node.mainNode.position
node.eulerAngles = first.node.eulerAngles
Вот как я создал 2d узел
/// Creates 2D video scene
private func create2DVideoScene (xScale:CGFloat?) -> SKScene {
var videoPlayer = AVPlayer()
if let validURL = Bundle.main.url(forResource: "video", withExtension: "mp4", subdirectory: "/art.scnassets") {
let item = AVPlayerItem(url: validURL)
videoPlayer = AVPlayer(playerItem: item)
}
let videoNode = SKVideoNode(avPlayer: videoPlayer)
videoNode.yScale *= -1
// While debug I observe that if first.node.rotation.y in - , then we need to change xScale to -1 (when wall draw from right -> left )
if let xScale = xScale {
videoNode.xScale *= xScale
}
videoNode.play()
let skScene = SKScene(size: self.sceneView.frame.size)
skScene.scaleMode = .aspectFill
skScene.backgroundColor = .green
skScene.addChild(videoNode)
videoNode.position = CGPoint(x: skScene.size.width/2, y: skScene.size.height/2)
videoNode.size = skScene.size
return skScene
}
Issue :: Если я рисую настенный узел слева направо, это означает, что первая точка находится на левой стороне, а другая точка на правой стороне и рисую стену между ними. Затем видео переворачивается.
Если я рисую справа налево, это означает, что первая точка находится на правой стороне, а вторая точка на левой стороне и рисует линию между ними, тогда видео в порядке.
Чтобы это исправить, я проверил настенный eulerAngles, проверьте линию self.create2DVideoScene
, но это работает не во всех областях реального мира
Я хочу, чтобы видео не запускалось перед пользователем
EDIT
видео переворачивается, потому что eulerAngles
отличается в обоих случаях при создании стены
Угол от точки 1 до точки 2 -> (0,000000 -1,000000 0,000000 3,735537)
Угол от точки 2 до точки 1 -> (0,000000 -1,000000 0,000000 0,478615)
Выпуск видео Нажмите здесь, чтобы воспроизвести видео
Пожалуйста, предоставьте предложение или решение этой проблемы.
Видео перевернуло