美文网首页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

相关文章

  • 720场景显示和panoramaGL的导入

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

  • ARKit 笔记 1

    1 导入 ARKit2 授权相机权限3 创建 sceneView 用来显示场景4 配置session ARWorl...

  • RGB与YUV颜色编码的区别

    RGB 在图像显示中,⼀张 1280 * 720 ⼤小的图片,就代表着它有 1280 * 720 个像素点。其中每...

  • RGB和YUV颜色编码

    RGB 颜色编码 在图像显示中,⼀张 1280 * 720 ⼤小的图⽚,就代表着它有 1280 * 720个像素点...

  • 制作扭曲的世界

    新建1280*720尺寸画布—导入素材图 制作椭圆样板:用椭圆工具画一个正圆(大小和位置为想要扭曲的大小和位置)—...

  • iOS PanoramaGL、JAPanoView全景使用解析

    PanoramaGL:支持鱼眼图和六方图等等,但是使用不方便。GitHub链接:https://github...

  • 注射泵开发--一(工程,场景)

    新建工程 创建场景新建场景存储场景导入场景导入场景 在场景中放置MRX-INJ2放置MRX-INJ2 配置MRX-...

  • CardBoard中UGUI的使用

    使用cardboard实现简单的场景漫游。 首先我们需要为我们的场景导入cardboard的SDK和Demo包(D...

  • 720全景在旅游行业成为刚需

    720全景在旅游行业成为刚需 720全景虚拟现实(也称实景虚拟)是基于全景图像的真实场景虚拟现实技术。全景(英文名...

  • PanoramaGL 全景展示

    https://github.com/shaojiankui/PanoramaGL Pano2vr 全景图像转化与...

网友评论

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

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

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