这个是一个静态的,全景图演示,一个完整的全景图需要6张图片合成,还要注意图片排放顺序,如果要是其它的全景图是实时的话,要使用其它SDK。
其实,使用Unity3d 也是可以做的。下面讲的是配合panoramaGL使用:达到720全景效果。
这个需要翻墙 (不会翻墙的可以留言给我!!!)
javascript 3D 技术:
https://threejs.org
属性、方法介绍
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;
导入框架和库必须:
下一个例子,我有一个球形图像在
项目为pano.jpg。
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库并开始使用在他们的项目的那些参考文献。