首页 > 其他分享 >Three.js教程:动画渲染循环

Three.js教程:动画渲染循环

时间:2023-06-19 13:45:19浏览次数:48  
标签:动画 render 渲染 requestAnimationFrame Three js renderer 执行

推荐:将NSDT场景编辑器加入你的3D工具链
其他系列工具:NSDT简石数字孪生

动画渲染循环

threejs可以借助HTML5的API请求动画帧window.requestAnimationFrame实现动画渲染。

请求动画帧window.requestAnimationFrame

// requestAnimationFrame实现周期性循环执行
// requestAnimationFrame默认每秒钟执行60次,但不一定能做到,要看代码的性能
let i = 0;
function render() {
    i+=1;
    console.log('执行次数'+i);
    requestAnimationFrame(render);//请求再次执行函数render
}
render();

threejs旋转动画

动画说白了就是一张张照片,连起来依次展示,这样就形成一个动画效果,只要帧率高,人的眼睛就感觉不到卡顿,是连续的视频效果。

const renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
// renderer.render(scene, camera); //执行渲染操作
document.body.appendChild(renderer.domElement);

// 渲染函数
function render() {
    renderer.render(scene, camera); //执行渲染操作
    mesh.rotateY(0.01);//每次绕y轴旋转0.01弧度
    requestAnimationFrame(render);//请求再次执行渲染函数render,渲染下一帧
}
render();

计算两帧渲染时间间隔和帧率

// 渲染循环
const clock = new THREE.Clock();
function render() {
    const spt = clock.getDelta()*1000;//毫秒
    console.log('两帧渲染时间间隔(毫秒)',spt);
    console.log('帧率FPS',1000/spt);
    renderer.render(scene, camera); //执行渲染操作
    mesh.rotateY(0.01);//每次绕y轴旋转0.01弧度
    requestAnimationFrame(render);//请求再次执行渲染函数render,渲染下一帧
}
render();

渲染循环和相机控件OrbitControls

设置了渲染循环,相机控件OrbitControls就不用再通过事件change执行renderer.render(scene, camera);,毕竟渲染循环一直在执行renderer.render(scene, camera);

3D建模学习工作室    

上一篇:Three.js教程:平行光与环境光 (mvrlink.com)

下一篇:Three.js教程:Canvas画布布局和全屏 (mvrlink.com)

标签:动画,render,渲染,requestAnimationFrame,Three,js,renderer,执行
From: https://www.cnblogs.com/mvrlink/p/17490912.html

相关文章

  • 关于ASP.NET.CORE中的Failed to read parameter "string param" from the request bod
    先上报错信息Microsoft.AspNetCore.Http.BadHttpRequestException:Failedtoreadparameter"stringparam"fromtherequestbodyasJSON.--->System.Text.Json.JsonException:'s'isaninvalidstartofavalue.Path:$|LineNumber:0|By......
  • jsp WebUploader 分块上传
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有......
  • (七)CSS动画与响应式
    一、CSS动画 二、响应式 ......
  • JSQLParser碰到的问题
    JSQLParser是github上一个开源的项目,专门解析SQL,可以轻松地得到一条SQL的列、表、条件等对象,P.S. https://github.com/JSQLParser/JSqlParser最近在做一个功能开发的时候,被他困扰了下,从需求来讲,就是利用正则,先将多行的SQL改成一行,然后通过JSQLParser解析SQL,但是在这过程中,碰到了很......
  • Node.js | Node.js简介
    一、什么是node.js为什么JavaScript可以在浏览器中被执行?通过每个浏览器不同的JavaScript解析引擎。Chrome浏览器=>V8FireFox浏览器=>OdinMonkey(奥丁猴)Safri浏览器=>JSCoreIE浏览器=>Chakra(查克拉)...........注意:引擎负责解析和执......
  • js循环语句
    js循环语句原文件代码如下:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>循环</title></head><body><Ul><li>001</li><li>002</li><li>003&......
  • js_将字符串保存为文本文件
    将字符串保存为文本文件注:文件保存在当前电脑、下载文件夹中1//保存2varmySave=function(){3console.log(event)4constcontent='aplaintext.'5constblob=newBlob([content],{type:"text/pla......
  • 去往js函数式编程(7)
    管道和组合  管道和组合是一种技术,用于设置函数以便它们按顺序工作,使一个函数的输出称为下一个函数的输入。在linux中,执行一个命令并将其输出作为第二个命令的输入,而第二个命令的输出又成为第三个命令的输入,依此类推,这被称为管道。constmarkers=[{name:'AR',lat:-......
  • JSP 最佳实践: 使用JSTL来更新JSP页面
    developerWorks中国  >  Javatechnology | Webdevelopment  >JSP最佳实践:使用JSTL来更新JSP页面http://www.ibm.com/developerworks/cn/java/j-jsp05273/index.html标准化JSTL标记为您的Web页面带来更多的功能级别:初级BrettMcLaughlin([email protected]),作者,......
  • 使用nwjs打包VUE生成桌面应用
    摘抄自:https://blog.csdn.net/weixin_40521770/article/details/126907614目前已知把Vue项目打包成桌面应用有两种方式:(1)使用nwjs生成桌面应用;(2)使用Electron生成桌面应用。本文采用的是nwjs生成桌面应用,也是我认为最简单、最快捷的一种。一、打包Vue应用程序npmrunbuild二、添......