移花接木(21)- 无缝过渡两个场景

更新于 2024.4.19 krpano 1.21.2

本案例实现了使用鼠标或触摸拖动滑条来任意融合两个相似场景。同一场景不同季节的景色,如昼夜、开灯关灯等都可以使用该效果。建议使用1.21版本。

 

1.21方法

1.21版本中,layer的类型包含了krpano,也就是可以将krpano场景作为layer的内容加载,这样的话,可以实现包括两个场景按照指定透明度重叠、上下屏、左右屏等各种方式实现场景比较,同时实现视角的同步。

1.21方法的好处就是对全景图的类型没有任何限制,可以是多分辨率,甚至是全景视频。

在上面的官方案例中还提供了一个滑动条。

先来看行13-27,这是两个scene,分别放两个全景图,这里对image标签里的内容没有任何限制。

行31是view标签,是设置初始视角。

行34-44是两个用于呈现krpano场景的layer,也就是将刚才两个scene分别放进两个layer里。如果你有多个场景需要对比,注意layer中onloaded部分。

其中scene[0]的数字0代表了主xml中加载的第一个scene标签,数字1代表加载的第二个scene标签,以此类推,当然也可以直接在方括号里写scene的name。

行47-88是设置两个全景图视角同步的,不需要更改,全盘复制。

官方案例中提供了多个比较方式,可根据自己的需要保留对应的按钮。

例如我只保留重叠滑动,则只需要保留上面代码中的最后一个layer(删掉前面六个layer的代码)。

然后把行321的action改成:

动作overlap_blending中的参数set代表切换是立即的,如果写的是tween则表示有一个过渡效果。

其它动作left_only、right_only、top_bottom、side_by_side同理。

这样启动全景后就会变成这样子:

其余代码中的action、style部分全盘复制即可。

特别说一下两个场景重叠的代码。

点击按钮Overlapped,也就是触发了动作

可以看到两个全景图以50%的透明度重叠在一起。

然后下面是实现滑动重叠的。关键代码

 

1.20下载包位置

你电脑的路径\krpano-1.20.9\viewer\examples\slider-blend-cubes

1.20演示

 

1.20步骤

素材准备

我们看案例所在的文件夹的截图:

QQ图片20151221140554

首先需要融合两个场景的全景图是由各自的6张立方体切片组成,分别是前后左右上下,你可以使用krpano下载文件夹中的

Convert SPHERE to CUBE droplet.bat 

或者是较新版本中的

Convert SPHERE CUBE Droplet.exe

因默认会生成tif图片,所以在下载包的templates文件夹的convertdroplets.config文件中的下面的高亮行

改为

这样生成的立方体切片就是jpg图片。保存convertdroplets.config文件。

把球面全景图(第一张全景图命名为pano1.jpg第二张全景图命名为pano2.jpg)拖拽到对应的droplet。然后把12张切片图片和案例中slider_background.png以及slider_grip.png两个图片都放在你的文件夹vtour里。

 

代码修改

假设你是针对tour.xml里众多scene标签中的其中一个进行滑条融合。我们找到这个scene,默认生成的scene里面的内容,应该有image标签。image标签定义了该场景的全景图。我们把整段image标签删掉。

把image标签内以及image标签删除以后,我们下面所做的复制粘贴内容都是从范例文件夹里的slider.xml到我们自己的xml进行。

首先我们把scene标签里的onstart里加上

onstart=”setblend(0);”

然后我们把下面所有的代码都放在这个scene标签内

点击代码窗口最右侧按钮,在新窗口打开后复制代码

这样的话,你就可以在一个scene标签里实现滑动融合两个场景。

修改以下代码中的x、y以及align属性可以改变滑条的位置。

 

场景的无缝过渡

我们的需求很简单,好比现在有一个简约型装修的样板间,然后我们点击某个按钮,场景无缝融合到一个豪华型装修的样板间。也好比,这个场景是夏天,点击按钮后,场景无缝融合到冬天的场景。

在这样的需求下,首先相机的拍摄位置,包括三脚架的位置,镜头的高度,也就是节点在空间中的位置应该是一致的。你在拍摄这两个场景的时候就要注意点。就好比是拍摄户外的场景,需要明显的天气或气候对比时,利用其它工具记录好镜头的位置,以便下次拍摄第二个场景时保持在相同的位置。

在拼接的时候保证两张图片是一样的X位移,也就是如果有一个物体是两张图共有的,那么它应该出现在这两个球体全景图的相同的平面坐标上。

接下来就是我们需要实现的krpano的功能。我们只需要在场景1的按钮layer中加上一个简单的代码。

KEEPVIEW是保持相同的视角,包括切换前的hlookat以及vlookat和fov,KEEPMOVING   blend(1)则保证了融合的速度有一秒的时间

下面是关于loadscene的详细说明:

点击进入动态载入全景类action说明

 

无缝过渡三个场景

点击查看