Krpano全景漫游开发手册

https://segmentfault.com/a/1190000019506737

 

 

概念

全景漫游(英文:panorama)技术可以让体验者在全景图像构建的全景空间里切换视角的浏览。它是通过拍摄全景图像,再采用计算机图形图像技术构建出全景空间,让使用者能用控制浏览的方向,或左或右、或上或下观看物体或场景,仿佛身临其境一般。与传统的3D建模相比,全景漫游技术制作简单,数据量小,系统消耗低,且更有真实感。

早期270°或者360°全景漫游(柱状全景):

Krpano全景漫游开发手册_第1张图片

720°全景漫游:
Krpano全景漫游开发手册_第2张图片

全景图

全景图(这里特指球面全景图)是指一种图片宽高比为2比1的包含了360°x180°空间的图片,例如8000*4000的jpg图片或tiff图片等。
注:宽高比2:1为水平方向(360):垂直方向(180)

Krpano简介

krpano是一款全景漫游制作软件和工具。其具有以下特点:

  • 高度灵活、性能卓越的轻量化全景漫游浏览器。
  • 兼容HTML5和Flash,支持Webgl下的WebVR展示。
  • 使用专用的krpano xml代码编写全景漫游,可开发出高度定制化的项目,也可利用krpano工具开发在线全景制作及展示平台。
  • 支持多种类型的全景图以及全景视频和环物全景。
  • 支持多种投影模式。
  • 同时提供简单高效的批处理方式,可在无需代码干预下迅速生成一个基本功能兼备的全景漫游项目。

如何选择

如果只想简单展示全景,无特殊定制需求,那么可以使用默认皮肤,或者使用全景平台进行开发。
如果需要开发全景平台、定制全景功能或者对全景开发有浓厚兴趣的可以学习和深入了解krpano。

特性

  • 兼容Flash和HTML5
  • 高性能和高质量的渲染
  • 高度可定制的
  • 丰富的全景格式和图像文件格式的支持
  • 多分辨率
  • 三维投影
  • 虚拟旅游热点/脚本
  • 渐进式

案例展示

见下载包或者官方网站


文件说明

下载包使用说明

examples文件夹

这是krpano的案例文件夹(1.19的examples文件夹在viewer文件夹下),里面包含了官方的绝大部分案例,这些案例都是学习krpano代码的很好的素材。注意下载包的案例所使用的viewer是下载包自身的默认viewer文件夹。因为你不能简单复制案例文件夹,你还需要设置一下对应viewer的路径,而且该viewer还必须是你自己的viewer。

templates 文件夹

官方一系列模版所在的文件夹,包括了图片、xml、html以及相关配置文件等。通过对这里的了解和修改,我们可以做出自己的皮肤模版,然后一键生成,实现批量的工作流。当然,正常情况下,你也无需从这里拷贝,因为在droplet过程中会自动生成。部分模版在默认droplet过程中并没有使用到。

Krpano全景漫游开发手册_第3张图片

viewer 文件夹

Krpano全景漫游开发手册_第4张图片
krpano 下载包的官方插件、引擎、案例的存放位置,同时也是让案例文件夹能够正确显示的 viewer 所在的位置。其中plugins是当前版本的所有官方插件;examples是官方提供的案例。

小贴士

自身项目的 viewer(js和swf)会在droplet过程中自动生成无需从这里拷贝

droplet.bat 文件

Krpano Droplets 是krpano命令行工具加上配置文件config的一个快捷方式。droplets使用方式非常简单,将文件(通常是图片或者xml等文件)直接拖放在droplet图标上松开即可。

Krpano全景漫游开发手册_第5张图片
krpano droplet (图中齿轮状图标文件)

MAKE PANO (NORMAL) Droplet

用法说明:

  • 生成普通 (=单分辨率) 全景.
  • 制作典型的360度全景.
  • 全部全景图将会一次性载入. 默认下方块最大边长为2048像素(可以在config配置文件中修改).
  • 包括默认的导航皮肤.
  • 支持Flash和HTML5.

Droplet 说明:

  • 基于kmakemultires工具.
  • 配置文件:normal.config
  • 默认模版/皮肤配置文件:defaultbuttons.skin

MAKE PANO (MULTIRES) Droplet

用法说明:

  • 生成多分辨率全景
  • 制作所有类型的全景
  • 只有特定的切片在需要时载入. 没有尺寸/分辨率限制.
  • 包含默认的导航皮肤.
  • 支持Flash和HTML5.

Droplet 说明:

  • 基于kmakemultires工具.
  • 配置文件:multires.config
  • 默认模版/皮肤配置文件:defaultbuttons.skin

MAKE PANO (SINGLESWF)Droplet

用法说明:

  • 生成普通 (=单分辨率) 全景同时将所有文件嵌在一个SWF文件中.只输出一个SWF文件和一个HTML文件.
  • 制作典型的360度全景 .
  • 全部全景图将会一次性载入. 默认下方块最大变长为2048像素(可以在配置文件中修改).
  • 包含默认的导航皮肤.
  • 仅支持Flash.

Droplet 说明:

  • 基于kmakemultires工具.
  • 配置文件:singleswf.config
  • 默认模版/皮肤配置文件:defaultbuttons.skin

MAKE PANO (FLAT)Droplet

用法说明:

  • 生成平面切片多分辨率图像.
  • 制作平面图像. 输出时既定为平面图像.
  • 只有特定的切片在需要时载入. 没有尺寸/分辨率限制.
  • 包含有默认导航按钮的皮肤,针对特定的视角.
  • 支持Flash与HTML5.

Droplet 说明:

  • 基于kmakemultires工具
  • 配置文件:flat.config
  • 默认模版/皮肤配置文件:flat.xml / flatskin.xml

MAKE VTOUR (NORMAL)Droplet
用法说明:

  • 生成普通 (=单分辨率) 全景并将它们整合到一个虚拟漫游中.
  • 制作典型的360度全景.
  • 全部全景图将会一次性载入. 默认下方块最大边长为2048像素(可以在配置文件中修改).
  • 包含一个包括导航按钮、可滚动缩略图以及可选择必应地图以及重力感应插件的默认皮肤.
  • 支持Flash和HTML5.

Droplet 说明:

  • 基于kmakemultires工具.
  • 配置文件:vtour-normal.config
  • 默认模版/皮肤配置文件:vtourskin-thumbnails-bingmaps-gyro.skin

MAKE VTOUR (MULTIRES)Droplet (正常生成不考虑VR的漫游推荐使用这个dropelt)

用法说明:

  • 生成多分辨率全景并将它们整合到一个虚拟漫游中.
  • 制作所有类型全景图像.
  • 只有特定的切片在需要时载入. 没有尺寸/分辨率限制.
  • 包含一个包括导航按钮、可滚动缩略图以及可选择必应地图以及重力感应插件的默认皮肤.
  • 支持Flash和HTML5.

Droplet 说明:

  • 基于kmakemultires工具.
  • 配置文件:vtour-multires.config
  • 默认模版/皮肤配置文件:vtourskin-thumbnails-bingmaps-gyro.skin

MAKE VTOUR (VR-OPT)droplet (正常生成带有VR的漫游推荐使用这个dropelt)

用法说明:

  • 生成多分辨率全景并将它们整合到一个虚拟漫游中.
  • 制作所有类型全景图像.
  • 只有特定的切片在需要时载入. 没有尺寸/分辨率限制.
  • 包含一个包括导航按钮、可滚动缩略图以及可选择必应地图以及重力感应插件的默认皮肤.
  • 支持Flash和HTML5.
  • krpano 1.19 pr9后,可生成为VR优化的全景图。如果包含立体图像的输入时,会生成针对VR使用的立体图像。

Droplet 说明:

  • 基于kmakemultires工具.
  • 配置文件:vtour-vr.config
  • 默认模版/皮肤配置文件:vtourskin-thumbnails-bingmaps-gyro.skin

MAKE OBJECTDroplet

用法说明:

  • 生成若干个平面多分辨率图像并将它们整合到一个可缩放旋转的360物体影像中.
  • 制作平面图像物体. 所有物体图片的尺寸必须一致.
  • 只有特定的切片在需要时载入. 没有尺寸/分辨率限制.
  • 包含一个特定的控制物体的皮肤.
  • 仅支持Flash.

Droplet 说明:

  • 基于kmakemultires工具.
  • 配置文件:object.config
  • 默认模版/皮肤配置文件:object.xml / objectskin.xml

Convert SPHERE to CUBEDroplet

用法说明:

  • 将球面图像转换至立方体图.
  • 输出的立方体格式、尺寸以及图像尺寸可以在配置文件中修改.

Droplet 说明:

  • 基于ktransform 工具.
  • 配置文件: convertdroplets.config

Convert CUBE to SPHEREDroplet

用法说明:

  • 将六张立方体图像转换成一张球面全景图.
  • 输出的图像尺寸和格式可以在配置文件中修改.

Droplet 说明:

  • 基于kcube2sphere工具.
  • 配置文件: convertdroplets.config

Encrypt XMLDroplet

用法说明:

  • 将xml文件拖放进droplet进行加密.
  • 加密过程中xml文件会自动被压缩.

Droplet 说明:

  • 基于encrypt工具.

制作自定义droplet

内置 droplets 只是针对最常见的情况的范例。制作自定义的krpano droplet是非常简单的。你只需要编辑配置文件,然后复制并重命名一个已有的krpano droplet并对droplet本身进行编辑即可。

  • Windows下编辑krpano droplet
  • krpano droplet实际上是批处理文件 (.bat).
  • 可以在任意文本编辑器下进行编辑.
  • 用文本编辑器打开krpano droplet,将配置文件的名字和路径修改为你自己的配置文件.
  • Mac OSX下编辑krpano droplet
  • droplet实际上是”AppleScript Droplet’.
  • 可以使用 ‘Apple Script Editor’打开
  • 在 Apple Script Editor打开krpano droplet,将配置文件的名字和路径修改为你自己的配置文件.

两个txt文件

krpano授权的法律声明以及版本发行说明。

krpanotools

包含 32/64 位的 krpanotools32.exe 与 krpanotools64.exe,该两个文件为 krpano 项目核心,会在命令行中调用它们。

krpano Testing Server

krpano 自带的静态文件本地服务环境,使用它可以路过本地文件案例限制来查看 Flash 与 HTML5 效果,另外它还可以控制浏览器缓存、限制下载速度模拟网络条件。

Krpano全景漫游开发手册_第6张图片

krpano tools

用来加密保护全景项目的可视化工具,需要注册才可以使用,这里就不扩展。

Krpano全景漫游开发手册_第7张图片

成果文件说明

vtour 文件夹结构

以下是默认与比较基础文件结构与文件名,根据droplet的不同,文件可能更多或更少,同时文件名也并不一定和这些一样。

vtour/
| -- panos/             #存放全景切片图片的文件夹
| -- skin/              #存放皮肤相关文件
| -- plugins/           #用来存放插件
| -- tour.swf           #krpano flash viewer
| -- tour.js            #krpano HTML5 viewer
| -- tour.xml           #生成全景的相关配置
| -- tour.html          #用来浏览全景的页面,需要本地服务环境
| -- tour_editor.html   #添加热点(hotspot)与初始化视角设置的编辑器
| -- tour_testingserver.exe #windows系统中打开测试服务器并打开html文件进行本地浏览。
| -- tour_testingserver_macos #mac系统中打开测试服务器并打开html文件进行本地浏览。

vtour 运作机制

Krpano 是通过viewer引擎来实现浏览静态图片时产生“三维”效果,而这一切则是通过tour.html这个入口文件。

过滤掉一些没用的代码,可以看到入口文件主代码如下:

Krpano全景漫游开发手册_第8张图片


载入全景

引入脚本(html5渲染器)

创建嵌入容器

创建对象及配置参数

embedpano({
    swf:"krpano.swf", // flash渲染器 
    xml:"krpano.xml", // 主配置文件   缺省的时候会调用krpano.xml和krpano.swf  不加载设置0即可
    target:"pano", // 嵌入容器id 
    id:"krpanoSWFObject", // 当前全景id,javascript接口调用会使用此id
    bgcolor:"#000000",// 背景颜色 
    html5:"auto", // html5模式(auto:自动;prefer:优先使用html5;fallback:优先flash;only:只使用html5;always:始终使用html5-仅用于测试;never:始终使用flash;可加上webgl或css3d渲染技术,如auto+css3d) 
    flash:"auto",// flash模式(auto,prefer,fallback,only,never和html设置类似) 
    wmode:"window",// flash模式设置(window:窗口;opaque:不透明;opaque-flash:不透明,仅限flash;transparent:透明的;transparent-flash:透明的,仅限flash;direct:最佳性能,但可能不兼容旧系统和浏览器)     
    localfallback:"http://localhost:8090",
    vars:{},// 在xml加载解析后设置启动变量 
    initvars:{},// 在xml加载解析前设置启动变量,可以在地址进行查询(our.html?initvars.variable=value)
    basepath:...// 基本路径 (相对于krpano.swf)
    consolelog:false,// 是否在浏览器控制台打印日志信息
    mwheel:true,// 是否启用鼠标滚轮
    focus:true,// 获得焦点 
    webglsettings:{preserveDrawingBuffer:false, depth:false, stencil:false},//webgl设置
    mobilescale:0.5, // 移动设备缩放 
    fakedevice:"",// "mobile", "tablet", "desktop";模拟设备 (仅限测试)
    onready:function(){},// 准备就绪回调函数,一般当javascript调用krpano接口的时候,需要在此方法内
    onerror:function(){},// 错误回调函数 
    passQueryParameters:true, // 启用url查询参数( html5, flash, wmode, mobilescale, fakedevice, initvars)作为变量传递,如tour.html?html5=only&startscene=scene2&initvars.design=flat
    });

移除全景

removepano(id);

官网文档:https://krpano.com/docu/html/...


Krpano XML语法

krpano xml

xml本身是一种传输格式,这意味着只能用于在krpano viewer内传输数据。当xml被解析时,xml元素才会被传输/映射到krpano的内部数据结构。这就是说当解析结束后,本质上就再也没有xml。

krpano xml 本身是xml 语言,但有着自己特定的元素和语法。krpano xml 包括静态代码和动态代码部分。

静态代码就是由 26 个krpano 元素(包含废弃的两个)组成的代码,它们有着自己的属性,通常属性的值都是字符串或者数字或者是布尔值,因为这些属性的默认值规定了只能用这些类型。

相关的数值类型包括 string (字符串)、number (浮点数)、int(整数)、boolean (布尔
值, true 或者false )。

  • 有些属性只在 Flash 下有意义,例如layer[name].smoothing;
  • 有些属性只在 HTML 下有意义,例如layer[name].jsborder
  • 有些属性是只读属性, 你不能就这样写在上面的静态代码中, 只能通过get() 来获取其数值,

layer[name].pressed 、layer[name].imagewidth 、layer[name].imageheight

  • 还有一些属性是比较特别的,他们的数值类型是 Action Event 、也就是属性的数值实际上是填入动态代码,例如我们一开始遇到的onclick ="openurl('http://...');",类似的还有几个 on 字辈的属性,像
onover =""
onhover =""
onout =""
onclick =""
ondown =""
onup =""
onloaded =""

xml标签/节点

 //无子元素
 //有子元素

属性

一个xml元素可以有一个或多个属性,由属性名和属性值构成,属性值必须放在单引号或者双引号中,且属性不允许重复


   

根元素krpano

所有元素需要位于krpano元素内部


   ...
   
   
     
   
   ...

注释

不能包含两个连字符--

大小写
xml元素的名称和xml属性都会被转换成小写,所以是不区分大小写的
编码
为了避免字符编码问题,所有xml文件应保存为utf-8或utf-16文件
自定义元素
krpano允许添加自定义的元素、允许在系统定义的元素中添加自定义属性,方便我们进行其它操作。krpano在载入xml文件解析静态代码时会忽略掉自定义元素。自定义的元素和属性除了语法上不能违反krpano的规定,在属性值设置上更为自由。
其他
xml元素间的空格字符空格、制表符和换行符将被忽略

保留字,不能直接使用,需要使用转义

Krpano全景漫游开发手册_第9张图片

出现相同name的元素后面会覆盖前面的

注意:html5模式会比flash模式严格,两种模式均需调试


官方文档:https://krpano.com/docu/xml/s...

Krpano XML内置元素

krpano的XML结构


    
    
    
    
    
    
    
    
    
    
    

krpano xml中的所有xml元素和属性是可选的,可以定义多次。 当相同的元素将再次定义两个或两个以上的时候,那么以后/声明 将会覆盖之前的。

< krpano > 根元素内 也可以包含< krpano > 元素

xml本身只是一个 传送格式 ——这意味着它将只用于传送krpano view的数据。 当xml解析,那么xml元素将转换/映射到krpano内部数据结构。 这意味着xml解析后就没有了。

官方文档:https://krpano.com/docu/xml/#top

特殊属性

name

name属性 ⇒定义Array元素:

当一个xml元素有name属性,那么这个元素将被解释为元素的Array 。 neme名字的 Array 即是该元素本身。

当没有 Array 这个名字已经存在,它将被自动创建。

当元素已经存在,然后被定义 xml元素将仍然创建,但会覆盖已经存在的元素。

名称属性名字规范:

  1. 必须以英文字母开始,不能使用数字,汉字开始 !
  2. 当一个名称仍以数字字符开始,然后将解释为Array索引名称。
  3. 所有名称会自动转换成小写,允许直接不分大小写访问!

url

资源路径,用于引入插件、图片、音频等。

更以根据需要使用下面的占位符:

%FIRSTXML% – 第一个载入的xml文件的路径。
%CURRENTXML% – 当前载入的主xml文件路径(非嵌入的文件)。
%SWFPATH% – viewer文件的路径。
%HTMLPATH% -html文件的路径。
%BASEDIR% – 使用basedir的路径。
%$VARIABLE% – 使用指定的“VARIABLE” – 这可以是任意的krpano变量,但必须当前xml或场景完全载入之前定义,例如已经存在于HTML文件中或在loadpano()、loadscene()调用之前。

devices


    
    ...

如果xml元素在某个设备渲染或者忽略,可以给该元素设置devices属性,可以设置多个。它可以在每个xml元素上设置,当xml文件将被解析并转换为krpano内部数据结构时,将会检查每个xml元素的devices属性。当当前设备不匹配devices属性,那么这个xml元素及其所有子元素将被忽略。

+  .and.  且
|  .or.   或
!  no-   否

属性值(可以通过逻辑运算符组合使用)

Krpano全景漫游开发手册_第10张图片

例子

devices="all"(默认)
devices="html5"
devices="flash|webgl" 
devices="flash.or.webgl"

attribute.devicecheck

在不同中设置不同的属性值,属性值同device

+  .and.  且
|  .or.   或
!  no-   否

例子

scale.normal="1.0" 
width.desktop="200"
visible.fullscreensupport="true"
visible.html5.and.webgl.or.flash="true"
visible.html5.and.no-webgl="false"

if


    
    ...

根据条件渲染元素

例子

embedpano({..., initvars:{design:"flat"}, ...});

style