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,可以使用中间服务器进行中转,控制端和被控制端都连接至中间服务器,中间服务器负责把控制端的状态信息发送给被控制端。

本博文发表于:http://www.krpano.tech/archives/534

发布者:屠龙

转载请注明出处,谢谢!

KRPano多屏互动原理的更多相关文章

  1. [Mugeda HTML5技术教程之16]案例分析:制作跨屏互动游戏

    本节我们将要做一个跨屏互动应用的案例分析,该应用时给一家商场做活动使用的,是一个跨屏爱消除游戏.PC端页面显示在连接在PC的大屏幕上,参与活动的玩家可以用自己的手机扫描PC端页面上的二维码,连接成功后 ...

  2. [Mugeda HTML5技术教程之12]制作跨屏互动应用

    mugeda动画平台还可以用来制作跨屏互动的动画应用,比如在PC端的大屏幕上显示动画的主界面,同时会显示出供手机扫描的二维码,手机扫描后会在手机上显示手机端动画界面.通过手机就可以和PC端的显示界面跨 ...

  3. U3D外包公司—北京动点(公司性质)承接U3D、Kinect、VR虚拟现实,增强现实,体感互动,大屏互动等各类外包

    unity3d外包就找动点软件承接虚拟现实项目外包 承接U3D.Kinect.VR虚拟现实,增强现实,体感互动,大屏互动等各类外包 联系请加QQ:372900288 联系电话:13911652504 ...

  4. H5单页面手势滑屏切换原理

    H5单页面手势滑屏切换是采用HTML5 触摸事件(Touch) 和 CSS3动画(Transform,Transition)来实现的,效果图如下所示,本文简单说一下其实现原理和主要思路. 1.实现原理 ...

  5. CSS-页面滑屏滚动原理

    现在的网站有的时候为了简洁就是很多的单页滑屏滚动介绍,主要呈现方式有两种,一种是整体的元素一直排列下去,假设有五个需要展示的全屏页面,那么高度是500%,只是展示100%,剩下的可以通过transfo ...

  6. web 多屏互动显示方案

    1 基于 local storage 实现的信息传递 相关插件 lsbridge.js https://github.com/krasimir/l... 且项目中有非常简单易懂的示例你需要了解的一些关 ...

  7. 解析电子墨水屏技术(工作原理与LCD的区别)【转】

    转自:https://blog.csdn.net/weixin_42509369/article/details/84646808 阅读电子书早已成为大家生活中一部分,方便轻巧的电子版书籍更便于携带, ...

  8. Android 长截屏原理

    https://android-notes.github.io/2016/12/03/android%E9%95%BF%E6%88%AA%E5%B1%8F%E5%8E%9F%E7%90%86/   a ...

  9. krpano下全屏后弹窗失效问题解决方法

    原因 krpano 自身的全屏仅全屏自身,以外的html效果将无法显示 解决方法 把全屏按钮换成浏览器自身的全屏效果 解决步骤 vtourskin.xml <layer name="n ...

  10. CDN技术详解及实现原理

    CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精 ...

随机推荐

  1. CF1583H Omkar and Tours 题解

    题意: 给定一个 \(n\) 个点的树,每条边有权值 \(t\) 和 \(c\).一条路径的权值为所经过节点的 \(\max(c)\). 每个点有权值 \(e\). 给出 \(q\) 个询问,每次询问 ...

  2. DHCP配置;DHCP Relay配置

    目录 DHCP 配置 实验拓扑 实验需求 实验步骤 1. 基于全局地址池的DHCP服务器给客户端分配IP地址 DHCP server 上配置如下 2. 在PC1上设置为DHCP自动获取方式,ipcon ...

  3. 华为云新一代分布式数据库GaussDB,给世界一个更优选择

    摘要:与伙伴一起,共建繁荣开放的GaussDB数据库新生态. 本文分享自华为云社区<华为云新一代分布式数据库GaussDB,给世界一个更优选择>,作者:华为云头条. 6月7日,在华为全球智 ...

  4. 基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

    最近得空学习了下uniapp结合vue3搭建跨端项目.之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发.随着vite.js破局出圈,越来越多的项目偏向于vue3开 ...

  5. postgresql json取值为何这么慢?

    一.缘起 慢sql分析,总行数80w+. 比较特殊的是:其中有个字段info是jsonb类型,写法:info::json->'length' as length 同样的查询条件查这个字段和不查这 ...

  6. 【了解LLM】——LoRA

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17470327.html 论文链接:link code: github 什么是LoRA LoRA,英文全称Low ...

  7. 深入浅出security学习笔记

    第一章 导入web和security依赖,然后默认提供了一个基于内存的UserDetailsServiceAutoConfiguration如下 会读取写入的user配置,SecurityProper ...

  8. Web网页音视频通话之Webrtc相关操作(二)

    效果图 HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. TCP和UDP的应用场景

    传输层的两个协议,TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议),有各自的应用场景. TCP ...

  10. Hexo博客Next主题配置加载优化性能提升

    主题源加载优化 把在NexT主题的_config.yml里面的: # Uri of fonts host. E.g. //fonts.googleapis.com (Default) host: 改为 ...