three.js官方案例(animation / keyframes)webgl_animation_keyframes.html学习

2024-06-01 09:44

本文主要是介绍three.js官方案例(animation / keyframes)webgl_animation_keyframes.html学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

​编辑

1  PMREMenerator

1.1 构造函数

1.2  fromScene方法

2 AnimationMixer

3 animal1.html全部

4  animal1.js全部

1  PMREMenerator

        此类生成预过滤的 Mipmapped 辐射环境贴图 (PMREM) 来自 cubeMap 环境纹理。这允许不同的级别 的模糊,可根据材质粗糙度快速访问。不像 传统的MIPMAP链,它只下到LOD_MIN级别(上图), 然后在同一LOD_MIN创建额外甚至更多过滤的“MIP” 分辨率,与更高的粗糙度水平相关。通过这种方式,我们 保持分辨率以平滑地插值漫射照明,同时 限制抽样计算。

注: 最小 MeshStandardMaterial 的粗糙度取决于 提供的纹理的大小。如果您的渲染尺寸较小,或者 闪亮的部分有很多曲率,你也许仍然可以逃脱 具有较小的纹理尺寸

1.1 构造函数

PMREMGenerator( 渲染器 : WebGLRenderer )

此构造函数创建新的 PMREMGenerator

1.2  fromScene方法

.fromScene ( scene : Scene, sigma : Number, near : Number, far : Number ) : WebGLRenderTarget

scene - 给定的场景
sigma - (可选)指定在PMREM生成之前应用于场景的以弧度为单位的模糊半径。默认为0。
near - (可选)近平面值,默认值为0.1。
far - (可选)远平面值。默认值为100。

2 AnimationMixer

console.log(gltf);

打印加载的gltf,可以看到动画animations和要显示的模型scene是并列的:

  console.log( gltf.animations[ 0 ]);

animal1.html全部

<!DOCTYPE html>
<html lang="en"><head><title>three.js webgl - animation - keyframes</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><link type="text/css" rel="stylesheet" href="../three.js-r163/examples/main.css"><style>body {background-color: #bfe3dd;color: #000;}a {color: #2983ff;}</style></head><body><div id="container"></div><div id="info"><a href="https://threejs.org" target="_blank" rel="noopener">three.js</a> webgl - animation - keyframes<br/>Model: <a href="https://artstation.com/artwork/1AGwX" target="_blank" rel="noopener">Littlest Tokyo</a> by<a href="https://artstation.com/glenatron" target="_blank" rel="noopener">Glen Fox</a>, CC Attribution.</div><script type="importmap">{"imports": {"three": "../three.js-r163/build/three.module.js","three/addons/": "../three.js-r163/examples/jsm/"}}</script><script type="module" src="animal1.js"></script></body></html>

4  animal1.js全部

import * as THREE from 'three';//性能检测器import Stats from 'three/addons/libs/stats.module.js';//控制器import { OrbitControls } from 'three/addons/controls/OrbitControls.js';//室内环境import { RoomEnvironment } from 'three/addons/environments/RoomEnvironment.js';//gltf模型下载器import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';let mixer;const clock = new THREE.Clock();const container = document.getElementById( 'container' );//性能检测const stats = new Stats();container.appendChild( stats.dom );//3D渲染器const renderer = new THREE.WebGLRenderer( { antialias: true } );renderer.setPixelRatio( window.devicePixelRatio );renderer.setSize( window.innerWidth, window.innerHeight );container.appendChild( renderer.domElement );//生成成预过滤的 Mipmapped 辐射环境贴图 const pmremGenerator = new THREE.PMREMGenerator( renderer );const scene = new THREE.Scene();scene.background = new THREE.Color( 0xbfe3dd );			scene.environment = pmremGenerator.fromScene( new RoomEnvironment( renderer ), 0.04 ).texture;//环境贴图 作用是照亮模型  这一行注掉模型是黑的
// 相机const camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 100 );camera.position.set( 5, 2, 8 );//控制器const controls = new OrbitControls( camera, renderer.domElement );controls.target.set( 0, 0.5, 0 );controls.update();controls.enablePan = false;//启用或禁用摄像机平移,默认为true//将其设置为true以启用阻尼(惯性),这将给控制器带来重量感。默认值为false。//请注意,如果该值被启用,你将必须在你的动画循环里调用.update()。controls.enableDamping = true;//一个用于加载经过Draco压缩的图形库const dracoLoader = new DRACOLoader();dracoLoader.setDecoderPath( '../three.js-r163/examples/jsm/libs/draco/gltf/' );//模型加载const loader = new GLTFLoader();//.setDRACOLoader ( dracoLoader : DRACOLoader ) : this
//dracoLoader — THREE.DRACOLoader的实例,用于解码使用KHR_draco_mesh_compression扩展压缩过的文件。loader.setDRACOLoader( dracoLoader );loader.load( '../three.js-r163/examples/models/gltf/LittlestTokyo.glb', function ( gltf ) {console.log(gltf);const model = gltf.scene;			model.position.set( 1, 1, 0 );//更改位置model.scale.set( 0.01, 0.01, 0.01 );//更改大小scene.add( model );mixer = new THREE.AnimationMixer( model );//获取动画混合区//.clipAction (clip : AnimationClip, optionalRoot : Object3D) : AnimationAction
//返回所传入的剪辑参数的AnimationAction, 根对象参数可选,默认值为混合器的默认根对象。第一个参数可以是动画剪辑(AnimationClip)对象或者动画剪辑的名称。
//如果不存在符合传入的剪辑和根对象这两个参数的动作, 该方法将会创建一个。传入相同的参数多次调用将会返回同一个剪辑实例。console.log( gltf.animations[ 0 ]);mixer.clipAction( gltf.animations[ 0 ] ).play();//播放动画animate();//}, (progress)=>{console.log(progress);}, function ( e ) {console.error( e );} );//自适应的功能window.onresize = function () {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();renderer.setSize( window.innerWidth, window.innerHeight );};function animate() {requestAnimationFrame( animate );const delta = clock.getDelta();//获取时间mixer.update( delta );//动画更新controls.update();//控制器更新stats.update();//性能检测更新renderer.render( scene, camera );}

这篇关于three.js官方案例(animation / keyframes)webgl_animation_keyframes.html学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020657

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置