krpano 全景圖學(xué)習(xí)筆記

krpano

Krpano 可以方便快速的構(gòu)建出全景圖或全景視頻(demo

目錄

  • Krpano Droplet
    • MAKE PANO (NORMAL)
    • MAKE PANO (MULTIRES)
    • MAKE PANO (SINGLESWF)
    • MAKE PANO (FLAT)
    • MAKE VTOUR (NORMAL)
    • MAKE VTOUR (MULTIRES)
    • MAKE OBJECT
    • Convert SPHERE to CUBE
    • Convert CUBE to SPHERE
    • Encrypt XML
  • vtour 文件夾說明
    • vtour 文件夾結(jié)構(gòu)
    • vtour 運作機制
  • krpano XML結(jié)構(gòu)
    • Krpano 內(nèi)置元素說明
  • 常用設(shè)置
    • 小行星開場
    • 加載動畫
    • 修改右鍵菜單
      • 添加動態(tài)熱點
    • 動態(tài)熱點添加始終顯示的文字
    • 熱點和或圖層在鼠標點擊或鼠標懸停時進入動態(tài)模式
    • 拖拽熱點
    • 添加簡單的全景視頻
    • 添加雨雪特效
    • 自動旋轉(zhuǎn)
    • 無按鈕控制的自動旋轉(zhuǎn)
    • 按鈕控制的自動旋轉(zhuǎn)
    • 添加陀螺儀
    • 場景過渡效果
    • 隱藏顯示熱點
    • 獲取全景視頻進度

原文鏈接:
https://krpano.milly.me/
http://www.krpano360.com/

GitHub: nodeKrpano


Krpano Droplet

MAKE PANO (NORMAL)

用法說明

  • 生成普通 (=單分辨率) 全景
  • 制作典型的 360 度全景
  • 全部全景圖將會一次性載入. 默認下方塊最大變長為 2048 像素(可以在配置文件中修改)
  • 包括默認的導(dǎo)航皮膚
  • 支持 FlashHTML5

Droplet 說明

  • 配置文件: normal.config
  • 默認模版/皮膚配置文件: defaultbuttons.skin

MAKE PANO (MULTIRES)

用法說明

  • 生成多分辨率全景
  • 制作所有類型的全景
  • 只有特定的切片在需要時載入 沒有尺寸/分辨率限制
  • 包含默認的導(dǎo)航皮膚
  • 支持 FlashHTML5

Droplet 說明

配置文件: multiresconfig
默認模版/皮膚配置文件: defaultbuttonsskin


MAKE PANO (SINGLESWF)

用法說明

  • 生成普通 (=單分辨率) 全景同時將所有文件嵌在一個SWF文件中只輸出一個SWF文件和一個HTML文件
  • 制作典型的360度全景
  • 全部全景圖將會一次性載入 默認下方塊最大變長為2048像素(可以在配置文件中修改)
  • 包含默認的導(dǎo)航皮膚
  • 僅支持 Flash

Droplet 說明

配置文件: singleswfconfig
默認模版/皮膚配置文件: defaultbuttonsskin


MAKE PANO (FLAT)

用法說明

  • 生成平面切片多分辨率圖像
  • 制作平面圖像 輸出時既定為平面圖像
  • 只有特定的切片在需要時載入 沒有尺寸/分辨率限制
  • 包含有默認導(dǎo)航按鈕的皮膚栋豫,針對特定的視角
  • 支持 FlashHTML5

Droplet 說明

  • 配置文件: flatconfig
  • 默認模版/皮膚配置文件: flatxml / flatskinxml

MAKE VTOUR (NORMAL)

用法說明

  • 生成普通 (=單分辨率) 全景并將它們整合到一個虛擬漫游中
  • 制作典型的 360 度全景
  • 全部全景圖將會一次性載入 默認下方塊最大變長為 2048 像素(可以在配置文件中修改)
  • 包含一個包括導(dǎo)航按鈕、可滾動縮略圖以及可選擇必應(yīng)地圖以及重力感應(yīng)插件的默認皮膚
  • 支持 FlashHTML5

Droplet 說明

  • 配置文件: vtour-normalconfig
  • 默認模版/皮膚配置文件: vtourskin-thumbnails-bingmaps-gyroskin

MAKE VTOUR (MULTIRES)

用法說明

  • 生成多分辨率全景并將它們整合到一個虛擬漫游中
  • 制作所有類型全景圖像
  • 只有特定的切片在需要時載入 沒有尺寸/分辨率限制
  • 包含一個包括導(dǎo)航按鈕、可滾動縮略圖以及可選擇必應(yīng)地圖以及重力感應(yīng)插件的默認皮膚
  • 支持 FlashHTML5

Droplet 說明

  • 配置文件: vtour-multiresconfig
  • 默認模版/皮膚配置文件: vtourskin-thumbnails-bingmaps-gyroskin

MAKE OBJECT

用法說明

  • 生成若干個平面多分辨率圖像并將它們整合到一個可縮放旋轉(zhuǎn)的 360 物體影像中
  • 制作平面圖像物體 所有物體圖片的尺寸必須一致
  • 只有特定的切片在需要時載入 沒有尺寸/分辨率限制
  • 包含一個特定的控制物體的皮膚
  • 僅支持 Flash

Droplet 說明

  • 配置文件: objectconfig
  • 默認模版/皮膚配置文件: objectxml / objectskinxml

Convert SPHERE to CUBE

用法說明

  • 將球面圖像轉(zhuǎn)換至立方體圖
  • 輸出的立方體格式羹奉、尺寸以及圖像尺寸可以在配置文件中修改

Droplet 說明

  • 配置文件: convertdropletsconfig

Convert CUBE to SPHERE

用法說明

  • 將六張立方體圖像轉(zhuǎn)換成一張球面全景圖
  • 輸出的圖像尺寸和格式可以在配置文件中修改

Droplet 說明

  • 配置文件: convertdropletsconfig

Encrypt XML

用法說明

  • xml 文件拖放進 droplet 進行加密
  • 加密過程中 xml 文件會自動被壓縮

自定義 droplet

如果內(nèi)置 droplet 不能滿足需求或者需要對一些參數(shù)進行自定義钧汹。只要復(fù)制并重命名一個配置文件與皮膚配置文件,然后復(fù)制并重命名一個 droplet,修改里面的配置路徑即可征绎。


vtour 文件夾說明

vtour 文件夾結(jié)構(gòu)

vtour/
| -- panos/             #存放全景切片圖片的文件夾
| -- skin/              #存放皮膚相關(guān)文件
| -- plugins/           #用來存放插件
| -- tour.swf           #krpano flash viewer
| -- tour.js            #krpano HTML5 viewer
| -- tour.xml           #生成全景的相關(guān)配置
| -- tour.html          #用來瀏覽全景的頁面占键,需要本地服務(wù)環(huán)境
| -- tour_editor.html   #添加熱點(hotspot)與初始化視角的設(shè)置

vtour 運作機制

<div id="pano"></div>
<script src="tour.js"></script>
<script>
embedpano({
    swf: "tour.swf", //有則表示加載flash引擎昔善,如果設(shè)置html5:only則不需要該值
    xml: "tour.xml", //啟動時的配置文件
    target: "pano", //要渲染到的目標容器ID
    html5: "only", //如果有需要用到flash,可設(shè)置為auto
    //id: "krpanoSWFObject", //默認的krpano對象畔乙,每一個viewer對應(yīng)唯一id君仆,與JS交互時要用到
    mobilescale: 1.0, //移動設(shè)備縮放,1表示不縮放牲距,默認0.5
    passQueryParameters: false //是否接受URL傳參返咱,例如:tour.html?html5=only&startscene=scene2
});
</script>

krpano XML結(jié)構(gòu)

<krpano>
    <include>
    <preview>
    <image>
    <view>
    <area>
    <display>
    <control>
    <cursors>
    <autorotate>
    <plugin>
    <layer>
    <hotspot>
    <style>
    <events>
    <action>
    <contextmenu>
    <network>
    <memory>
    <security>
    <textstyle>
    <lensflareset>
    <lensflare>
    <data>
    <scene>
</krpano>

Krpano 內(nèi)置元素說明

01.krpano

krpano 元素是 krpano xml 文件的根元素。任何一個 krpano xml 文件內(nèi)的其它元素都要被 krpano 元素所嵌套牍鞠。

02.include

include 元素可引入其它 xml 文件的內(nèi)容咖摹,例如我們常要用到的 vtourskin.xml 就是使用 include 嵌入到主 xml 中。

03.preview

預(yù)覽圖設(shè)置皮服,也就是全景圖完全載入之前的模糊圖像楞艾,但因為體積較小,因此載入速度較快龄广,會在全景圖之前先載入硫眯,避免黑屏。

04.image

image 元素控制全景圖設(shè)置择同,包括全景圖類型两入,漸進分辨率切片顯示等。

05.view

view 元素控制全景的視野敲才,例如起始視角裹纳、視角限制與縮放等等择葡。當要設(shè)置限制視角或設(shè)定特定的初始視角時,需要自行設(shè)定或使用插件獲取代碼剃氧。

06.area

area 元素控制全景圖在瀏覽器窗口中顯示區(qū)域大小敏储。

07.display

控制全景圖的顯示品質(zhì)。

08.control

設(shè)置鼠標朋鞍、鍵盤以及觸摸設(shè)備對全景瀏覽的控制方式已添。

09.cursors

設(shè)置鼠標光標樣式。

10.autorotate

控制自動旋轉(zhuǎn)滥酥。

11.plugin

用來調(diào)用插件更舞、插入圖片或生成容器。

12.layer

plugin 作用相同坎吻,只是名稱不同缆蝉。

13.hotspot

熱點,可在 3D 空間中插入圖片瘦真,使之隨著 3D 空間一同運動刊头,可制作很多特效。

14.style

可以保存其它元素的屬性子集吗氏。

15.events

可調(diào)用各類型事件芽偏,例如全景載入的不同階段以及鼠標觸發(fā)的不同行為等。

16.action

自定義動態(tài)代碼弦讽。

17.contextmenu

定義右鍵菜單的內(nèi)容污尉。

18.network

控制圖像的下載、緩存與解碼往产。

19.menory

控制全景圖在設(shè)備中的存儲被碗。

20.security

FlashplayerHTML5 相關(guān)的安全/跨域設(shè)置。

21.lensflareset

鏡頭眩光的設(shè)置(目前只能在 flash 下使用)仿村。

22.lensflare

生成鏡頭眩光(目前只能在 flash 下使用)锐朴。

23.data

可放置任意的數(shù)據(jù)。

24.scene

可放置任意 krpano 元素蔼囊。每個 scene 元素只有在被 loadscene 時才會被載入到瀏覽器進行解析焚志。

常用設(shè)置

小行星開場

開啟小行星,先找到 tour.xml 畏鼓,然后搜索 littleplanetintro 將其值設(shè)置為 true 即可酱酬。

<skin_settings
    ...
    littleplanetintro="true"
    ...
/>

加載動畫

在官方的案例文件夾中找到 loading-progress 這個文件夾,將需要的文件內(nèi)容復(fù)制到項目中的 skin 文件夾云矫,然后在 tour.xml 文件中引入該文件即可膳沽,這樣重新打開就可以看到有動態(tài)的進度條了。

<include url="skin/loadingbar.xml" />

修改右鍵菜單

找到引入的皮膚文件,默認在 vtourskin.xml 挑社,然后修改下面這些地方即可自定義右鍵菜單陨界,但像版權(quán)、全屏菜單即使刪除也會存在痛阻。

<contextmenu>
    <item name="fv" caption="魚眼視圖" onclick="skin_view_fisheye();" showif="view.vlookatrange == 180" devices="flash|webgl" separator="true" />
</contextmenu>

contextmenu元素

  • caption 右鍵菜單顯示的文字
  • onclick 控制點擊后執(zhí)行的動作菌瘪,動作由 action 定義
  • showif 顯示條目的條件
  • devices 控制在 flash/webgl 哪個模式中出現(xiàn)
  • separator 顯示分隔符來分隔菜單

自定義熱點

配置 <hotspot>style 的屬性對應(yīng)的元素(skin對應(yīng)的文件夾)

<hotspot name="spot1" style="skin_hotspotstyle" ath="93.531" atv="-1.109" linkedscene="scene_shuilifang" />
<!-- skin_hotspotstyle - style for the hotspots -->
    <style name="skin_hotspotstyle" url="vtourskin_hotspot.png" scale="0.5" edge="top" distorted="true"
           tooltip=""
           linkedscene=""
           linkedscene_lookat=""
           onclick="skin_hotspotstyle_click();"
           onover="tween(scale,0.55);"
           onout="tween(scale,0.5);"
           onloaded="if(linkedscene AND skin_settings.tooltips_hotspots, copy(tooltip,scene[get(linkedscene)].title); loadstyle(skin_tooltips); );"
           />

隱藏皮膚

<action name="startup" autorun="onstart">
    <!--添加代碼 隱藏皮膚 -->
    set(events[skin_events].name, null);
    for(set(i,0), i LT layer.count, inc(i), 
    copy(layername, layer[get(i)].name);
    subtxt(namestart, get(layername), 0, 5);
    if(namestart == 'skin_', removelayer(get(layername)); dec(i); );
  );
</action>

自定義熱點

配置 <hotspot>style 的屬性對應(yīng)的元素(skin對應(yīng)的文件夾)

<hotspot name="spot1" style="skin_hotspotstyle" ath="93.531" atv="-1.109" linkedscene="scene_shuilifang" />
<!-- skin_hotspotstyle - style for the hotspots -->
    <style name="skin_hotspotstyle" url="vtourskin_hotspot.png" scale="0.5" edge="top" distorted="true"
           tooltip=""
           linkedscene=""
           linkedscene_lookat=""
           onclick="skin_hotspotstyle_click();"
           onover="tween(scale,0.55);"
           onout="tween(scale,0.5);"
           onloaded="if(linkedscene AND skin_settings.tooltips_hotspots, copy(tooltip,scene[get(linkedscene)].title); loadstyle(skin_tooltips); );"
           />

隱藏皮膚

<action name="startup" autorun="onstart">
    <!--添加代碼 隱藏皮膚 -->
    set(events[skin_events].name, null);
    for(set(i,0), i LT layer.count, inc(i), 
    copy(layername, layer[get(i)].name);
    subtxt(namestart, get(layername), 0, 5);
    if(namestart == 'skin_', removelayer(get(layername)); dec(i); );
  );
</action>

動態(tài)熱點

tour.xml 空白處的scene標簽的外面,添加動作代碼

<action name="do_crop_animation">
    <!-- 為熱點注冊屬性 -->
    registerattribute(xframes, calc((imagewidth / %1) BOR 0));
    registerattribute(yframes, calc((imageheight / %2) BOR 0));
    registerattribute(frames, calc(xframes * yframes));
    registerattribute(frame, 0);
 
    set(crop, '0|0|%1|%2');
 
    setinterval(calc('crop_anim_' + name), calc(1.0 / %3),
        if(loaded,
            inc(frame);
            if(frame GE frames, if(onlastframe !== null, onlastframe() ); set(frame,0); );
            mod(xpos, frame, xframes);
            div(ypos, frame, xframes);
            Math.floor(ypos);
            mul(xpos, %1);
            mul(ypos, %2);
            calc(crop, xpos + '|' + ypos + '|%1|%2');
          ,
            clearinterval(calc('crop_anim_' + name));
          );
      );
</action>

hotspotlayer 的代碼添加代碼录平, do_crop_animation(每幀寬,每幀高,fps)

url="explosion.png"  onloaded="do_crop_animation(100,100, 60)"

動態(tài)熱點添加始終顯示的文字

顯示 <scene> title 中的文字

<hotspot name="spot1" url="animatedhotspot_white.png" onloaded="do_crop_animation(64,64, 60);"   ath="-15" atv="-12" onclick="loadscene(get(linkedscene))" linkedscene="scene_01"/>

或者在 <hotpsot> text 中添加顯示自定義的文字

<hotspot name="spot1" url="animatedhotspot_white.png" onloaded="do_crop_animation(64,64, 60);"   ath="-15" atv="-12" onclick="loadscene(get(linkedscene))" text="自定義文字"/>

在熱點的 onload 事件中加上 add_all_the_time_tooltip()

onloaded="do_crop_animation(64,64, 60);add_all_the_time_tooltip()"

空白處加上 action

<action name="add_all_the_time_tooltip">
        txtadd(tooltipname, 'tooltip_', get(name));
        addplugin(get(tooltipname));
        txtadd(plugin[get(tooltipname)].parent, 'hotspot[', get(name), ']');
        set(plugin[get(tooltipname)].url,'%SWFPATH%/plugins/textfield.swf');
        set(plugin[get(tooltipname)].align,top);
        set(plugin[get(tooltipname)].edge,bottom);
        set(plugin[get(tooltipname)].x,0);
        set(plugin[get(tooltipname)].y,0);
        set(plugin[get(tooltipname)].autowidth,true);
        set(plugin[get(tooltipname)].autoheight,true);
        set(plugin[get(tooltipname)].vcenter,true);
        set(plugin[get(tooltipname)].background,true);
        set(plugin[get(tooltipname)].backgroundcolor,0x000000);
        set(plugin[get(tooltipname)].roundedge,5);
        set(plugin[get(tooltipname)].backgroundalpha,0.65);
        set(plugin[get(tooltipname)].padding,5);
        set(plugin[get(tooltipname)].border,false);
        set(plugin[get(tooltipname)].glow,0);
        set(plugin[get(tooltipname)].glowcolor,0xFFFFFF);
        set(plugin[get(tooltipname)].css,'text-align:center; color:#FFFFFF; font-family:MicrosoftYahei;  font-size:24px;');
        if(device.mobile,set(plugin[get(tooltipname)].css,'text-align:center; color:#FFFFFF; font-family:MicrosoftYahei; font-weight:bold; font-size:24px;');
            );
        set(plugin[get(tooltipname)].textshadow,0);
        set(plugin[get(tooltipname)].textshadowrange,6.0);
        set(plugin[get(tooltipname)].textshadowangle,90);
        if(text == '' OR text === null,
        copy(plugin[get(tooltipname)].html,scene[get(linkedscene)].title),
        copy(plugin[get(tooltipname)].html,text)
        );    
        set(plugin[get(tooltipname)].enabled,false);    
</action>

熱點和或圖層在鼠標點擊或鼠標懸停時進入動態(tài)模式

<action name="do_crop_animation_onclick">   
        if(hotspot[get(name)].animated === null OR hotspot[get(name)].animated == false,
            set(hotspot[get(name)].animated,true);
            setinterval(calc('crop_anim_' + name), calc(1.0 / %3),          
                    inc(frame);
                    if(frame GE frames, if(onlastframe !== null, onlastframe() ); set(frame,0); );
                    mod(xpos, frame, xframes);
                    div(ypos, frame, xframes);
                    Math.floor(ypos);
                    mul(xpos, %1);
                    mul(ypos, %2);
                    calc(crop, xpos + '|' + ypos + '|%1|%2');                           
              );
              ,
            set(hotspot[get(name)].animated,false);  
            clearinterval(calc('crop_anim_' + name));
            set(crop, '0|0|%1|%2'); 
          );
</action>
 
<action name="do_crop_animation_register">
        registerattribute(xframes, calc((imagewidth / %1) BOR 0));
        registerattribute(yframes, calc((imageheight / %2) BOR 0));
        registerattribute(frames, calc(xframes * yframes));
        registerattribute(frame, 0);
        set(crop, '0|0|%1|%2'); 
</action>
 
 
 
<!-- example hotspots -->
<hotspot name="spot1" url="animatedhotspot_white.png" 
        onover="do_crop_animation_onclick(64,64,60)" onout="do_crop_animation_onclick(64,64,60)"   ath="-15" atv="-12" onloaded="do_crop_animation_register(64,64)" />
 
<hotspot name="spot1" url="animatedhotspot_white.png" 
        onclick="do_crop_animation_onclick(64,64,60)"  ath="-15" atv="-12" onloaded="do_crop_animation_register(64,64)" />

以上代碼執(zhí)行了一次動態(tài)循環(huán)后麻车,序列圖停留在第一幀,如果只是需要執(zhí)行一次動態(tài)循環(huán)斗这,并且序列圖停留在最后一幀的話,那么 do_crop_animation_onclick 需更改(區(qū)別就是 frame 這個變量沒有重置為 0 啤斗,并且沒有重新設(shè)置 crop

<action name="do_crop_animation_onclick"> 
    if(hotspot[get(name)].animated === null OR hotspot[get(name)].animated == false,
        set(hotspot[get(name)].animated,true);
      setinterval(calc('crop_anim_' + name), calc(1.0 / %3),  
 
          inc(frame);
          if(frame GE frames, if(onlastframe !== null, onlastframe() ); add(frame,frames,-1); );
          mod(xpos, frame, xframes);
          div(ypos, frame, xframes);
          Math.floor(ypos);
          mul(xpos, %1);
          mul(ypos, %2);
          calc(crop, xpos + '|' + ypos + '|%1|%2');               
        );
        ,
        set(hotspot[get(name)].animated,false);  
      clearinterval(calc('crop_anim_' + name));
     
      );
</action>

拖拽熱點

<hotspot/> 中添加代碼

    ondown="draghotspot();"

添加 action 代碼

    <action name="draghotspot">
        spheretoscreen(ath, atv, hotspotcenterx, hotspotcentery, 'l');
        sub(drag_adjustx, mouse.stagex, hotspotcenterx);
        sub(drag_adjusty, mouse.stagey, hotspotcentery);
        asyncloop(pressed,
            sub(dx, mouse.stagex, drag_adjustx);
            sub(dy, mouse.stagey, drag_adjusty);
            screentosphere(dx, dy, ath, atv);
          );
    </action>

添加簡單的全景視頻

viewer/examples/videopano 中復(fù)制 vtourskin.xml表箭,在主xml 添加代碼

    <scene name="videopano" title="戶外全景視頻">
        <!-- include the videoplayer interface / skin (with VR support) -->
        <include url="skin/videointerface.xml" />

        <!-- include the videoplayer plugin -->
        <plugin name="video"
                url.html5="%SWFPATH%/plugins/videoplayer.js"
                url.flash="%SWFPATH%/plugins/videoplayer.swf"
                pausedonstart="true"
                loop="true"
                volume="1.0"
                onloaded="add_video_sources();"
                />

        <!-- use the videoplayer plugin as panoramic image source -->
        <image>
            <sphere url="plugin:video" />
        </image>

        <!-- set the default view -->
        <view hlookat="0" vlookat="0" fovtype="DFOV" fov="130" fovmin="75" fovmax="150" distortion="0.0" />

        <!-- add the video sources and play the video -->
        <action name="add_video_sources">
            videointerface_addsource('1024x512', '%CURRENTXML%/video/video-1024x512.mp4|%CURRENTXML%/video/video-1024x512.webm|%CURRENTXML%/video/iphone-audio.m4a', '%CURRENTXML%/video/video-1024x512-poster.jpg');
            videointerface_addsource('1920x960', '%CURRENTXML%/video/video-1920x960.mp4|%CURRENTXML%/video/video-1920x960.webm|%CURRENTXML%/video/iphone-audio.m4a', '%CURRENTXML%/video/video-1920x960-poster.jpg');
            
            if(device.ios,
                <!-- iOS Safari has a very slow 'video-to-webgl-texture' transfer, therefore use a low-res video by default -->
                videointerface_play('1024x512');
              ,
                videointerface_play('1920x960');
              );
        </action>
    </scene>

添加雨雪特效

  1. 添加文件 [http://pan.baidu.com/s/1gfLTx6N][snow] 密碼:6shh

  2. viewer\plugins 拷貝 snow.swfsnow.js

  3. 添加 <scene onstart="snowballs();">

    目前可選的特效

    • 默認雪 onstart='defaultsnow();'
    • 雪球 onstart='snowball();'
    • 雪花 onstart='snowflakes();'
    • 銀色星星 onstart='silverstars();'
    • 金色星星 onstart='goldenstars();'
    • 心形 onstart='hearts();'
    • 笑臉 onstart='smileys();'
    • onstart='money();'
    • onstart='rain();'
    • 大雨 onstart='heavyrain();'
  4. <scene> 添加代碼

<include url="snow.xml" />

自動旋轉(zhuǎn)

添加代碼

<autorotate enabled="true"
waittime="5.0"
speed="-3.0"
horizon="0.0"
tofov="120.0"
/>
  • waittime 代表在最近一次用戶交互行為之后要開始自動旋轉(zhuǎn)之前的等待時間。以秒為單位钮莲。
  • speed 為旋轉(zhuǎn)速度免钻。當該數(shù)值為正值時向右旋轉(zhuǎn),為負值時向左旋轉(zhuǎn)崔拥。
  • horizon 為場景在自動旋轉(zhuǎn)時將達到的水平位置极舔。
  • tofov 為旋轉(zhuǎn)中要達到的視場角。

無按鈕控制的自動旋轉(zhuǎn)

自動旋轉(zhuǎn)場景链瓦,場景旋轉(zhuǎn)一圈后自動進入下一個場景拆魏,最后一個場景瀏覽結(jié)束后,進入第一個場景慈俯。需添加如下代碼:

<autorotate enabled="true"
waittime="5.0"
speed="-3.0"
horizon="0.0"
tofov="120.0"
/>

修改 <action name="startup/> 中的代碼

<action name="startup">
if(startscene === null, copy(startscene,scene[0].name));
loadscene(get(startscene), null, MERGE);
if(autorotate.enabled,bombtimer(0));
</action>

xml 文件中加入下面的代碼

<events onmousedown="set(bt,0);" />
<action name="bombtimer">
set(autorotate.enabled,true);
set(bt,%1);
add(bt,1);
delayedcall(1, bombtimer(get(bt)));
copy(bt_1,autorotate.speed);
Math.abs(bt_1);
div(bt_2,360,bt_1);
add(bt_2,autorotate.waittime);
if(bt GE bt_2, set(bt,0); nextscene(););
</action>
<action name="nextscene">
set(ns, get(scene[get(xml.scene)].index));
set(maxs, get(scene.count));
add(ns,1);
if(ns == maxs, set(ns,0));
loadscene(get(scene[get(ns)].name), null, MERGE, BLEND(1.5));
</action>

按鈕控制的自動旋轉(zhuǎn)

添加代碼

<autorotate enabled="true"
waittime="5.0"
speed="-3.0"
horizon="0.0"
tofov="120.0"
/>

在對應(yīng)的按鈕渤刃,通常為 <layer> 標簽中找到 onclick 屬性替換,如果沒有則直接添加

<layer ... onclick="switch(autorotate.enabled);" ... />

添加陀螺儀

加載插件

<plugin name="gyro" devices="html5"
            url="%SWFPATH%/plugins/gyro2.js"
            enabled="false"
                onavailable="gyro_available_info();"
            />
 
<action name="gyro_available_info">
        set(layer[gyrobutton].visible, true);
</action>

控制按鈕

<layer name="gyrobutton" url="gyroicon.png" scale="0.5" align="right" x="10" visible="false" 
               onclick="switch(plugin[gyro].enabled);"
               />

默認皮膚開啟陀螺儀功能(在 tour.xmlskin_settings中設(shè)置)

gyro="true"

tour.xmlinclude 的下一行添加

<plugin name="skin_gyro" enabled="true"/>

場景過渡效果

修改全部過渡效果贴膘,只需修改 <skin_settings />中以下代碼

loadscene_blend="OPENBLEND(0.5, 0.0, 0.75, 0.05, linear)"
loadscene_blend_prev="SLIDEBLEND(0.5, 180, 0.75, linear)"
loadscene_blend_next="SLIDEBLEND(0.5,   0, 0.75, linear)"

如果想為某個特殊的 loadscene 動作加上不一樣的過渡效果卖子,在主 xmlscene 外加入以下代碼

<blendmodes name="no blending"       description="無過渡效果"  blend="NOBLEND" />
<blendmodes name="simple crossblending" description="簡單淡入淡出" blend="BLEND(1.0, easeInCubic)" />
<blendmodes name="zoom blend"        description="縮放過渡"  blend="ZOOMBLEND(2.0, 2.0, easeInOutSine)" />
<blendmodes name="black-out"         description="黑場過渡"  blend="COLORBLEND(2.0, 0x000000, easeOutSine)" />
<blendmodes name="white-flash"       description="白場過渡"  blend="LIGHTBLEND(1.0, 0xFFFFFF, 2.0, linear)" />
<blendmodes name="right-to-left"     description="從右至左"  blend="SLIDEBLEND(1.0, 0.0, 0.2, linear)" />
<blendmodes name="top-to-bottom"     description="從上至下"   blend="SLIDEBLEND(1.0, 90.0, 0.01, linear)" />
<blendmodes name="diagonal"          description="對角線"     blend="SLIDEBLEND(1.0, 135.0, 0.4, linear)" />
<blendmodes name="circle open"       description="圓形展開"      blend="OPENBLEND(1.0, 0.0, 0.2, 0.0, linear)" />
<blendmodes name="vertical open"     description="垂直展開"     blend="OPENBLEND(0.7, 1.0, 0.1, 0.0, linear)" />
<blendmodes name="horizontal open"   description="水平展開"    blend="OPENBLEND(1.0, -1.0, 0.3, 0.0, linear)" />
<blendmodes name="elliptic + zoom"   description="橢圓縮放"      blend="OPENBLEND(1.0, -0.5, 0.3, 0.8, linear)" />

修改loadscene(scenename, null, MERGE, get(blendmodes[black-out].blend));

<hotspot onclick="loadscene(scene_shuilifang, null, MERGE, get(blendmodes[vertical open].blend));" />

隱藏顯示熱點

添加 <action>

<action name="hideBox">
  tween(%1.alpha,0,0.5);
  wait(1);
  set(%1.visible,false);
</action>

<action name="showBox">
  set(%1.alpha,0);
  set(%1.visible,true);
  tween(%1.alpha,1,0.5);
  tween(%1.scale,1,0.5,easeOutBack);
</action>

使用

<hotspot name="spot1" style="skin_hotspotstyle" ath="46.131" atv="24.389" visible="true" onclick="spot1Click" />
<action name="spot1Click">
    hideBox(hotspot[spot1]);
</action>

獲取全景視頻進度

<!-- 獲取視頻進度 -->
<action name="get_video_time">
  setinterval(skin_video_seek_updates0, 0.1, skin_video_updatetime0())
</action>

<action name="skin_video_updatetime0">
  setStop(4,video_pause_events(););
</action >
        
<action name="setStop">
  copy(t1, plugin[video].time);
  if(t1 GT %1,%2);
</action>
 
<!-- 視頻暫停回調(diào) -->
<action name="video_pause_events">
  plugin[video].pause();
  clearinterval(skin_video_seek_updates0);
</action>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刑峡,一起剝皮案震驚了整個濱河市洋闽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌突梦,老刑警劉巖诫舅,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡粗卜,警方通過查閱死者的電腦和手機刀森,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門杠览,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俏讹,“玉大人当宴,你說我怎么就攤上這事≡蠼” “怎么了户矢?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長殉疼。 經(jīng)常有香客問我梯浪,道長,這世上最難降的妖魔是什么瓢娜? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任挂洛,我火速辦了婚禮,結(jié)果婚禮上眠砾,老公的妹妹穿的比我還像新娘虏劲。我一直安慰自己,他們只是感情好褒颈,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布柒巫。 她就那樣靜靜地躺著,像睡著了一般谷丸。 火紅的嫁衣襯著肌膚如雪堡掏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天刨疼,我揣著相機與錄音泉唁,去河邊找鬼。 笑死币狠,一個胖子當著我的面吹牛游两,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漩绵,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼贱案,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了止吐?” 一聲冷哼從身側(cè)響起宝踪,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碍扔,沒想到半個月后瘩燥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡不同,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年厉膀,在試婚紗的時候發(fā)現(xiàn)自己被綠了溶耘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡服鹅,死狀恐怖凳兵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情企软,我是刑警寧澤庐扫,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站仗哨,受9級特大地震影響形庭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厌漂,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一萨醒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苇倡,春花似錦验靡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽高职。三九已至钩乍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怔锌,已是汗流浹背寥粹。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留埃元,地道東北人涝涤。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像岛杀,于是被迫代替她去往敵國和親阔拳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理类嗤,服務(wù)發(fā)現(xiàn)糊肠,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,787評論 25 707
  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,333評論 7 249
  • 可能是本性中就有吃貨的屬性吧弧圆,一直關(guān)注央視的《舌尖上的中國》系列節(jié)目赋兵,在“秘境篇”中看到了關(guān)于蕨菜的片段,節(jié)目...
    一路行吟閱讀 1,720評論 0 4
  • iOS專題2:靜態(tài)庫和動態(tài)庫詳解 動態(tài)庫與靜態(tài)庫優(yōu)缺點比較 靜態(tài)庫和動態(tài)庫的framework長得不一樣 fram...
    楊大蝦閱讀 410評論 0 0