Node.js Leap Motion Hello World——开启AR的小窗
时间:2022-04-24
本文章向大家介绍Node.js Leap Motion Hello World——开启AR的小窗,主要内容包括Leap Motion Node.js 服务端、Leap Motion 浏览器访问、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
Leap Motion的官方已经有一个名为LeapJS的库,但是官方没有做好一个Node.js的Demo,有的都是Client Side的一些示例。
在最开始的时候给我造成了极大的困惑,我以为启动Leap Motion的应用就可以直接运行官方的Demo——在这个应用里会运行WebSocket的Server。
Leap Motion Node.js 服务端
这时候,我们需要一个简单的服务端代码来启动这个WebSocket Server。按照官方的node包,则是setupConnectionEvents。
首先,我们需要先初始化一个controller:
var leapjs = require('leapjs'),
controller = new leapjs.Controller({
frameEventName: 'animationFrame'
});
然后就是在启动和断开的时候打个Log
controller.on('connect', function (data) { console.log("Successfully connected.");
});
controller.on('streamingStarted', function (data) { console.log("A Leap device has been connected.");
});
controller.on('streamingStopped', function (data) { console.log("A Leap device has been disconnected.");
});
接着,就可以连接了:
controller.connect();
最后,我们就可以在浏览器上访问这个WebSocket Server了。
Leap Motion 浏览器访问
Leap Motion提供了leapjs,用于浏览器访问。如其源码所示,默认的端口是6437:
BaseConnection.prototype.getUrl = function() { return this.scheme + "//" + this.host + ":" + this.port + "/v" + this.opts.requestProtocolVersion + ".json";
}
BaseConnection.prototype.getScheme = function(){ return 'ws:'}
BaseConnection.prototype.getPort = function(){ return 6437}
接着,我们所需要做的就是创建一个web app。然后,先用官方的Demo:
Leap.loop({
hand: function(hand){ console.log( hand.screenPosition() );
}
}).use('screenPosition');
然后,启动Server,刷新浏览器,在Leap Motion上面动动,就会有下面的结果:
[-65.61160000000001, 160.66859999999997, 72.7992]
[-165.05679999999995, 172.716, 83.8854]
[-222.02319999999997, 157.9176, 83.9886]
[-270.48220000000003, 164.90820000000002, 86.7462]
[-319.08939999999996, 189.69539999999995, 86.4468]
[-347.6512, 236.19600000000003, 76.0038]
[-407.668, 261.657, 72.2484]
现在,我们就可以连接更多的东西~~。
- Nginx code 状态码说明
- Flash/Flex学习笔记(6):制作基于xml数据源的flv视频播放器
- proxy_pass根据path路径转发时的"/"问题记录
- 温故而知新:查看端口占用情况以及DOS中的管道操作/重定向操作
- Android新手之旅(7) RadioButton的自定义
- Flash/Flex学习笔记(4):如何打开网页及Get/Post数据
- Flash/Flex学习笔记(5):捕获摄像头(续)--在线抓屏并保存到客户端本地
- 分布式监控系统Zabbix--使用Grafana进行图形展示
- Silverlight在线创建PDF(支持中文)
- Flash/Flex学习笔记(3):动态添加组件
- Flash/Flex学习笔记(1):Hello World!
- 数据库常规操作
- 不伦不类的Action Script 3.0
- Asp.Net Mvc中的一些初级问题整理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 引入 SB Admin 2 作为后台管理系统主题
- Laravel Jetstream是什么以及如何入门?
- Bash基础训练指南
- 基于NodeJS从零构建线上自动化打包工作流
- 如何实现H5可视化编辑器的实时预览和真机扫码预览功能
- LeetCode67|二分查找
- LeetCode66|二叉树的最小深度
- LeetCode65|回文链表
- LeetCode64|茴香豆???
- WEB安全学习二、注入工具 sqlmap的使用
- LeetCode63|香山碧云寺云碧山香
- LeetCode62|数组形式的整数加法
- LeetCode61|字符串相加
- LeetCode60|反转字符串
- Python | Flask 解决跨域问题