ThreeJs实现简单的动画

上一节实现可用鼠标控制相机的方式实现动态效果,但很多时候是需要场景自己产恒动态效果,而不是通过鼠标拖动,此时引入一个requestAnimationFrame方法,它实际上是通过定时任务的方式,每隔一点时间改变场景中内容后重新渲染一遍,间隔时间短的话视觉上就显示出连续的动画效果,Js本身也自带定时方法 setInterval,同样可以实现动画效果,但是性能上不如requestAnimationFrame,比如浏览器的当前窗口并非是threeJs页面,setInterval会一直循环执行,但是 requestAnimationFrame会停止,直到浏览器的Tab标签切换到threejs页面才会继续执行。下面的源码展示了通过requestAnimationFrame的方式实现动画效果。(mesh.rotation.x += 0.02是改变正方体网格的z轴旋转角度),requestAnimationFrame每执行一次就会旋转一次。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!--引入three.js,这是使用three必须的js文件,此处引入的是外网提供的three文件,如果引入有问题可以到官网下载three文件后引入本地的theee.js文件-->
    <script src="http://www.yanhuangxueyuan.com/versions/threejsR92/build/three.js"></script>
    <script src="three/OrbitControls.js"></script>
</head>

<body>
<script>
    /**
     * 创建场景对象Scene
     */
    var scene = new THREE.Scene();

    /**
     * 相机设置
     */
    //窗口宽度
    var width = window.innerWidth;
    //窗口高度
    var height = window.innerHeight;
    //窗口宽高比
    var k = width / height;
    //三维场景显示范围控制系数,系数越大,显示的范围越大
    var s = 200;
    //创建相机对象
    var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
    //设置相机位置
    camera.position.set(200, 300, 200);
    //设置相机方向(指向的场景对象)
    camera.lookAt(scene.position);

    /**
     * 光源设置
     */
        //新建点光源(常用光源分为点光源和环境光,点光源的效果类似灯泡,环境光的效果类似白天的太阳光)
    var point = new THREE.PointLight(0xffffff);
    //设置点光源的位置
    point.position.set(400, 200, 300);
    //将点光源添加到场景中
    scene.add(point);
	

    /**
     * 创建网格模型,也就是3D模型
     */
    //创建一个立方体几何对象Geometry
    var geometry = new THREE.BoxGeometry(100, 100, 100);
    //给几何体创建材质,这里是改为蓝色,材质对象Material
    var material = new THREE.MeshLambertMaterial({
        color: 0x0000ff
    });
    //网格模型对象Mesh
    var mesh = new THREE.Mesh(geometry, material);
    //网格模型添加到场景中,每个模型最终都要添加到场景中才会被渲染
    scene.add(mesh);

    /**
     * 创建渲染器对象
     */
    //创建渲染器对象(渲染要等所有东西都加进去再渲染场景,创建和3D模型和光源没有先后顺序)
    var renderer = new THREE.WebGLRenderer();
    //设置渲染区域尺寸(设置的是整个屏幕的长度和宽度
    renderer.setSize(width, height);
    //设置渲染的背景色
    renderer.setClearColor(0xb9d3ff, 1);
    //body元素中插入canvas对象,也可以在页面中添加div,并加上id,通过id指定在某个div中渲染
    document.body.appendChild(renderer.domElement);
	
	//循环渲染
	function render() {
		//执行渲染操作   指定场景、相机作为参数
		renderer.render(scene, camera);
		// 使用 requestAnimationFrame 函数安排下一次渲染
		requestAnimationFrame(render);
		//修改正方体网格的x轴旋转角度
		mesh.rotation.x += 0.02
	}
	//执行渲染
	render()
	
	//创建鼠标控制器	
	//let controls = new THREE.OrbitControls(camera, renderer.domElement );
	//监听控制器,每次拖动后重新渲染画面
	//controls.addEventListener('change', function () {
	//	renderer.render(scene, camera); //执行渲染操作
	//});
	
</script>
</body>
</html>

效果如下,这里是图片,只是其中一帧的样子,没有动态效果。看到动态效果可以把上面的代码复制到html文件中双击打开在浏览器中执行。

如果有疑问可以在评论里留言。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

复亚智能交通无人机:智慧交通解决方案大公开

城市的现代化发展离不开高效的交通管理规划。传统的交通管理系统庞大繁琐&#xff0c;交警在执行任务时存在安全隐患。在这一背景下&#xff0c;复亚智能交通无人机应运而生&#xff0c;成为智慧交通管理中的重要组成部分。交通无人机凭借其高灵活性、低成本、高安全性等特点&a…

前装标配搭载率突破30%,数字钥匙赛道进入「纵深战」周期

在汽车智能化进程中&#xff0c;作为传统高频应用的车钥匙&#xff0c;也在加速数字化升级。同时&#xff0c;在硬件端&#xff0c;从蓝牙、NFC到UWB等多种通讯方式的叠加效应&#xff0c;也在大幅度提升数字钥匙的用户体验。 目前&#xff0c;部分市场在售车型&#xff0c;车企…

蓄电池监控技巧,节省了我80%的无效工作!

在当今社会&#xff0c;蓄电池作为能源存储和备用电源的关键组件&#xff0c;已经在各行各业中扮演着愈发重要的角色。 然而&#xff0c;蓄电池在使用过程中面临着一系列的挑战&#xff0c;包括性能衰减、安全隐患和能源效率等问题。在这种背景下&#xff0c;蓄电池监控技术应运…

系列三、事务

一、事务 1.1、概述 事务是数据库操作的基本单元&#xff0c;它是指逻辑上的一组操作&#xff0c;要么都成功&#xff0c;要么都失败。典型场景&#xff1a;转账&#xff0c;例如Jack给Rose转账1000元&#xff0c;转账成功&#xff1a;Jack账户的余额少1000元&#xff0c;Rose…

实用高效 无人机光伏巡检系统助力电站可持续发展

近年来&#xff0c;我国光伏发电行业规模日益壮大&#xff0c;全球领先地位愈发巩固。为解决光伏电站运维中的难题&#xff0c;浙江某光伏电站与复亚智能达成战略合作&#xff0c;共同推出全自动无人机光伏巡检系统&#xff0c;旨在提高发电效率、降低运维成本&#xff0c;最大…

NX二次开发UF_CSYS_create_csys 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_create_csys Defined in: uf_csys.h int UF_CSYS_create_csys(const double csys_origin [ 3 ] , tag_t matrix_id, tag_t * csys_id ) overview 概述 Creates a CSYS. 创…

算法:给出指定整数区间、期望值,得到最终结果

1&#xff0c;问题&#xff1a; 在游戏中&#xff0c;我们经常会遇到以下情况&#xff1a;打开宝箱&#xff0c;获得x个卡牌碎片。 但通常策划只会给一个既定的数值空间&#xff0c;和一个期望得到的值&#xff0c;然后让我们去随机。比如&#xff1a; 问题A&#xff1a;在1~…

用栈实现队列的功能,用队列实现栈的功能?

我们知道队列的特点是先入先出&#xff0c;栈的特点是后入先出&#xff0c;那么如何用栈实现队列的功能&#xff0c;又如何用队列实现栈的功能呢&#xff0c;且听我一一道来 我们首先来看用栈实现队列的功能&#xff0c;首先大伙儿要知道队列和栈的特点其实是“相反”&#xf…

氮化镓的晶体学湿式化学蚀刻法

引言 目前&#xff0c;大多数III族氮化物的加工都是通过干法等离子体蚀刻完成的。干法蚀刻有几个缺点&#xff0c;包括产生离子诱导损伤和难以获得激光器所需的光滑蚀刻侧壁。干法蚀刻产生的侧壁典型均方根(rms)粗糙度约为50纳米&#xff0c;虽然已经发现KOH基溶液可以蚀刻AlN…

【2023年APMCM亚太杯C题】完整代码+结果分析+论文框架

2023年APMCM亚太杯C题 完整代码结果分析论文框架第一问问题分析技术文档1 基于AHP的新能源汽车发展影响因素分析1.1 AHP模型的构建1.2 AHP模型的求解 2 基于自适应ARIMA-非线性回归模型的影响因素预测2.1 ARIMA模型的建立2.2 非线性回归模型的建立2.3 自适应混合ARIMA-非线性回…

高压配电室无人值守

高压配电室无人值守是指高压配电室在没有现场人员持续值守的情况下进行运行和管理。这种模式的实现依赖于先进的智能化技术和自动化系统&#xff0c;以确保配电室的安全、稳定和高效运行。 无人值守智能高压配电室的优势包括&#xff1a; 成本降低&#xff1a;无需常驻人员值守…

c语言习题1124

分别定义函数求圆的面积和周长。 写一个函数&#xff0c;分别求三个数当中的最大数。 写一个函数&#xff0c;计算输入n个数的乘积 一个判断素数的函数&#xff0c;在主函数输入一个整数&#xff0c;输出是否为素数的信息 写一个函数求n! ,利用该函数求1&#xff01;2&…

电脑如何禁止截屏

禁止电脑截屏是一项重要的安全措施&#xff0c;可以保护用户隐私和防止恶意软件的使用。以下是几种禁止电脑截屏的方法&#xff1a; 形式一&#xff1a; 一刀切&#xff0c;全部禁止截屏 可以在域之盾软件后&#xff0c;点击桌面管理&#xff0c;然后选择禁止截屏。就能禁止所…

zerotier 入门及初始使用

官网终端下载地址 https://www.zerotier.com/download/ 配置 创建网络 到默认的控制中心创建网络 https://my.zerotier.com/ 点击进入,将网络ID复制 加入网络 MacOS 将上面的网络ID复制到下方进行输入 Windows Linux # xxxxxxxxxxxxxx 网络节点ID sudo zerotier-cli join xx…

绽放独特魅力,点亮美好生活

2023年10月至11月&#xff0c;由益田社区党委主办、深圳市罗湖区懿米阳光公益发展中心承办&#xff0c;深圳市温馨社工服务中心协办的“2023年益田社区益田佳人--女性成长课堂”项目顺利完成&#xff0c;此项目分为四个主题&#xff0c;分别是瑜伽、健身操、收纳、花艺技能&…

大语言模型概述(一):基于亚马逊云科技的研究分析与实践

大型语言模型指的是具有数十亿参数&#xff08;B&#xff09;的预训练语言模型&#xff08;例如&#xff1a;GPT-3, Bloom, LLaMA)。这种模型可以用于各种自然语言处理任务&#xff0c;如文本生成、机器翻译和自然语言理解等。 大语言模型的这些参数是在大量文本数据上训练的。…

【漏洞复现】好视通视频会议系统(fastmeeting) toDownload.do接口存在任意文件读取漏洞 附POC

漏洞描述 “好视通”是国内云视频会议知名品牌,拥有多项创新核心技术优势、多方通信服务牌照及行业全面资质 [5] ,专注为政府、公检法司、教育、集团企业等用户提供“云+端+业务全场景”解决方案。用全国产、高清流畅、安全稳定的云视频服务助力各行各业数字化转型。 其视频…

2016年10月3日 Go生态洞察:Go 1.7中的子测试和子基准测试

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Sectigo

随着互联网的普及和技术的飞速发展&#xff0c;网络安全问题引起重视。这时&#xff0c;有一家名为Sectigo(原Comodo CA)的公司应运而生&#xff0c;致力于为企业和个人提供最先进、最可靠的网络安全解决方案。 Sectigo(原Comodo CA) 成立于2008年&#xff0c;总部位于美国加利…

深度学习图像风格迁移 - opencv python 计算机竞赛

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…