- 浏览: 310250 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
开发小菜:
支持IE9以下的吗?
HTML5+CSS3+JQuery打造自定义视频播放器 -
攻城使:
开发Html5必须得下载么,我用dw编写,把文件复制到myec ...
html5开发 myeclipse安装aptana插件 -
疾风鹰狼:
...
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码 -
sardodo:
你好,我想问下,导入例子中的.dae格式模型是可以看到旋转的小 ...
c3dl 初步认识 -
BIOHAZARDX:
下载学习,初学者膜拜一下。
html5 实现动画(三)
在上一个课程的基础上,我们掌握了在CopperCube里,如何建立基本的场景和物体。
在CopperCube中,建立一个平面、箱体、球体,保证箱体名为'cubeMesh1',球体名为'sphereMesh1',建立好的场景如下:
编写CopperLicht代码
像上一节教材那样,输出一个.ccbjs文件到CopperLicht,保存Coppercube文件,发布场景为WebGL:Tools -> Test as JavaScript/WebGL,用网页编辑器打开新生成的.html文件,代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript" src="copperlichtdata/copperlicht.js"></script>
</head>
<body>
<div align="center">
<canvas id="3darea" width="640" height="480" style="background-color:#000000">
</canvas>
</div>
<script type="text/javascript">
<!--
startCopperLichtFromFile('3darea', 'copperlichtdata/tutorial-2.ccbjs');
-->
</script>
</body>
</html>
复制代码
把原来的startCopperLichtFromFile部分代码替换为如下代码:
<script type="text/javascript">
<!--
var engine = startCopperLichtFromFile('3darea', 'copperlichtdata/tutorial-2.ccbjs');
var cubeSceneNode = null;
// this is called when loading the 3d scene has finished
engine.OnLoadingComplete = function()
{
var scene = engine.getScene();
if (scene)
{
// find the cube scene node
cubeSceneNode = scene.getSceneNodeFromName('cubeMesh1');
// also, force the 3d engine to update the scene every frame
scene.setRedrawMode(CL3D.Scene.REDRAW_EVERY_FRAME);
// additional, let the sphere constantly rotate
var sphereSceneNode = scene.getSceneNodeFromName('sphereMesh1');
if (sphereSceneNode)
sphereSceneNode.addAnimator(new CL3D.AnimatorRotation(new CL3D.Vect3d(0, 1.6, 0.8)));
}
}
document.onkeydown = function(event)
{
var key = String.fromCharCode(event.keyCode);
// when pressed 'L', move the cube scene node a bit up
if (key == 'F' && cubeSceneNode)
cubeSceneNode.Pos.Y += 5;
// when pressed 'G', move the cube scene node a bit down
if (key == 'G' && cubeSceneNode)
cubeSceneNode.Pos.Y -= 5;
// we need to call the key handler of the 3d engine as well, so that the user is
// able to move the camera using the keys
engine.handleKeyDown(event);
};
-->
</script>
复制代码
好了,再一次执行代码,运行html文件,我们可以看到球开始旋转,按F 和G键,箱体运动,下面我们简单的解释一下代码的运行原理。
var engine = startCopperLichtFromFile('3darea', 'copperlichtdata/tutorial-2.ccbjs');
复制代码
我们用'engine'变量保存了一个CopperLicht class(类)的一个实例,同时告诉CopperLicht用的文件是'copperlichtdata/tutorial-2.ccbjs',CopperLicht会用html文档中名为'3darea'的画布<canvas>作为第一个参数,也就是后面的3d场景会转载到这个名为'3darea'的画布上。通过'engine' 这个实例,我们可以操作它其中的三维世界了。当CopperLicht导入场景完成后,我们需要CopperLicht给我们发一个信息,告诉我们它的三维场景导入完毕,于是,我们设定了一个导入完成事件:
// this is called when loading the 3d scene has finished
engine.OnLoadingComplete = function()
{
复制代码
获得engine里的三维场景节点,再通过这个节点,找到它的下级节点:'cubeMesh1' 和'sphereMesh1'。
var scene = engine.getScene();
if (scene)
{
// find the cube scene node
cubeSceneNode = scene.getSceneNodeFromName('cubeMesh1');
复制代码
'cubemesh'被装载到了cubeMesh节点,我们通过节点就直接可以控制物体的行为,移动、转动等。
因为有动画,所以我们需要场景能每帧刷新。
// also, force the 3d engine to update the scene every frame
scene.setRedrawMode(Scene.REDRAW_EVERY_FRAME);
复制代码
我们目前还不需要调用CL3D.Scene.forceRedrawNextFrame() ,因为我们的场景变化不大。我们可以在CopperCube编辑器里的发布项里进行这些设置。
为了让球体不断的旋转,我们用到了CopperLicht的Animators特性,Animators类是一个控制场景节点物体进行基本操作的类,如移动、旋转、路径运动、动画材质等,本案例我们用到了一个AnimatorRotation(旋转动画),速度为(0, 1.6, 0.8) ,直接把它加给球体就可以。
// additional, let the sphere constantly rotate
var sphereSceneNode = scene.getSceneNodeFromName('sphereMesh1');
if (sphereSceneNode)
sphereSceneNode.addAnimator(new AnimatorRotation(new Vect3d(0, 1.6, 0.8)));
复制代码
键盘输入
这时本课程的最后部分,我们通过按键'F' 和 'G'来控制箱体的运动,我们设置一个程序来捕获键盘输入事件:
document.onkeydown = function(event)
{
复制代码
需要注意的是,当CopperLicht引擎的实例生成出来后,它自动就生成了自己的一套键盘事件处理程序,为了有我们自己的一套键盘事件响应程序,我们需要把CopperLicht自动生成的那套响应程序删除,我们这样做:
// we need to call the key handler of the 3d engine as well, so that the user is
// able to move the camera using the keys
engine.handleKeyDown(event);
复制代码
在这之前,我们通过按键来控制箱体的运动:
var key = String.fromCharCode(event.keyCode);
// when pressed 'L', move the cube scene node a bit up
if (key == 'F' && cubeSceneNode)
cubeSceneNode.Pos.Y += 5;
// when pressed 'G', move the cube scene node a bit down
if (key == 'G' && cubeSceneNode)
cubeSceneNode.Pos.Y -= 5;
复制代码
好了,到这里我们知道如何控制场景里的物体运动了!
发表评论
-
bufferData
2011-07-21 14:30 1093/*void*/ bufferData //缓冲区数 ... -
导入支持的格式(Import)
2011-05-31 16:54 2465导入对话框选择格式,你会看到众多导入的格式。3ds m ... -
法线贴图
2011-05-13 11:48 1917本文转自:http://yumi08.jimdo.co ... -
法线向量
2011-05-13 10:20 2527面法线的计算相对来 ... -
ShowWebGL 强大的3D模型查看器
2011-04-12 14:01 6151ShowWebGL http://showwebgl.com ... -
o3d 创建一个平面
2011-03-29 15:27 879var vertexInfo = o3djs.primitiv ... -
o3d 常见几何图形创建
2011-03-29 15:25 11261、基本形状包括: o3djs.primitives.cre ... -
o3D 材质-定义透明材质
2011-03-29 15:20 1097//定义一个为白色并且是透明材质 var material = ... -
o3D 光照设定材质的光反射系数
2011-03-29 15:19 9771、创建材质 2、设定效果 3、创建光源的位置 4、设置材质环 ... -
O3D程序基本结构
2011-03-29 15:13 830创建一个O3D对象 设置全局变量初始化通用库 创建一个O3D ... -
Google 三维 JavaScript API
2011-03-28 15:59 898O3D 是一个开源的Web API,其可以创建相当牛X的基于浏 ... -
3D引擎CopperLicht
2011-03-28 15:09 1735WebGL是一种3D绘图标准, ... -
o3d 文档原文
2011-03-18 18:00 872Basic TasksThe basic tasks perf ... -
WebGL的框架
2011-03-18 16:23 3921WebGL的框架 WebGL http://www.khro ... -
c3dl 官方教程(二)
2011-03-18 16:13 1898教程#2:一个简单的场景本教程将展示C3DL)的基础知识使用三 ... -
C3DL 官方教程(一)
2011-03-18 15:57 1560本文笔者翻译,如有错误请留言。 教程#1:Web ... -
3D模型导入 CanvasMatrix.js引擎 demo(一)
2011-03-17 17:51 3050为广大html5 3d开发的朋友们演示 代码贴图,请下载附 ... -
c3dl 可以直接导入3dmax文件的3D引擎
2011-03-17 17:41 1198c3dl可以直接在网页代码中使用.dae格式的3dma ... -
o3d 模型导入引擎CanvasMatrix.js
2011-03-17 16:09 1636最近研究3d引擎在html5中的效果实现,需求当然是 ... -
o3d API总结
2011-03-17 13:52 893Making an Application with O3D ...
相关推荐
WebGL的普及也得益于中间件生态系统的成熟,开发者可以使用如C3DL、CopperLicht、Three.js等工具库,简化开发流程,提高开发效率。这些工具库提供了丰富的功能,帮助开发者快速构建复杂的3D场景和应用。 然而,...
全自动洗衣机PLC控制与智能交互系统:基于西门子S7-1200和TP700触摸屏程序的Z03实践(使用博途v15.1及IO表),题目二全自动洗衣机PLC控制西门子S7-1200和TP700触摸屏程序Z03,博途v15.1,带IO表 ,Z03全自动洗衣机; PLC控制; 西门子S7-1200; TP700触摸屏程序; 博途v15.1; IO表,全自动洗衣机PLC控制S7-1200与TP700触摸屏程序Z03(博途v15.1,带IO表)
617d773df6bb6cf9ae5ac5e95da7b096.part2
基于S7-200 PLC与组态王技术的分拣系统:大小球颜色、大小及材质的智能识别与控制,No.883 基于S7-200 PLC和组态王大小球颜色大小材质分拣 ,核心关键词:S7-200 PLC; 组态王; 大小球; 颜色; 大小; 材质; 分拣; 识别。,基于S7-200 PLC的组态王分拣系统:大小球颜色材质综合管理
基于距离调控的变频器加减速带参数子程序控制策略,根据距离控制变频器加减速带参数子程序。 可以根据设置的加速距离和减速距离输出变频器的输出频率。 ,核心关键词:距离控制;变频器;加减速带参数;子程序;输出频率。,基于距离控制的变频器加减速参数子程序
基于StyleGAN的草图到服装图像的生成方法.pdf
C#开发高效能3D点云可视化软件,支持CSV表格数据导入与渲染处理,使用C#语言开发的3D点云显示软件,以CSV表格格式读取 ,核心关键词:C#语言开发;3D点云显示软件;CSV表格格式读取;点云数据可视化。,C#开发的3D点云显示软件:CSV格式数据读取与展示
"基于机会约束规划理论的含可再生能源热电联供微网优化研究:考虑源荷不确定性的微网模型及其优化策略的复现与验证",考虑源荷不确定性的热电联考虑源荷不确定性的热电联供微网优化 复现《含可再生能源的热电联供型微网经济运行优化》,采用粒子群算法,采用机会约束规划理论出力源荷不确定性,采用概率方法来表达,目标函数代码完美复刻了文献中的目标函数和约束条件,约束部分采用清晰简明的等式和不等式部分,方便理解,采用罚函数的形式形成最终目标函数值。 本程序包括确定性模型和不确定性模型两部分程序代码,方便对照学习微网优化 ,核心关键词: 热电联供微网优化; 源荷不确定性; 粒子群算法; 机会约束规划理论; 概率方法; 目标函数; 约束条件; 确定性模型; 不确定性模型。,粒子群算法驱动的含源荷不确定性的热电联供微网优化程序
968a658a40c897eb4452d8718cf0f8e6.part2
B超技术:相控阵超声波的逐点与目标级聚焦策略——基于DAS算法与K-wave工具箱的应用研究,B超 算法 相控阵 超声波 逐点聚焦 目标级聚焦 DAS算法 K-wave工具箱 ,B超; 算法; 相控阵; 超声波; 逐点聚焦; 目标级聚焦; DAS算法; K-wave工具箱,"B超成像技术:相控阵超声波算法与DAS、K-wave工具箱的联合应用"
MATLAB仿真:Delta并联机器人的正逆运动学分析与Simulink及Simscape仿真研究,MATLAB仿真 delta并联机器人 simulink simscape仿真 正逆运动学 ,MATLAB仿真; delta并联机器人; Simulink; Simscape仿真; 正逆运动学,MATLAB仿真:Delta并联机器人正逆运动学分析的Simulink与Simscape应用
车辆路径智能优化算法:多维度策略与参数调整的物流配送研究,车辆路径智能算法包括如下: 1.遗传算法车辆路径优化 2.蚁群算法路径优化3.粒子群算法路径优化4.模拟 火算法路径优化 5.节约算法CW路径优化 6.人工鱼群路径优化。 节约算法车辆路径 遗传算法车辆路径,物流配送,带时间窗和载重量约束改进,vrp,cvrp ,vrptw物流配送,路径优化,车辆配送。 遗传算法路径优化,软时间窗,硬时间窗,客户满意度,物流选址,车辆路径,物流配送。 matlab完整代码,可修改坐标,需求和时间窗 和算法等相关参数。 ,核心关键词: 遗传算法车辆路径优化; 蚁群算法路径优化; 粒子群算法路径优化; 模拟退火算法路径优化; 节约算法CW路径优化; 人工鱼群路径优化; 物流配送; 车辆路径优化; 软时间窗; 硬时间窗; 客户满意度; 物流选址; MATLAB完整代码。,智能算法在车辆路径优化中的应用
matlab实现GA-BP时序预测完整程序+数据
基于特征的表面表达模型–体参数化模型转化方法.pdf
基于LSTM算法的换道轨迹预测:LC轨迹特征数据的MATLAB编码实现与解析,可用于LSTM道轨迹预测的LC轨迹特征数据 . MATLAB coding 道历史轨迹特征(i80,US101):横纵向速度,横纵向加速度,轨迹坐标,向左OR向右道标志,时间列,车辆id; ,LSTM; 轨迹特征数据; MATLAB coding; 换道历史轨迹; 横纵向速度; 横纵向加速度; 轨迹坐标; 车辆id; 车辆换道方向(向左OR向右); 时间列,LSTM换道轨迹预测:MATLAB代码与LC轨迹特征数据融合研究
基于OpenSees的梁柱节点建模与十字节点模拟分析:深入探讨JOINT2d与beamColumnJoint单元的应用,基于opensees梁柱节点建模 十字节点模拟 [1]采用JOINT2d节点单元或者element beamColumnJoint单元,采用Pinching4材料模型考虑核心区剪切行为和粘结滑移效应; 也可以使用hysteretic本构0长度单元模拟节点变形,2种代码均有。 [2]价格包括模型建模代码和1对1指导教学; [3]计算Pinching4材料的Membrane-2000小程序 梁端加载滞回代码 参考文献:基于OpenSees的装配式混凝土框架节点数值模拟方法研究-曹徐阳; ,核心关键词: OpenSees建模; 梁柱节点; JOINT2d节点单元; element beamColumnJoint单元; Pinching4材料模型; 核心区剪切行为; 粘结滑移效应; hysteretic本构0长度单元; 节点变形; 模型建模代码; 1对1指导教学; Membrane-2000小程序; 梁端加载滞回代码。,OpenSees梁柱节点建模:十字节点模拟与材料行为分析
中医院问诊系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
LabVIEW与PLC数据通信:深入解析与程序源码实例,labview和PLC数据通信 程序源码 ,Labview; PLC数据通信; 程序源码,LabView与PLC数据通信的程序源码示例
基于三菱PLC与组态王技术的自动化立体车库堆垛书架控制系统研究与应用第1100例实践,No.1100 基于三菱PLC和组态王组态自动化立体车库控制堆垛书架 ,三菱PLC; 组态王组态; 自动化立体车库; 控制; 堆垛书架,基于三菱PLC与组态王控制的立体车库堆垛书架自动化系统
2024薪酬最高的十大专业(2025.01.30)