美文网首页AVFoundation 拍片专用
720场景显示和panoramaGL的导入

720场景显示和panoramaGL的导入

作者: 光明程辉 | 来源:发表于2016-11-21 18:08 被阅读123次

    这个是一个静态的,全景图演示,一个完整的全景图需要6张图片合成,还要注意图片排放顺序,如果要是其它的全景图是实时的话,要使用其它SDK。

    其实,使用Unity3d 也是可以做的。下面讲的是配合panoramaGL使用:达到720全景效果。

    这个需要翻墙 (不会翻墙的可以留言给我!!!)

    这是一个3D的图片.png

    javascript 3D 技术:

    https://threejs.org

    Demo 链接


    属性、方法介绍


    https://github.com/robbykraft/Panorama

    http://blog.csdn.net/hardworkingbee/article/details/48295179

    http://blog.csdn.net/jiayani/article/details/37501997

    https://github.com/hanton/HTY360Player

    首先使用一个框架:panoramaGL

    [译]


    1.项目描述

    panoramagl库是世界上第一个开放源码库看到全景的iPhone和iPod的触摸。支持的功能在版本0.1:

    运行在iPhone,iPod Touch和iPad

    支持OpenGL ES 1.1

    支持球形、立方和柱面全景图像

    允许滚动和连续滚动

    支持滚动从左到右、从上到下的加速度计的使用

    允许使用惯性停止滚动

    支持缩放(移动屏幕上的两个手指)

    支持复位(将三个手指在屏幕或摇动装置)

    允许您控制旋转范围在X轴和Y轴

    查看活动支持

    支持热点

    .

    4.如何导入panoramagl框架

    官网的 是12年的说明:有点过时了!!!

    A.下载panoramagl_0.1.zip repositoryb或下载源代码。如果你下载的ZIP文件,然后descompress的filec。
    在你的项目文件夹复制panoramagl文件夹。
    在你的项目导入panoramagl文件夹(你可以拖放文件夹里面Xcode)
    F.进口框架:- CoreMotion - CoreLocation - mobilecoreservices -配置- quartzcore -代表-最- UIKit -基础- coregraphicsg。
    导入库:-libxml2.dylib -libz.dylib


    注意:这个库是MRC的意味着你要,改为支持ARC (原创)转载请注明!

    之前笔者找panoramaGL 库的配置,网上都是 复制别人的,都说配置很麻烦!!!没什么人说到底怎么配置,只知道自己怎么改都是那几十个错,运行不起来,真的那么难吗?
    .
    答案: NO!!! 学不到家就觉得很麻烦!根据Xcode 的出错就可以一步步解决,好了,下面直接介绍:这里我就不贴太多图了!不懂直接 留言!!!笔者使用的是Xcode8.1 :

    首先: 1、导入库文件夹,导入-libxml2.dylib -libz.dylib
          2、对 panoramaGL 里的文件进行添加(如下图): -fno-objc-arc
          3、注意:在 PLImage  类出错时,
          // 1、使用
        #import <Foundation/Foundation.h>
        #import <UIKit/UIKit.h>
        // 自带的 (注释掉)
        //#import <UIKit/UIImage.h>
        //#import <Foundation/NSData.h>
    
         如果是类:PLRange 、PLStructs  出错,导入 头文件
         #import <UIKit/UIKit.h>
         
         如果是  PLUtils 类出错。
         导入头文件: 导入 #import <Foundation/Foundation.h>
             
        4、出现 Object->isa 错,这个是运行时写法,由于写法过旧,跟着提示做就可以了。
        
        5、PLPanoramaBase 出错!
       //  默认是 下面这2 个 (指向指针)
        PLTexture **previewTextures;
        PLTexture **textures;
    
        应该修改为:
        PLTexture *__unsafe_unretained *previewTextures;
    PLTexture *__unsafe_unretained *textures;
    

    添加-fno-objc-arc.png 屏幕快照 2016-12-07 10.50.07.png

    导入框架和库必须:

    5.如何在你的应用程序中使用panoramagl

    下一个例子,我有一个球形图像在


    pano_f.jpg

    项目为pano.jpg。

    5.1用界面生成器

    a. Create a ViewControllerb. Open ViewController with Interface Builderc. Select the View in "Objects" paneld. Show "Identity Inspector" (View->Utilities->Show Identity Inspector or Alt+Cmd+5)e. Change in "Custom Class" the Class from UIView to PLViewf. Go to ViewController.h and import PLView.h (eg. #import "PLView.h")g. Open ViewController.m, go to viewDidLoad method and put this code: PLView *plView = (PLView *)self.view; PLSpherical2Panorama *panorama = [PLSpherical2Panorama panorama]; [panorama setImage:[PLImage imageWithPath:[[NSBundle mainBundle] pathForResource:@"pano" ofType:@"jpg"]]]; [plView setPanorama:panorama];
    5.2 只有代码

    a. Import PLView.h in your class (eg. #import "PLView.h")b. Create a variable of type PLView (eg. PLView *plView)c. Create the view (eg. plView = [[PLView alloc] initWithFrame:CGRectMake(x,y,w,h)])d. Load panorama: PLView *plView = [[PLView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; PLSpherical2Panorama *panorama = [PLSpherical2Panorama panorama]; [panorama setImage:[PLImage imageWithPath:[[NSBundle mainBundle] pathForResource:@"pano" ofType:@"jpg"]]]; [plView setPanorama:panorama];e. Add panorama view to the window or view: [window addSubview:plView] or [your_view addSubview:plView]f. Release the view [plView release];
    6 简单的JSON协议

    另外,你可以使用JSON协议加载全景。

    注:JSON协议是有限的在这个版本的本地文件。(在本地创建的)

    源代码:

      [plView load:[PLJSONLoader loaderWithPath:[[NSBundle mainBundle] pathForResource:@"json" ofType:@"data"]]];
    

    注意:此代码,我有一个在我的应用程序命名为json.data文件。

    介绍 panoramagl 的属性 文档:

    类的文档
    然后进行简单介绍一下使用的类的操作:
    PLView


    类,这个类是允许一组简单的功能,电源显示全景图像的图(UIView的继承)。
    的属性和这个类的方法是:
    BOOL
    **isDeviceOrientationEnabled
    ** ;
    //如果视图,您可以启用该设备支持的方向(手动,属于典型的图书馆)
    UIDeviceOrientation
    **deviceOrientation
    ** ;
    //让我们看看什么方向都有这种看法,或设置,我们希望出现的视图方向。
    **例如。
    **plView.deviceOrientation = UIDeviceOrientationLandscapeLeft;
    PLOrientationSupported
    deviceOrientationSupported ;
    ** //这个属性允许你告诉那个方向的位置被启用并运行视图。例如。
    **PlView.deviceOrientationSupported =(PLOrientationSupportedPortrait | PLOrientationSupportedLandscapeLeft)< -在这种情况下,只允许采用纵向和LandscapeLeft
    BOOL
    **isAccelerometerEnabled
    ** ;
    //这个属性使得加速度计的操作
    BOOL
    **isAccelerometerLeftRightEnabled
    ** ;
    //该属性仅在x轴激活所述加速度计的操作,并且取决于该活性属性isAccelerometerEnabled
    BOOL
    **isAccelerometerUpDownEnabled
    ** ;
    //该属性仅在y轴激活所述加速度计的操作,并且取决于该活性属性isAccelerometerEnabled

    **accelerometerSensitivity
    ** ;
    //设置与操作加速度计的灵敏度(动作感应)
    NSTimeInterval
    accelerometerInterva ;
    //设置的加速度秒的刷新时间
    CGPoint 的startPoint ;
    //这个属性告诉我们他做了事件发生时,第一触摸(触摸事件开始)的位置CGPoint 端点 ;
    //同时在屏幕上移动手指该属性将被冷却(触摸移动事件)
    BOOL
    isScrollingEnabled ;
    //这个属性告诉我们,如果你可以让在听证会上,滚动如不积极,只有当移动手指在屏幕上移动
    NSUInteger
    minDistanceToEnableScrolling ;
    必须用手指能够行驶//最小距离激活滚动
    BOOL
    isInertiaEnabled ;
    / /检查意味着,当有人进行滚动惯性启动缓慢滚动停止运动的惯性
    NSTimeInterval
    inertiaInterval ;
    //以秒为单位的惯性时间
    BOOL
    isResetEnabled ;
    //属性可以在屏幕上放置三根手指时启用到视图复位到其初始位置
    PLViewType ;
    //视所使用的类型可以是(PLViewTypeSpherical,PLViewTypeCubeFaces,PLViewTypeCylindrical)PLCamera *
    摄像头 ;
    / /属性允许我们更改或拿相机的参数

    • (无效)
      addTexture:(PLTexture *)质感;
      //添加要使用的质地,在球形和圆柱形单一视图的情况下,一旦调用此方法,在立方视图的情况下使用此方法6次(每面一个纹理)
    • (无效)
      removeTexture:(PLTexture *)质感;
      //删除视图的纹理类型的对象
    • (无效)
      removeTextureAtIndex:(NSUInteger)指数;
      //由视图索引中删除纹理类型的对象
    • (无效)
      **removeAllTextures
      ** ;
      //删除所有该视图可以使用纹理
      **PLTexture
      **类允许我们加载将由视图可使用纹理,其属性和方法是:
      GLuint
      **textureId
      ** ;
      //只读属性赋予一个OpenGL纹理的标识符
      INT
      **宽度
      **,
      **高度
      ** ;
      //只读加载的纹理的宽度和高度属性
      BOOL
      **的isValid
      ** ;
      //物业知道,如果纹理加载失败
    • (id)的
      **初始化
      ** ;
      //默认的构造函数
    • (ID)
      **initWithImage
      *:(的UIImage)图像;
      //构造函数接收类型的UIImage的对象,其中的图像必须被加载
    • (ID)
      **initWithImage
      *:(的UIImage)图像
      **旋转
      **(INT)角;
      //同以前的方法,但可以将图像旋转90,180,270度
    • (ID)
      **initWithPath
      *:( NSString的)路径;
      //接收图像路径构造函数(JPEG,PNG)
    • (ID)
      **initWithPath
      *:( NSString的)路径
      **旋转
      **(INT)角;
      //同以前的方法,但可以将图像旋转90,180,270度
      与相同参数操作//构造静态类型的初始化同等功能
      +(ID)
      *textureWithImage
      :(的UIImage)图像;
      +(ID)
      textureWithPath
      *:( NSString的)路径;
      +(ID)
      **textureWithImage
      *:(的UIImage)图像
      **旋转
      **(INT)角;
      +(ID)
      **textureWithPath
      *:( NSString的)路径
      **旋转
      **(INT)角;
    • (BOOL)
      **loadTextureWithImage
      *:(的UIImage)图像;
      //根据图像对象加载纹理
    • (BOOL)
      **loadTextureWithImage
      *:(的UIImage)图像旋转(INT)角;
      / /同以前的方法,但可以将图像旋转90,180,270度
    • (BOOL)
      **loadTextureWithPath
      *:( NSString的)路径,//将图片路径纹理(JPEG,PNG)
    • (BOOL)
      **loadTextureWithPath
      *:( NSString的)路径旋转(INT)角;
      / /同以前的方法,但可以将图像旋转90,180,270度
      隐藏
      复制代码

    Eg. PLTexture * texture = [PLTexture textureWithPath:[[NSBundle mainBundle] pathForResource:@"pano" ofType:@"jpg"]]; [plView addTexture:[PLTexture textureWithPath:texture]];
    **PLCamera

    **类允许我们改变听证会的显示设置,其性质是:

    BOOL

    **IsFovEnabled

    ** ;
    //启用放大或缩小

    **如。

    **plView.camera.isFovEnabled = NO;

    **FOV

    ** ;
    //听证缩放级别

    **如。

    **plView.camera.fov = 10;

    **fovSensitivity

    ** ;
    //当你把两个手指在屏幕变焦的灵敏度

    **如。

    **plView.camera.fovSensitivity = 70;

    PLRange

    **fovRange

    ** ;
    //范围中值,这将允许默认缩放从-180到180

    **如。

    **plView.camera.fovRange = PLRangeMake(-10.10);

    PLRange

    **fovFactorRange

    ** ;
    //范围中的变焦internaly工作(这个范围与fovFactor物业内部使用)

    BOOL

    **isXAxisEnabled

    **,

    **isYAxisEnabled

    **,

    **isZAxisEnabled

    ** ;

    ** **//启用这个特性,如果相机在X,Y,Z移动

    **如。

    **plView.camera.isXAxisEnabled = NO;

    PLPosition

    **位置

    ** ;
    //属性将相机放置在一个位置上。
    PLPosition具有属性x,Y,Z

    **如。

    **plView.camera.x = 6;

    PLRange

    **XRANGE

    **,

    **yRange

    **,

    **zRange

    ** ;
    //定义在其中所用的X,Y,Z移动的范围

    **如。

    **plView.camera.xRange = PLRangeMake(-100,100);

    BOOL

    **isPitchEnabled

    **,

    **isYawEnabled

    **,

    **isRollEnabled

    ** ;
    //这些性质使该轴可旋转摄像头的x,y和z如。
    plView.camera.isPitchEnabled = NO;

    BOOL

    **IsReverseRotation

    ** ;
    //启用相机位移的旋转反向相关于用户与触摸或加速计来执行。

    **例如。

    **plView.camera.isReverseRotation = YES;

    PLRotation

    **旋转

    ** ;
    //相机的x,y和z的旋转(度)的角度

    **例如。

    **plView.camera.rotation.pitch = 80;

    PLRange

    **pitchRange

    **,

    **yawRange

    **,

    **rollRange

    ** ;
    //范围,其中照相机可以在X,Y,Z旋转

    **例如。

    **plView.camera.pitchRange

    **=

    ** PLRangeMake(-90,90);
    < - x轴只能旋转角- 90 90

    **rotateSensitivity

    ** ;
    //灵敏度,其中当用户移动视图例如照相机将旋转的值。
    plView.camera.rotateSensitivity = 40;

    • (无效)

    **复位

    ** ;
    / /让我们恢复相机设置回相机的原始位置

    **如。

    **[plView.camera复位]

    隐藏

    复制代码

    Eg. plView.camera.yawRange = PLRangeMake(-70, 70);
    许多属性和前一节中命名的方法都没有在实施例中实现,但它作为为希望下载PanoramaGL库并开始使用在他们的项目的那些参考文献。

    720度全景(Panorama)展示和序列帧展示 Demo

    相关文章

      网友评论

      • 炎一:你好,我设置了热点以后,点击热点,代理方法没有运行,没有弹出框,是怎么回事
        炎一:@何程辉 不用这个开源库,用unity3d也可以完美实现么
        炎一:@何程辉 一共没有多少代码,笑不出来,不行,明天我把我写的发给你,你帮我看一下吧,我能加你的qq么
        光明程辉:你先打个断点看看执行情况。像这种720的全景使用Unity3d很容易实现。

      本文标题:720场景显示和panoramaGL的导入

      本文链接:https://www.haomeiwen.com/subject/ibxzuttx.html