自己开发电商网站难吗做企业网站需要的人

web/2025/10/6 7:54:47/文章来源:
自己开发电商网站难吗,做企业网站需要的人,北京超市网站建设,qq登录网页版一键登录其实#xff0c;在 HT for Web 中#xff0c;有多种手段可以用来实现动画。我们这里仍然用直升机为例#xff0c;只是更换了场景。增加了巡游过程。 使用 HT 开发的一个简单网页直升机巡逻动画#xff08;Hightopo 使用心得#xff08;5#xff09;#xff09; 这里主…其实在 HT for Web 中有多种手段可以用来实现动画。我们这里仍然用直升机为例只是更换了场景。增加了巡游过程。 使用 HT 开发的一个简单网页直升机巡逻动画Hightopo 使用心得5 这里主要用到的动画实现方式有三种 setIntervalht.Default.startAnim()DataModel.addScheduleTask(task) 场景搭建 这里的主要工作分为3D 场景配置以及模型加载。其中 3D 场景部分的设置代码如下 this.g3d new ht.graph3d.Graph3dView(); this.g3d.setGridVisible(true); this.g3d.setGridSize(5000); this.g3d.setGridGap(2000); this.g3d.setNear(10) this.g3d.setFar(10000000) this.g3d.addToDOM(); this.dataModel this.dm this.g3d.dm(); 为了给直升机搭建一个逼真的环境。这里我们增加了一个山体模型。另外由于直升机机体与螺旋桨模型是分开的因此需要分别加载并调整其位置让二者合并成一个模型。 // 加载山体模型 this.mountains await this.createObj(MODELS.MOUNTAINS.name, MODELS.MOUNTAINS.obj, MODELS.MOUNTAINS.mtl); this.mountains.s(3d.selectable,false); this.mountains.s(shape3d.scaleable,true); this.mountains.setScale3d([0.01, 0.1, 0.01]); this.mountains.setElevation(1800); // 让山体在地面以上 // 分别加载直升机及螺旋桨模型 this.helicopterNode await this.createObj(MODELS.HELICOPTER.name, MODELS.HELICOPTER.obj, MODELS.HELICOPTER.mtl); this.propellerNode await this.createObj(MODELS.PROPELLER.name, MODELS.PROPELLER.obj, MODELS.PROPELLER.mtl); // 由于默认创建 Node 的时候其锚点是在 [0.5, 0.5, 0.5]位置是在 [0, 0, 0]。导致模型并不在水平面以上。 let size3d this.helicopterNode.getSize3d(); // 获取直升机模型的 [长,宽,高] let height size3d[1]; // 获取模型高度 this.helicopterNode.setPosition3d([0, height/2, 0]); // 将直升机放到地面上 this.propellerNode.setRotation3d([0.10506443461595279, 4.550746858974086, -0.007825951889059535]); // 让螺旋桨水平 this.propellerNode.setPosition3d([0, 215, -99.00152946490829]); // 将螺旋桨放到直升机上 this.propellerNode.setHost(this.helicopterNode); // 螺旋桨吸附到直升机上 this.helicopterNode.p3(0,2000,0); // 直升机 螺旋桨动画 - setInterval 螺旋桨动画比较简单其本质是通过不断地修改螺旋桨节点在竖直方向Y 轴的角度。 /** * 螺旋桨旋转动画 * */ startPropellerAnim(node) { setInterval(() { const r3 node.getRotation3d(); node.setRotation3d([r3[0], r3[1] 0.4, r3[2]]); // 绕 Y 轴旋转 }, 20); } 创建直升机巡游路径 有了直升机及环境我们需要让直升机动起来。例如在这里我们计划让直升机围绕山体巡逻。这里该如何实现呢 在 HT for Web 官方手册中其提供了一种实现方式我们这里稍微加以改造便可让直升机围绕山体巡逻。 在代码层面我们创建了一条三维线段Polyline。该线段实现的是一个圆环悬浮在山体上面。有了这条路径直升机便可沿着该路径前进实现巡游动画。 polyline的形状主要由points和segments这两个属性描述。二者都是数组。其中 points 可以理解成组成 polyline 所要用到的点集合而 segments 数组主要用来定义如何使用前面的点来组成 polyline。 points 中的每一项为 {x,y,e} 格式需要注意的是这里代表高度的是 e(elevation)而不是 y。 segments 数组里面有5种值。分别为 1: moveTo占用1个点信息代表一个新路径的起点2: lineTo占用1个点信息代表从上次最后点连接到该点3: quadraticCurveTo占用2个点信息第一个点作为曲线控制点第二个点作为曲线结束点4: bezierCurveTo占用3个点信息第一和第二个点作为曲线控制点第三个点作为曲线结束点5: closePath不占用点信息代表本次路径绘制结束并闭合到路径的起始点 /** * 创建直升机巡游路径 * * memberof Index3d */ createPath() { this.g3d.setDashDisabled(false); // 显示虚线 let height 2000; // 线段离地高度 let dataModel this.dataModel; let polyline this.polyline new ht.Polyline(); polyline.setThickness(5); // 线段粗细 polyline.s({ shape3d.image: assets/flow.png, // 贴图 shape3d: cylinder, // polyline类型这里是圆柱。也可以是 repeat.uv.length: 400, // 贴图宽度 shape3d.resolution: 1600, // 管线分辨率分辨率越高越平滑 }); dataModel.add(polyline); // 起始点 const points [{ x: -15000, y: 0, e: height, }]; const segments [1]; // 二次曲线占用两个点。生成一条弧线。下同。 points.push({ x: -15000, y: -15000, e: height }); points.push({ x: 0, y: -15000, e: height }); segments.push(3); points.push({ x: 15000, y: -15000, e: height }); points.push({ x: 15000, y: 0, e: height }); segments.push(3); points.push({ x: 15000, y: 15000, e: height }); points.push({ x: 0, y: 15000, e: height }); segments.push(3); points.push({ x: -15000, y: 15000, e: height }); points.push({ x: -15000, y: 0, e: height, }); segments.push(3); polyline.setPoints(points); polyline.setSegments(segments); polyline.setAnchorElevation(0) } 直升机巡游动画 - ht.Default.startAnim 接下来我们需要让直升机沿着巡游路径前进。在实现的时候我们使用了 ht.Default.startAnim() 方法。该方法我们在前几篇文章中都用过这里就不再详细介绍。 ht.Default.startAnim() 会执行 duration 毫秒在执行过程中其会自动计算所需要的帧数并在每一帧都调用一次action 方法。也就是说如果我们想让直升机 40 秒围绕路径飞行一圈我们只需要将 duration 设置成40*1000 毫秒并且在每一帧拿到当前时刻 polyline 上的点的坐标及方向。同时使用该坐标与方向设置直升机位置及朝向就可以实现巡游动画。 这里面比较关键的一个方法是 g3d.getLineOffset(polyline, length * v) 。该方法会返回一个对象{point: p.M…h.Vector3, tangent: p.M…h.Vector3}。其分别代表当前时刻 polyline 上的点的坐标及放向。根据这两个值我们可以进一步配置直升机的位置和朝向。 /** * 直升机沿着巡游路径飞行 * * param {number} [duration40 * 1000] * memberof Index3d */ startFly(duration 40 * 1000) { const { g3d, polyline } this; /** 获取巡游路径总长度 */ let length g3d.getLineLength(polyline); const params { delay: 0, duration, easing: (t) { return t; }, action: (v, t) { let offset g3d.getLineOffset(polyline, length * v), point offset.point, px point.x, py point.y 200, // 让直升机高于polyline pz point.z, tangent offset.tangent, tx tangent.x, ty tangent.y, tz tangent.z; this.helicopterNode.p3(px, py, pz); this.helicopterNode.lookAt([px tx, py ty, pz tz], back); // 一个模型有6个面这里需要确定机头处于哪个面 // 视角盯住直升机 if (this._cameraType 1) { g3d.setCenter(px, py, pz); } else if (this._cameraType 2) { // Camera跟随直升机运动 g3d.setEye(px - tx * 1800 1000, py - ty * 1800 1000, pz - tz * 1800); // 让镜头高于直升机并在尾部进行观察 g3d.setCenter(px, py, pz); } this.helicopterNode.a(angle, v * Math.PI * 120); }, finishFunc: () { ht.Default.startAnim(params); } }; ht.Default.startAnim(params); } 管道流动动画 - DataModel.addScheduleTask() 实现管道流动的动画有多种方式其本质是定期改变管道的贴图偏移。 这里我们采用DataModel#addScheduleTask(task)实现流动动画。DataModel#addScheduleTask(task)实际上是添加了一个调度任务。由于该方法是在 DataModel 上执行因此在每次执行的时候DataModel 里面的每个 Data 都会被调用。我们可以在 action 参数里面对 Data 进行过滤。DataModel#addScheduleTask(task)方法的参数task为json对象可指定如下属性 interval间隔毫秒数默认值为10enabled是否启用开关默认为truebeforeAction调度开始之前的动作函数action间隔动作函数对DataModel上的每个data节点都会执行一次action操作afterAction调度结束之后的调度函数 另外可以用DataModel#removeScheduleTask(task)删除调度任务其中task为以前添加过的调度任务对象。 /** * 通过DataModel的addScheduleTask实现流动效果 * * memberof Index3d */ addScheduleTasks() { const task { interval: 50, // 间隔毫秒数默认值为10 enabled: true, // 是否启用开关默认为true beforeAction: () {}, // 调度开始之前的动作函数 afterAction: () {}, // 调度结束之后的调度函数 action: (data) { // 间隔动作函数对DataModel上的每个data节点都会执行一次action操作 if (data.getClassName() ht.Polyline) { const offset (data.s(shape3d.uv.offset) || [0,0]); data.s(shape3d.uv.offset, [offset[0] 0.1, offset[1]]); } } }; this.dataModel.addScheduleTask(task); // this.dataModel.removeScheduleTask(task); // 删除调度任务 } 这里我们只是举例介绍一下DataModel#addScheduleTask(task)的用法。对于一个 DataModel 中大部分 Data 都需要动画的时候可以考虑使用该方法。 在代码执行的时候我们可以选择把巡游路径隐藏。这样看起来直升机就是沿着一个圆形持续巡游。 hidePath() { this.polyline.s(3d.visible, false); } 总结 本文介绍了如何通过代码实现一个直升机绕山巡游的动画包括创建路径和实现直升机的飞行动画。另外还介绍了如何通过DataModel#addScheduleTask(task)实现流动效果的动画。读完本文你将了解到如何使用 HT for Web 实现各种动画效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

农用地转建设用地结果查询网站做dw网站图片怎么下载

如果要想知道确切的当前网站IIS连接数的话,最有效的方法是通过windows自带的系统监视器来查看。 一、运行-->输入“perfmon.msc”. 二、在“系统监视器”图表区域里点击右键,然后点“添加计数器”. 三、在“添加计数器”窗口,“性能对象”…

hdsyscms企业建站系统什么类型的网站流量高

A.Cover in Water 题意: 有一个 1 n 1 \times n 1n的水池,里面有些格子可以加水,有些格子是被堵上的,你可以进行以下两种操作: 1.往一个空的格子里加水 2.移除一个有水的格子中的水,并将这些水添加到另…

南京网站制作建设建设银行扬中网站

在高并发查询、查询需要涉及很多个分区的情况下,低版本的 glibc(低于2.23)会严重影响查询性能。需要升级 glibc 解决该问题优化性能。我们撰写了本文,通过 patchelf 工具修改可执行文件和动态库的 rpath,达到无需升级系…

设计网站musil怎么识别网站开发语言

引言: 前面贝蒂已经给大家介绍了选择,循环结构~,今天贝蒂就基于这两种结构,为大家讲解一种捣蛋小游戏的设计思路和方法哦。 1.游戏要求 游戏要求: 1. 电脑⾃动⽣成1~100的随机数 2. 玩家猜数字,猜数字的过…

asp.net 网站计数器广州深圳做网站

1每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入…

网站备案 工信部建设网站建设哪里好

参考资料 正点原子《领航者 ZYNQ 之嵌入式 SDK 开发指南》详细的配置资料中都有介绍,本文只针对个人实验需求进行简要说明 固化流程 调试阶段是通过 JTAG 接口将 FPGA 配置文件和应用程序下载到 ZYNQ 器件中。但在实际应用中需要程序在上电或者复位时让程序自动运…

纹身网站设计wordpress上传课件

经观察,推拉转任务在两三天时间内就失效了。 1 用脚本每天定时启动一次 wvp docker 容器, 并关闭所有推拉转任务,建议每天凌晨2点运行 import subprocess import time import socket import requestsdef restart_container(container_name):subprocess…

网站建设林晓东九龙坡建站公司

完整源代码项目地址,关注博主私信’源代码’后可获取 1.问题描述2.问题分析3.算法设计4.完整的程序 1.问题描述 假设银行一年整存零取的月息为0.63%。现在某人手中有一笔钱,他打算在今后5年中的每年年底取出1000元,到第5年时刚…

蛋糕网站制作答辩黄埔企业网站建设

一、宽度自适应 语法:width:100%; 注: a)块状元素的默认宽度为100% b) 当给元素设置宽度为100%时,继承父元素的宽度 c) 通常使用宽度自适应实现通栏效果 二、高度自适应 语法:height:auto;(等同于不给元…

枣庄网站优化自学网站建设视频

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨IT界的两大巨头交锋✨ 👋 在IT界的广阔天地中,有两座…

广告图片网站罗湖做网站的公司哪家好

报错解释: 这个错误表明系统尝试执行的脚本文件 D:\Anaconda\Scripts\pip-script.py 不存在。这通常发生在尝试使用 pip 时,但 pip 没有正确安装或者路径设置不正确时。 解决方法: 确认 pip 是否已经安装在 Anaconda 中。可以通过 Anaconda…

平湖市住房和城乡规划建设局网站金华大企业网站建设有哪些

为什么要动态渲染? 比如我们现在需要以下侧边栏的数据: 如果一个个的去写标签会很麻烦,发现导航栏中的数据分为两类,一类是一级导航,另一位是二级导航(有子页),因此直接写两个函数判…

网站建设好弄吗高新手机网站建设价格

文章目录 MapReduce 编程:join操作和聚合操作一、实验目标二、实验要求及注意事项三、实验内容及步骤 附:系列文章 MapReduce 编程:join操作和聚合操作 一、实验目标 理解MapReduce计算框架的分布式处理工作流程掌握用mapreduce计算框架实现…

网站模板定做吴忠网页设计

使用git submodule git submodule add https://github.com/username/subproject.git使用cmake导入 FetchContent 实际使用的话,有下面的三点总结 关于FetchContent,若并需要修改 配置以及编译的默认值的时候,推荐首要使用该方法。include(FetchContent)set(JSON_C_TAG jso…

体育类网站模板滨海做网站哪家好

SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; (先join在on) 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算&a…

简述如何对网站进行推广?大型网站开发企业

大家好,这几天试着从Github上拉取AspNetCore的源码,尝试着通过Visual Studio 打开,但是并不尽人意。我们需要去构建我们拉去的源代码,这样才可以通过VisualStudio可还原的项目。毕竟AspNetCore是一个巨型的项目集。先决条件在Wind…

手表网站 欧米茄羽毛球赛事重播

列表的作用&#xff1a; 整齐、整洁、有序&#xff0c;它作为布局会更加自由和方便。 根据使用情景不同&#xff0c;列表可以分为三大类&#xff1a;无序列表、有序列表和自定义列表 无序列表 <ul> 标签表示 HTML 页面中项目的无序列表&#xff0c;一般会以项目符号呈…

建站行业消失了吗网站建设与维护岗位职责

1.MySQL请求处理 1.1.查询缓存 MySQL 服务器程序处理查询请求时&#xff0c;会把刚刚处理过的查询请求和结果缓存起来&#xff0c;如果下一次有一模一样的请求过来&#xff0c;直接从缓存中查找结果就好了&#xff0c;就不用再傻呵呵的去底层的表中查找了。这个查询缓存可以在不…

威海制作网站做公司中文网站需要注意什么

在数据库查询优化中,索引是一种重要的工具,可以提高查询性能。然而,并不是所有的情况下都适合使用索引。 以下是一些情况下(收集整理)不建议使用索引: 更新频繁的列:索引会占用数据库资源,当列经常被更新时,索引可能会变得过时,导致查询性能下降。 小数值类型:对于…

下载爱南宁乘车seo关键词优化排名推广

VR煤矿特殊工种作业实训系统为煤矿企业培训提供了全方位的支持&#xff0c;帮助提高矿工的操作技能和安全意识&#xff0c;促进煤矿企业的安全生产。 首先&#xff0c;VR煤矿特殊工种作业实训系统可以提供逼真的虚拟操作环境&#xff0c;使矿工能够身临其境地感受各种工种的作业…