发现3 .js与Android和英特尔XDK
Introduction 本文是关于使用Intel XDK和three.js开发android应用程序的。它将概述如何使用这个奇妙的工具开发基于GUI的Android架构的应用程序。 背景 这是Android平台的新产品 在过去的15个月里,我一直在为Windows桌面开发应用程序,所以我对Android平台非常陌生。所以当我探索Android的未知世界时,这种体验对我来说是全新的,我所介绍的东西可能并不新鲜,但我已经尝试过了 为什么选择Intel XDK 我对HTML的知识很少,我打算使用IDE,我可以实现我的HTML技能。整个IDE的经验对我来说是全新的,因为我没有使用过一次Intel XDK。它是一个基于云的IDE,要求您在创建用于发布的包的整个过程中始终连接到internet。英特尔XDK的优点是你不需要配置Android ADT bundle,它有一个内置的模拟器来测试你的应用。这里你有选择从不同的形式因素,如谷歌Nexus 4和谷歌Nexus 7,联想K900等。我发现的缺点是,如果您在IDE上工作了很长时间,那么IDE有时会冻结。在这些times 我不得不重新启动IDE,然后重新开始我的工作。总的来说,我使用Intel XDK的经验还不错,因为我在开发应用程序时几乎没有遇到什么麻烦。 探索Three.js Three.js ! !事实上,当我在网上搜索一些基于实例的处理时,我开始喜欢上它了。本质上是另一个有创造力的编码者的喜悦(http://threejs.org/)它有很多由WebGL提供的选项,本质上是有帮助的。创建伟大的外观GUI应用程序和乐趣。开放源码,有很多例子可以使用。你在为Android开发时需要注意的是不是所有的浏览器都支持WebGL在那种情况下你需要做的是使用画布渲染器在你的路上。 什么是英特尔XDK? Intel XDK是用于在开发环境中开发可靠HTML 5的跨平台IDE,您可以在连接到internet时更新代码。创建应用程序后,可以将其分发到不同的平台。Android应用程序也可以通过同样的方式创建,在build选项中可以创建apk。这个IDE能够编写一次代码并将其分发到不同的平台。在新的更新的XDK有人行横道构建选项的android目前还处于测试阶段,它可以帮助您移植本地功能的html 5、JavaScript和CSS 3应用程序。在开发阶段,您可以使用模拟器测试应用程序的不同形式因素。总而言之,它是一个开发和发布HTML 5应用程序的伟大平台。 下载链接,http://xdk-software.intel.com/index.html 循序渐进的过程下载Intel XDK的数据 下一步将检测你的OS 保存文件和exe将被保存。按照下面提到的步骤安装和启动exe Intel XDK和Android项目的项目生命周期如下所示 当您打开Intel XDK时,您将看到一个选项来启动一个新项目。在这里,您可以使用空白模板重新开始,或者重用任何演示并修改它。可用的选项有 i)从一个空白项目开始导入一个现有的应用:-这里你可以移植旧的应用程序与XDK的,PhoneGap应用程序,AppMobapps,基于HTML 5 api的应用程序,但不能移植Java应用程序。应用程序设计器允许你使用应用程序框架,BootStrap API,jQuery Mobile或Top Coat来启动项目。 由于我们的目标是Three.js,我们将使用一个演示,也交叉走演示和修改演示插入额外的代码,在index.html文件,并添加所需的Three.js文件。在英特尔的网站http://software.intel.com/en-us/html5/articles/crosswalk-applicationruntime中有一个很好的信息来解释和概述人行横道的运行时间 Three.js是什么? js是一个使WebGL(浏览器中的3D)变得非常简单的库。在WebGL中,一个简单的立方体会产生数百行JavaScript和着色器代码,而3 .js的等效物只是其中的一小部分。js是一个轻量级的跨浏览器JavaScript库/API,用于在Web浏览器上创建和显示三维计算机图形动画。 开始一个新的 Decoding 其中一个例子是从GITHUB创建一个新的apk。Three.js的创始人做了非常出色的感谢他们,我使用其中一个例子来开始。 https://github.com/mrdoob/three.js/blob/master/examples/canvas_interactive_voxelpainter.html, 打开Intel xdk点击项目点击开始一个新的项目 单击Work演示 选择人行横道并点击下一步 , 点击创建。当项目创建时,您将收到一条祝贺信息 根据你的喜好变化html页面,因为它将反映在应用程序和 还要添加所需的JavaScript。 根据你的喜好来改变。html页面,因为它将反映主要的变化,在应用程序,也增加了Three.js JavaScript需要只, , 仔细看看index.html页面 根据链接:-http:// aerotwist.com/tutorials/getting-staring-with-threjs/ 我已经提出了一个flow index.html页面,它将在下面进行描述 让我们看看索引的流程。文件在英特尔XDK , 修改了index.html文件,并在threejs文件夹中添加了所需的js文件(您需要 从项目的Windows目录结构中访问文件,然后手动添加文件。在我的情况下,我手动将文件添加到主项目文件夹E: IntelXDK_Projects\eXAMPLE2\threejs)你需要点击仿真(你可以从许多模拟器中选择来检查这个项目) 构建过程 这里是apk创建的主要操作。Build菜单提供了在多个平台上发布应用程序的所有选项。在这里,你可以编辑你想要添加到应用程序中的资产和图像。对于Android有两个选项 Android:安康;你创建了正常的APK,你可以分配…,,Android人行横道(正在测试阶段):-这是一个创建人行横道运行时Android APK的版本,你可以选择为基于ARM的设备或X86架构构建它。, 构建过程figures 您将看到将要创建的构建。你现在需要点击build app , 下一幅图显示了构建过程 你会得到一个信息,构建是成功的。 更改应用程序开发流程的整个过程发生在index.html页面上。这里的任何更新都反映了变化和整个流程的变化。对index.html页面进行更改,并包含必要的三个.js文件。调整GITHUB中的代码将帮助您进行探索。也有一个人行横道构建,允许创建x86或ARM架构的包,它在beta阶段,但你可以尝试这个构建。 根据链接:- http://aerotwist.com/tutorials/getting-stard-with-threjs/ 我已经使用了描述并展示了它如何在Intel XDK中创建一个Android应用程序 解析index.html页面(创建一个新项目) 对索引所做的任何更改。html实际上反映了应用程序最终的样子。因此,我们需要包括三个。js文件,以及整个逻辑需要实现在这里。我深入挖掘了three.js的GITHUB库,并检查了哪些示例可以在上面工作,并将其带到Intel XDK中,最终从中制作出apk。因此,我所做的就是对index.html页面进行分解,并对其进行修改,以获得项目的正确视图。在学习方面,我从https://github.com/mrdoob/three.js/ repository获得了帮助。它在探索three.js时非常有用。这个库的主要贡献者是Droob先生https://github.com/mrdoob和theo-armour https://github.com/theo-armour。出于对这些人的尊重(他们在Three.js中已经做得很好了),我正在导出这些知识库来学习、分享和贡献。, 让我们Start 为了更兼容不同的移动平台,我们需要声明viewport与设备的宽度高度。, 设备宽度允许根据改变的设备调整,无论是平板电脑还是不同模式的手机。 declaration , 隐藏,复制Code
<metaname="viewport"width,user-scalable=no, minimum-scale=1.0, maxcontent="width=device-imum-scale=1.0">
这也意味着当我们改变设备的方向时,它会提供一个正确的应用程序访问。 标签的样式 样式标签允许如何将应用程序呈现给设备。下面的修改显示了该应用程序的外观。现在在这个项目中,我们根据需要修改样式标签 隐藏,复制Code
<style>
body {
font-family: Monospace;
background-color: #f0f0f0;
margin: 0px;
overflow: hidden;
}
</style>
为了使重新加载更容易,我们必须一次又一次地重新加载页面,我们在html的头标签中包括了three.min.js,包括脚本标签中的脚本 隐藏,复制Code
<script></script>
由于我们在正文中包含了three.js脚本标签,所以我们允许重要的动作在three.min.js脚本中执行。这里是实现three.js的逻辑,因此我们需要将其包含到head标签中。, 现在轮到intilaizatioof的变量或实现的方式,3D GUI结构将表现,我们实现动画susch作为对象运动的交互,接近对象或移出,我们sta通过调用init()方法。 在3 .js脚本的入口点,我们需要附加元素和chid行为。为了让几何图形工作,我们需要实现变量和它们的实现逻辑。 当我们遇到Three.js脚本时,我们看到它本质上是一个涉及到的3D gui描述 场景、摄像机、投影仪、渲染器和对象。 js脚本中的某些修改允许实现平面几何图形。面对法线,我们使用var normalMatrix= new three . matrix (); 为了用相机透视创建阴影效果,我们使用了这个 相机= new THREE.perspectiveCamera ();,修改自定义网格需要改变几何形状,因此我们做如下操作 隐藏,收缩,复制Code
var size = 500, step = 50;
var geometry = new THREE.Geometry();
for ( var i = - size; i <= size; i+= step ){geometry.vertices.push(newTHREE.Vector3(-size,0,i));geometry.vertices.push(newTHREE.Vector3(size,0,i));geometry.vertices.push(newTHREE.Vector3(i,0,-size));geometry.vertices.push(newTHREE.Vector3(i,0,size));}varmaterial= new THREE.LineBasicMaterial({color:0x000000,opacity:0.2});varline= new THREE.Line(geometry,material);line.type= THREE.LinePieces;
scene.add(line);
我们使用投影仪来改变对象的行为,也实现了鼠标移动和选择特定的对象。这也有助于在屏幕空间中的投影。 光线反射以及环境光效果在这些代码行中得到控制。这也显示了如何照明效果将是。 隐藏,复制Code
//
// var ambientLight = new THREE.AmbientLight( 0x606060 );
//
看一下变量声明 ,目标= new THREE.Vector3 (0200 0); 在上面的声明中,我们声明了一个3D向量。三维矢量通常是具有大小和方向的几何量 var normalMatrix = new三人。矩阵3 (); 它是一个3*3矩阵。 为了进行投影,我们使用了鼠标2D和鼠标3D 更多的修改和整个html代码如下所示。创建一个网格,你可以放置盒子。和设计。这是一个从https://github.com/mrdoob/three.js/修改的导出 隐藏,收缩,复制Code
<!DOCTYPEhtml>
<htmllang="en">
<head>
<title>three.js canvas - interactive - voxel painter</title>
<metacharset="utf-8">
<metaname="viewport"content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<style>
body {
font-family: Monospace;
background-color: #f0f0f0;
margin: 0px;
overflow: hidden;
}
</style>
</head>
<body>
<scriptsrc="../build/three.min.js"></script>
<scriptsrc="js/libs/stats.min.js"></script>
<script>
var container, stats;
var camera, scene, renderer;
var projector, plane;
var mouse2D, mouse3D, raycaster, theta = 45,
isShiftDown = false, isCtrlDown = false,
target = new THREE.Vector3( 0, 200, 0 );
var normalMatrix = new THREE.Matrix3();
var ROLLOVERED;
init();
animate();
function init() {
container = document.createElement( 'div' );
document.body.appendChild( container );
var info = document.createElement( 'div' );
info.style.position = 'absolute';
info.style.top = '10px';
info.style.width = '100%';
info.style.textAlign = 'center';
info.innerHTML = '<a href="http://threejs.org" target="_blank">three.js</a> - voxel painter<br><strong>click</strong>: add voxel, <strong>control + click</strong>: remove voxel, <strong>shift</strong>: rotate, <a href="javascript:save()">save .png</a>';
container.appendChild( info );
camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.y = 800;
scene = new THREE.Scene();
// Grid
var size = 500, step = 50;
var geometry = new THREE.Geometry();
for ( var i = - size; i <= size; i += step ) {
geometry.vertices.push( new THREE.Vector3( - size, 0, i ) );
geometry.vertices.push( new THREE.Vector3( size, 0, i ) );
geometry.vertices.push( new THREE.Vector3( i, 0, - size ) );
geometry.vertices.push( new THREE.Vector3( i, 0, size ) );
}
var material = new THREE.LineBasicMaterial( { color: 0x000000, opacity: 0.2 } );
var line = new THREE.Line( geometry, material );
line.type = THREE.LinePieces;
scene.add( line );
//
projector = new THREE.Projector();
plane = new THREE.Mesh( new THREE.PlaneGeometry( 1000, 1000 ), new THREE.MeshBasicMaterial() );
plane.rotation.x = - Math.PI / 2;
plane.visible = false;
scene.add( plane );
mouse2D = new THREE.Vector3( 0, 10000, 0.5 );
// Lights
var ambientLight = new THREE.AmbientLight( 0x606060 );
scene.add( ambientLight );
var directionalLight = new THREE.DirectionalLight( 0xffffff );
directionalLight.position.x = Math.random() - 0.5;
directionalLight.position.y = Math.random() - 0.5;
directionalLight.position.z = Math.random() - 0.5;
directionalLight.position.normalize();
scene.add( directionalLight );
var directionalLight = new THREE.DirectionalLight( 0x808080 );
directionalLight.position.x = Math.random() - 0.5;
directionalLight.position.y = Math.random() - 0.5;
directionalLight.position.z = Math.random() - 0.5;
directionalLight.position.normalize();
scene.add( directionalLight );
renderer = new THREE.CanvasRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild(renderer.domElement);
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
container.appendChild( stats.domElement );
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
document.addEventListener( 'mousedown', onDocumentMouseDown, false );
document.addEventListener( 'keydown', onDocumentKeyDown, false );
document.addEventListener( 'keyup', onDocumentKeyUp, false ); //
window.addEventListener( 'resize', onWindowResize, false ); }
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
}
function onDocumentMouseMove( event ) {
event.preventDefault();
mouse2D.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse2D.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
var intersects = raycaster.intersectObjects( scene.children );
if ( intersects.length > 0 ) {
if ( ROLLOVERED ) ROLLOVERED.color.setHex( 0x00ff80 );
ROLLOVERED = intersects[ 0 ].face;
ROLLOVERED.color.setHex( 0xff8000 )
}
}
function onDocumentMouseDown( event ) {
event.preventDefault();
var intersects = raycaster.intersectObjects( scene.children );
if ( intersects.length > 0 ) {
var intersect = intersects[ 0 ];
if ( isCtrlDown ) {
if ( intersect.object != plane ) {
scene.remove( intersect.object );
}
} else {
normalMatrix.getNormalMatrix( intersect.object.matrixWorld );
var normal = intersect.face.normal.clone();
normal.applyMatrix3( normalMatrix ).normalize();
var position = new THREE.Vector3().addVectors( intersect.point, normal );
var geometry = new THREE.CubeGeometry( 50, 50, 50 );
for ( var i = 0; i < geometry.faces.length; i ++ ) {
geometry.faces[ i ].color.setHex( 0x00ff80 );
}
var material = new THREE.MeshLambertMaterial( { vertexColors: THREE.FaceColors } );
var voxel = new THREE.Mesh( geometry, material );
voxel.position.x = Math.floor( position.x / 50 ) * 50 + 25;
voxel.position.y = Math.floor( position.y / 50 ) * 50 + 25;
voxel.position.z = Math.floor( position.z / 50 ) * 50 + 25;
voxel.matrixAutoUpdate = false;
voxel.updateMatrix();
scene.add( voxel );
}
}
}
function onDocumentKeyDown( event ) {
switch( event.keyCode ) {
case 16: isShiftDown = true; break;
case 17: isCtrlDown = true; break;
}
}
function onDocumentKeyUp( event ) {
switch( event.keyCode ) {
case 16: isShiftDown = false; break;
case 17: isCtrlDown = false; break;
}
}
function save() {
window.open( renderer.domElement.toDataURL('image/png'), 'mywindow' );
return false;
}
//
function animate() {
requestAnimationFrame( animate );
render();
stats.update();
}
function render() {
if ( isShiftDown ) {
theta += mouse2D.x * 3;
}
camera.position.x = 1400 * Math.sin( theta * Math.PI / 360 );
camera.position.z = 1400 * Math.cos( theta * Math.PI / 360 );
camera.lookAt( target );
raycaster = projector.pickingRay( mouse2D.clone(), camera );
renderer.render( scene, camera );
}
</script>
</body>
</html>
项目在模拟器中的样子 , 在实验之后,我们看到在index.html中添加简单的修改和添加必需的3 .js文件会给你一些很酷的gui效果,你可以在你的项目中使用。 js有无限的可能性,因为你也可以用它来开发游戏。js是一个优秀的WebGL工具,可以帮助您以一种创新的方式探索3D GUI应用程序。 现在,当您结合Intel XDK IDE时,您可以使用它创建一些很棒的APK。 Nexus7 模拟器图片 这篇文章是一篇文章展示了如何使用Intel XDK IDE开发基于GUI的WebGL Android应用程序。在整个项目过程中需要互联网连接。随着我学到的更多,我将努力做出更多的贡献。GITHUB repository for Three.js https://github.com/mrdoob/three.js检查示例和实验。我很喜欢修改代码。 参考文献 http://aerotwist.com/tutorials/getting -开始- - - - - - -三- js/ http://threejs.org/docs/ http://xdk——software.intel.com/ http://learningthreejs.com/ http://code.tutsplus.com/tutorials/webgl - - threejs -基础-网- 35688 - http://blog.teamtreehouse.com/the初学者指南-三- js http://www.johannes raida.de/tutorials/three.js/tutorial02/tutorial02.htm http://en.wikipedia.org/wiki/main_page https://github.com/mrdoob/three.js/ ,好的资源 你会学到很多东西,并从中获得知识。StackOverflow的3 .js问题 http://stackoverflow.com/search?q=Three.js, 英特尔XDK文档 http://software.intel.com/en-us/html5/articles/xdkdocs, Three.js文档 http://threejs.org/docs/,, 的兴趣点 我已经花了很多时间学习three.js和Intel XDK,这是唯一的机会来分享我所学到的文章。对于为Android和其他架构构建HTML 5应用程序,Intel XDK是一个非常有用的工具。英特尔还包含了一个构建的人行横道Android beta构建,用于创建基于WebGl的Android项目和其他Android目标构建 历史 第一篇文章更新了代码和APK的 本文转载于:http://www.diyabc.com/frontweb/news30211.html
发现3 .js与Android和英特尔XDK的更多相关文章
- 探索与英特尔XDK
下载Geolocation.rar - 6.3 KB 下载Abhishek3.rar - 425.1 KB 下载Abhishek3.crosswalk.x86.20140824201436.rar - ...
- 什么是英特尔® Edison 模块?
英特尔® Edison 模块 是一种 SD 卡大小的微型计算芯片,专为构建物联网 (IoT) 和可穿戴计算产品而设计. Edison 模块内含一个高速的双核处理单元.集成 Wi-Fi*.蓝牙* 低能耗 ...
- 面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分
原文地址 目录 工具 Unity 分析器 GPA 系统分析器 GPA 帧分析器 如要充分发挥 x86 平台的作用,您可以在项目中进行多种性能优化,以最大限度地提升性能. 在本指南中,我们将展示 Uni ...
- [转帖]英特尔的 ME 或侵犯 Minix3 的自由软件许可证
英特尔的 ME 或侵犯 Minix3 的自由软件许可证 [日期:2017-12-11] 来源:Linux公社 作者:非非然 [字体:大 中 小] https://www.linuxidc.com/L ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- [转]JS调用Android里面的方法,Android调用JS里面的方法
FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...
- WebView中Js与Android本地函数的相互调用
介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...
- PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码
PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...
- js和android及ios交互
Android中Java和JavaScript交互 这种交互,Hybrid App 会用的比较多一点, 本文将介绍如何实现Java代码和Javascript代码的相互调用. Android提供了一个很 ...
随机推荐
- jkd1.8 stream
目录 Stream 创建流 通过集合创建,例如Map (常用) 通过数组方式创建 通过Stream静态方法创建 中间操作 筛选和切片 filter limit skip distinct 映射 map ...
- 分布式事务和分布式hash
分布式事务是什么? 分布式事务就是保证各个微服务之间数据一致,本质上就是保证不同数据库的数据一致性.一致性状态包含 强一致性,任何时刻,所有节点中数据都是一样的 弱一致性,数据更新后,只能访问到部分节 ...
- 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)
上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...
- Java获取CPU序列号
获取CPU序列号 /** * 获取CPU序列号 * @return */ public static String getCpuId() throws IOException { Process pr ...
- java-程序流程控制
判断结构 if(条件){}; if(条件){} else{ }; if(条件){}else{};格式类似3目运算:int a=2,b;b=(a>5)?7:8;这种格式比较简便 if(条件){ } ...
- jzoj 6798. 【2014广州市选day2】regions
Description 在平面上堆叠着若干矩形,这些矩形的四边与平面X坐标轴或Y坐标轴平行.下图展示了其中一种情况,3个矩形的边将平面划分成8个区域: 下面展示了另一种稍稍复杂一些的情况: 你的任务是 ...
- pthon中取整的几个方法round、int、math
取整的几种方法:1.四舍五入 round(x) 2.向下取整 int(x) 3.取商和余 4.向上取整,需要用到math.ceil(x)(可以理解成大于x且最接近x的整数)import math 5 ...
- Git使用教程与基本原理和Sourcetree基本使用探微
什么是GIT Git是一个强调速度的分布式版本控制软件和源代码管理系统(SCM,source code management).Git最初是由Linus Torvalds为内核开发而设计的管理软件.自 ...
- 想写一篇jvm的工具入门
为什么要写一个jvm的工具入门呢,一是自己也不会,二是因为不会所以想学一下,还有就是这个确实很重要,对学习jvm有很多的用处,对定位问题有很大的便利,以前毕业那会我记得有个笔试,知道JAVA_HOME ...
- JVM七大垃圾回收器下篇G1(Garbage First)
G1回收器:区域化分代式 既然我们已经有了前面几个强大的GC,为什么还要发布Garbage First (G1)GC? 原因就在于应用程序所应对的业务越来越庞大.复杂,用户越来越多,没有GC就不能保 ...