博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KRPano多屏互动原理
阅读量:5050 次
发布时间:2019-06-12

本文共 4293 字,大约阅读时间需要 14 分钟。

KRPano可以实现多个屏幕之间的同步显示,主要应用到Websocket技术进行通信。

 

在控制端,我们需要发送当前KRPano场景的实时的视角和场景信息,可以使用如下的代码:

embedpano({                swf: "tour.swf",                xml: "tour.xml",                target: "pano",                html5: "auto",                mobilescale: 1.0,                passQueryParameters: true,                onready: krpanoReady            });            function krpanoReady(krpano) {                krpano.call("trace(krpano is ready...)");                krpano.call("loadscene(scene_04, null, MERGE);")                initialWebSocket();            }            //实时发送KRPano的视角信息            function IntervalSendMessage() {                var krpano = document.getElementById("krpanoSWFObject");                if (krpano && krpano.get) {                    var hlookat = krpano.get("view.hlookat");                    var vlookat = krpano.get("view.vlookat");                    var fov = krpano.get("view.fov");                    var scene = krpano.get("xml.scene");                    var krObj = {                        hlookat: hlookat,                        vlookat: vlookat,                        fov: fov,                        scene: scene                    }                    ws.send(JSON.stringify(krObj));                }            }            var ws;            var WebSocketsExist;            function initialWebSocket() {                WebSocketsExist = true;                try {                    ws = new WebSocket("ws://localhost:8989/");                } catch (ex) {                    try {                        ws = new MozWebSocket("ws://localhost:8989/");                    } catch (ex) {                        WebSocketsExist = false;                    }                }                if (WebSocketsExist) {                    console.log("The current browser support websocket!");                } else {                    console.log("The current browser not support websocket!")                    return;                }                ws.onopen = WSonOpen;                ws.onmessage = WSonMessage;                ws.onclose = WSonClose;                ws.onerror = WSonError;            }            function WSonOpen() {                console.log("websocket opened success!");                setInterval(IntervalSendMessage, 50);            };            function WSonMessage(event) {                console.log(event.data);            };            function WSonClose() {                console.log("Websocket closed.");            };            function WSonError() {                console.log("Websocket error occur.");            };

 

在被控制端,我们需要实时接收控制端传过来的视角信息,并周期性更新当前的视角和场景。

embedpano({                swf: "tour.swf",                xml: "tour.xml",                target: "pano",                html5: "auto",                mobilescale: 1.0,                passQueryParameters: true            });            const WebSocket = require('ws');            const wss = new WebSocket.Server({                port: 8989            });            wss.on('connection', function connection(ws) {                ws.on('message', function incoming(message) {                    console.log('received: %s', message);                    krObj = JSON.parse(message);                    var hlookat = krObj.hlookat;                    var vlookat = krObj.vlookat;                    var fov = krObj.fov;                    var scene = krObj.scene;                    var krpano = document.getElementById("krpanoSWFObject");                    if (krpano && krpano.set) {                        krpano.call("loadscene(get(" + "scene_04" + "), null, MERGE);")                        krpano.set("view.hlookat", hlookat);                        krpano.set("view.vlookat", vlookat);                        krpano.set("view.fov", fov);                        if (krpano.get("xml.scene") !== scene) {                            //loadscene(get(startscene), null, MERGE);                            krpano.call("loadscene(" + scene + ", null, MERGE);")                        }                    }                });                ws.send('something');            });

 

如果被控制端(如网页)无法直接创建WebSocket.Server,可以使用中间服务器进行中转,控制端和被控制端都连接至中间服务器,中间服务器负责把控制端的状态信息发送给被控制端。

 

本博文发表于:

发布者:屠龙

转载请注明出处,谢谢!

转载于:https://www.cnblogs.com/reachteam/p/7152942.html

你可能感兴趣的文章
Swift 中的指针使用
查看>>
Swift - 使用闭包筛选过滤数据元素
查看>>
alue of type java.lang.String cannot be converted to JSONObject
查看>>
搜索引擎选择: Elasticsearch与Solr
查看>>
JAVA设计模式之简单工厂模式与工厂方法模式
查看>>
③面向对象程序设计——封装
查看>>
【19】AngularJS 应用
查看>>
Spring
查看>>
Linux 系统的/var目录
查看>>
Redis学习---Redis操作之其他操作
查看>>
WebService中的DataSet序列化使用
查看>>
BZOJ 1200 木梳
查看>>
【Linux】【C语言】菜鸟学习日志(一) 一步一步学习在Linxu下测试程序的运行时间...
查看>>
hostname
查看>>
SpringBoot使用其他的Servlet容器
查看>>
关于cookie存取中文乱码问题
查看>>
k8s架构
查看>>
select 向上弹起
查看>>
mysql 多表管理修改
查看>>
group by order by
查看>>