当前位置: 首页 > news >正文

用织梦模板做网站国内永久免费服务器

用织梦模板做网站,国内永久免费服务器,网站模板图片,网页设计网站网站建设课程设计新项目为购车App涉及到全景图功能,经过搜索和咨询得到全景图的实现原理为从球内看球上的图片这一原理 思路就是在SceneKit的场景里放置一个球体,把全景图贴在球体表明,然后把相机放置在球体中心,通过旋转相机的角度得到全景图旋转…

新项目为购车App涉及到全景图功能,经过搜索和咨询得到全景图的实现原理为从球内看球上的图片这一原理

思路就是在SceneKit的场景里放置一个球体,把全景图贴在球体表明,然后把相机放置在球体中心,通过旋转相机的角度得到全景图旋转的效果。

现将demo放在下方以供参考

import UIKit
import SceneKitclass FullImageViewController: BaseViewController {// 全景图lazy var sceneView = {let sv = SCNView()sv.scene = SCNScene.init()return sv}()// 相机lazy var cameraNode = {let node = SCNNode()node.camera = SCNCamera.init()node.eulerAngles = currentEulerAnglesnode.position = SCNVector3Make(0, 0, 0)node.camera?.fieldOfView = 90return node}()// 球体lazy var sphere = {let sp = SCNSphere()// 半径sp.radius = 50// 只渲染一面,从球体里面看,外面就不用渲染了sp.firstMaterial?.isDoubleSided = true// 剔除外面sp.firstMaterial?.cullMode = .frontreturn sp}()// 当前相机的旋转角度(用于手势持续累加角度)private var currentEulerAngles = SCNVector3(0, Float.pi, 0)override func viewDidLoad() {super.viewDidLoad()sceneView.frame = CGRectMake(0, 90, view.frame.width, view.frame.width)view.addSubview(sceneView)// 把全景图“贴”到球体上sphere.firstMaterial?.diffuse.contents = flipImageLeftRight(UIImage.init(named: "full_image")!)// 球体Node,位置放到场景原点let sphereNode = SCNNode.init(geometry: sphere)sphereNode.position = SCNVector3Make(0, 0, 0)sceneView.scene?.rootNode.addChildNode(sphereNode)// 相机Node,位置放到场景原点sceneView.scene?.rootNode.addChildNode(cameraNode)sceneView.allowsCameraControl = false// 添加拖动手势识别器,用于控制视角旋转let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))sceneView.addGestureRecognizer(panGesture)}// 手势@objc func handlePan(_ gesture: UIPanGestureRecognizer) {let translation = gesture.translation(in: sceneView)//视角向右(正方向),向左(负方向)let deltaYaw = Float(translation.x) * (Float.pi / 180) * 0.5//视角往上(正方向), 视角往下(负方向)let deltaPitch = Float(translation.y) * (Float.pi / 180) * 0.5if gesture.state == .changed {var newX = currentEulerAngles.x + deltaPitchlet newY = currentEulerAngles.y + deltaYaw// 限制上下角度在 ±90° 内,防止翻转newX = max(min(newX, Float.pi / 2), -Float.pi / 2)cameraNode.eulerAngles = SCNVector3(newX, newY, 0)}if gesture.state == .ended {currentEulerAngles = cameraNode.eulerAngles}}// 图片翻转func flipImageLeftRight(_ image: UIImage) -> UIImage? {UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)let context = UIGraphicsGetCurrentContext()!context.translateBy(x: image.size.width, y: image.size.height)context.scaleBy(x: -image.scale, y: -image.scale)context.draw(image.cgImage!, in: CGRect(origin: CGPoint.zero, size: image.size))let newImage = UIGraphicsGetImageFromCurrentImageContext()UIGraphicsEndImageContext()return newImage}}

import UIKit

import SceneKit

class FullImageViewController: BaseViewController {

    // 全景图

    lazy var sceneView = {

        let sv = SCNView()

        sv.scene = SCNScene.init()

        return sv

    }()

    // 相机

    lazy var cameraNode = {

        let node = SCNNode()

        node.camera = SCNCamera.init()

        node.eulerAngles = currentEulerAngles

        node.position = SCNVector3Make(0, 0, 0)

        node.camera?.fieldOfView = 90

        return node

    }()

    // 球体

    lazy var sphere = {

        let sp = SCNSphere()

        // 半径

        sp.radius = 50

        // 只渲染一面,从球体里面看,外面就不用渲染了

        sp.firstMaterial?.isDoubleSided = true

        // 剔除外面

        sp.firstMaterial?.cullMode = .front

        return sp

    }()

    // 当前相机的旋转角度(用于手势持续累加角度)

    private var currentEulerAngles = SCNVector3(0, Float.pi, 0)

    override func viewDidLoad() {

        super.viewDidLoad()

        sceneView.frame = CGRectMake(0, 90, view.frame.width, view.frame.width)

        view.addSubview(sceneView)

        // 把全景图“贴”到球体上

        sphere.firstMaterial?.diffuse.contents = flipImageLeftRight(UIImage.init(named: "full_image")!)

        // 球体Node,位置放到场景原点

        let sphereNode = SCNNode.init(geometry: sphere)

        sphereNode.position = SCNVector3Make(0, 0, 0)

        sceneView.scene?.rootNode.addChildNode(sphereNode)

        // 相机Node,位置放到场景原点

        sceneView.scene?.rootNode.addChildNode(cameraNode)

        sceneView.allowsCameraControl = false

        // 添加拖动手势识别器,用于控制视角旋转

        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))

        sceneView.addGestureRecognizer(panGesture)

    }

    // 手势

    @objc func handlePan(_ gesture: UIPanGestureRecognizer) {

        let translation = gesture.translation(in: sceneView)

        //视角向右(正方向),向左(负方向)

        let deltaYaw = Float(translation.x) * (Float.pi / 180) * 0.5

        //视角往上(正方向), 视角往下(负方向)

        let deltaPitch = Float(translation.y) * (Float.pi / 180) * 0.5

        if gesture.state == .changed {

            var newX = currentEulerAngles.x + deltaPitch

            let newY = currentEulerAngles.y + deltaYaw

            // 限制上下角度在 ±90° 内,防止翻转

            newX = max(min(newX, Float.pi / 2), -Float.pi / 2)

            cameraNode.eulerAngles = SCNVector3(newX, newY, 0)

        }

        if gesture.state == .ended {

            currentEulerAngles = cameraNode.eulerAngles

        }

    }

    // 图片翻转

    func flipImageLeftRight(_ image: UIImage) -> UIImage? {

        UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)

        let context = UIGraphicsGetCurrentContext()!

        context.translateBy(x: image.size.width, y: image.size.height)

        context.scaleBy(x: -image.scale, y: -image.scale)

        context.draw(image.cgImage!, in: CGRect(origin: CGPoint.zero, size: image.size))

        let newImage = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()

        return newImage

    }

}

参考文献:iOS 使用 SceneKit 实现全景图项目里碰到了展示全景图的需求,以前没做过,google了一下已经有不少现成的库 - 掘金

http://www.dtcms.com/a/498577.html

相关文章:

  • 网站建设综合实训心得合肥网站制作
  • 自助建站网站哪个好怎么做h5动态页面
  • 品牌网站建设十小蝌蚪甘肃建设厅执业资格注册中心网站
  • 长沙优化网站获客软件服务好的成都网站建设
  • 西安在线网站制作大名网站建设费用
  • 长尾词挖掘海口seo外包
  • 手机网站怎么做淘宝客动漫设计和动漫制作技术的区别
  • 柳州柳北建设局网站杭州室内设计公司
  • 三明购物网站开发设计lol做任务领头像网站
  • 杭州知名的企业网站建设策划个人做门户网站
  • 网站多种语言是怎么做的广州天河 网站建设
  • 做网站是什么职业中国建筑app下载
  • 建设安全带官方网站如何配置iis网站
  • 珠海模板开发建站asp网站设计代做
  • 网站图片上传却不显示不出来把wordpress图标去掉
  • 网站名称和备案不一样河南省鹤壁市住房和城乡建设局网站
  • 烟台网站建设方案策划wordpress js版本号
  • 北京电商网站建设多语言网站如何开发
  • 嘉兴网站建设需要多少钱万网空间
  • aspaccess做网站制作相册音乐相册模板
  • 一般制作一个网站要多久免费注册二级域名网站
  • 山东阳信建设局网站wordpress调用描述
  • 自己怎么做网址开网站谷歌浏览器下载手机版app
  • 什么网站立刻买东西保定哪家做网站好
  • 做软件跟网站哪个难网站建设 自助建站
  • 芜湖网站建设whwzjs制作网站程序
  • 寺院网站建设方案做网站 微信开发前景
  • 滨海天津网站建设Wordpress安装购物车
  • 深圳龙华建设局官方网站wordpress建立文章页面
  • 网站做js跳转家装o2o平台有哪些