第一天 Blender操作 | 大帅老猿threejs特训【超详细】

news2025/4/12 3:44:26

前言

这一天主要是基础理论的学习。

本人学习资料仓库

  • https://gitee.com/zhang_dezheng_hsr/three-demo.git
  • YCY-TrainingCamp-S2: 在原有的文件上添加本人的学习记录
  • 第一天 Blender操作 | 大帅老猿threejs特训【超详细】【我在掘金的同名文章】

一、大纲

image.png

image.png

image.png

二、THREE 基础概念

drop-donuts-singleE05.gif
image.png

image.png

透视相机模拟人眼的视角,通常用的比较多。正交相机,远近一样,没有近小远大的感觉。
image.png

image.png
环境光给一点就行,给太多不真实。
方向光,阴影太暗时补光,
image.png
漫反射,基础颜色,如给苹果加红色。
image.png

三、THREE API

image.png

image.png

image.png

image.png

一般用左边的,右边的会浪费空间
image.png

四、获取模型

glTF格式,blender是目前3D软件唯一可导入导出该格式的软件。
image.png

五、Blender 快捷键

image.png

六、Blender 初体验

导入甜甜圈文件,记得选择gltf格式,

image.png
由于模型尺寸过大,要稍微移动下,就看不到后面的部分,因此,需进行缩小操作。

缩放后,需ctrl + a 选择全部变换进行应用,以免缩放比例对后面操作的影响。

image.png

点击物体,选中了物体,这时左上角的物体模式就可以去切换为编辑模式【tab】.

image.png

分离选中项,可拆分出部分模型。利用此操作可以把上图组合选中的面包拆分成单个,如下图的操作。

image.png

如下图,发现每一次只能拆出一小部分,多次重复操作,就能拆出一个完整的面包!!
image.png

模拟甜甜圈从空中掉落到托盘的过程

分别给每个甜甜圈加刚体

image.png

给托盘加刚体,设置被动
image.png

效果如下

drop-donuts.gif

烘焙到关键帧

image.png

导出为win10可识别的glb格式,打开预览

drop-donuts-singleE01.gif

七、操作说明

编辑模式下,可切换点线面,ctrl + 点击选中,可以实现点线面的多选。

image.png

按键 / 可以独立操作物体

drop-donuts-singleE.gif

八、开始使用我们前面创建的面包动画

不懂的属性查文件,文档写的很清楚
image.png

按照前文知识,我的代码如下

const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.01, 10)
// camera.position.set(0,0,2) 放开后即可看到绿色的正方体

// 渲染器 WebGL1Renderer
const renderer = new THREE.WebGL1Renderer({ 
  // 抗锯齿
  antialias: true
})
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)

//  创建环境光,让所有东西都亮起来
const ambientLight = new THREE.AmbientLight(0xffffff, 0.5)
scene.add(ambientLight)

// 物体  创建立方体:长宽高均为 1
const boxGeometry = new THREE.BoxGeometry(1, 1, 1)

// 材质  MeshBasicMaterial:基础材质
const boxMaterial = new THREE.MeshBasicMaterial({ color: 0x00ff00})

const boxMesh = new THREE.Mesh(boxGeometry, boxMaterial)
scene.add(boxMesh)

// 帧循环
function animation() {
  requestAnimationFrame(animation)
  renderer.render(scene, camera)
}

// 动画入口
animation()

此时眼前一黑,啥也看不见。

image.png

补充知识

下面我创建面片plane, 这里存在背面剔除的3d学知识点,如下图所示

drop-donuts-singleE02.gif

让我们进入透视相机的视角【此处为右手坐标系】

drop-donuts-singleE03.gif

回到前面,“眼前一黑”是因为没设置相机位置,前文的代码里我加了这个注释,放开后就可看到正方体了

drop-donuts-singleE04.gif

加控制器,就可以用鼠标控制物体

const controls = new OrbitControls(camera, renderer.domElement)

drop-donuts-singleE05.gif

导入donuts.glb

使用THREE.AnimationMixer创建动画混合器,让所有动画共享该混合器,遍历执行,记得要在真循环里面执行该混合器的更新 mixer?.update(0.02)【0.02是必要的,没数值,它不知道隔多久更新】,就可以让动画动起来了。现在默认是循环播放,优化一下,设置播放一次,停在最后一帧。代码如下

  // 当场景中的多个对象独立动画时,每个对象都可以使用同一个动画混合器。
  mixer = new THREE.AnimationMixer(gltf.scene)
  // play each animation
  const clips = gltf.animations 

  clips.forEach(clip => {
    const action = mixer.clipAction(clip)
    // 只播放一次
    action.loop = THREE.LoopOnce
    action.play()
    // 动画停在最后一帧
    action.clampWhenFinished = true
  })
function animation() {
  requestAnimationFrame(animation)
  renderer.render(scene, camera)
  controls.update()
  // 0.02 必须填否则没有数据
  mixer?.update(0.02)
}

效果如下

drop-donuts-singleE06.gif

加下背景色、旋转,完结撒花!

drop-donuts-singleE08.gif

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

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

相关文章

Linux查看某个应用的CPU/内存/网卡使用情况

1.查看CPU的使用率 # ps -ef | grep zabbix 进程号是1715 # top -p 1715 可以看到CPU的使用率是0 , 内存的使用率是0 2.查看内存真实使用了多少 #cat /proc/[pid]/status #cat /proc/1715/status VmPeak:进程所使用的虚拟内存的峰值 VmSize: 进程当前使用…

22.字符串初始化方法及赋值,字符串和指针总结

目录 初始化 1.字符数组初始化 2.指针指向文字常量区,初始化 3.指针指向堆区,堆区存放字符串 使用时赋值 1.字符数组,使用scanf或者strcpy 2.指针指向文字常量区 3.指针指向堆区,堆区存放字符串 初始化 1.字符数组初始化 …

各国家语言代码对照表

来源如下 Language Code Tablehttp://www.lingoes.cn/zh/translator/langcode.htm 详情如下 语言代码语言名称af南非语af-ZA南非语ar阿拉伯语ar-AE阿拉伯语(阿联酋)ar-BH阿拉伯语(巴林)ar-DZ阿拉伯语(阿尔及利亚)ar-EG阿拉伯语(埃及)ar-IQ阿拉伯语(伊拉克)ar-JO阿拉伯语(约旦…

万字详解 Linux 网络管理

万字详解 Linux 网络管理1.Linux处理数据包过程2.和网络相关的几个文件说明网卡配置文件ifcfg-*DNS配置文件/etc/resolv.conf(CentOS6环境)/etc/services3.网络接口配置和主机名ifconfigifcfghostname命令4.网关/路由5.网关/路由相关命令route命令配置永…

netty(1):NIO 基础之三大组件

1 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出&…

如何用idea快速的debug本地程序

介绍大家都经常用idea开发, 开发过程中运行程序就会出现各种意料之外的异常, 如果解决这些异常, 尤其是三方jar包抛出的异常,就是一个很关键和棘手的问题.配置环境在第一个选项位置点开后会弹出配置页面,里面可以配置一些启动需要的环境变量.第二个是debug启动按钮第三个是程序…

SQL 优化方案(规范)

SQL优化1、SQL执行顺序2、前置条件2.1、使用explain分析SQL执行计划2.2、开启慢sql日志2.3、慢查询时间设置。默认情况下long_query_time的值为10秒,可以使用命令修改,也可以在my.cnf参数里面修改。3、基础Sql优化3.1、小表驱动大表3.2、高效的分页3.3、…

【linux入门】Linux基础知识学习笔记

文章目录【第一章-宏观知识】1.硬件和软件的关系2.操作系统 是什么、作用是什么3.常见的操作系统4.Linux的诞生5.Linux内核 是什么6.Linux发行版 是什么7.WSL是什么8.虚拟机快照9.FinalShell(Xshell替代品)【第二章-Linux基础命令】1.Linux目录结构2.什么…

Linux下ElasticSearch安装和基本使用

安装 下载安装目录:/home/es-7.12.0 es启动用户:zmsz 出于安全考虑,elasticsearch默认不允许以root账号运行,所有一定要创建一个其他用户执行启动命令,不然一定会报错!! 创建用户:useradd zmsz 设置密码:passwd zmsz下载解压 下载:官网 以最新版8.6为准,执行wget …

MySQL中的limit分页的使用

SQL准备 create table tb_students (id int auto_increment primary key comment 主键ID,studentid char(9) unique not null comment 学生学号,name varchar(10) not null comment 学生姓名,gender char(1) not null comment 学生性别 ) comment 学生表;insert into tb_stude…

【机器学习 - 2】:数据集的处理

文章目录训练集和数据集分离获取最优模型超参数寻找最优模型网格搜索的使用训练集和数据集分离 训练集和数据集分离的原理:当我们获取一个数据集时,我们需要将其一小部分拿出来作为测试集,剩余的作为训练集。例如对于一个训练集,将…

RocketChip RISC-V生成RTL到仿真全流程

一、Scala配置项修改和RTL代码生成可以通过对scala中的配置项修改,来达到定制化配置RISC-V的目的,这里总结几个比较常用的配置项、配置项含义和所在的scala中的位置:1.$rocket-chip/src/main/scala/system/Config.scala1)new With…

机器学习-2-安装Python 3.6和Pytorch 1.1.0

0. 说明: 之前根据GPU版本安装了CUDA 9.0,因此现安装与CUDA 9.0相对应的Pytorch版本,但在安装Pytorch之前要先确认一下Python的版本。 1. 查看 CUDA 9.0 对应的 Pytorch 从https://pytorch.org/get-started/previous-versions/中查找CUDA …

程序的机器级表示part1——程序编码与数据格式

目录 1. 汇编语言和机器级语言 1.1 不同的编程语言 1.2 Linux下的汇编语言 2. 程序编码 1.1 机器级代码 1.2 代码示例 3. 数据格式 本文基于CSAPP第三章撰写,主要介绍部分x86-64汇编的相关知识,后续会将该部分内容慢慢完善(PS&a…

Web Spider XHR断点 千千XX 歌曲下载(三)

Web Spider XHR断点 千千XX 歌曲下载 首先声明: 此次案例只为学习交流使用,切勿用于其他非法用途 注:网站url、接口url请使用base64.b64decode自行解码 文章目录Web Spider XHR断点 千千XX 歌曲下载前言一、资源推荐二、任务说明三、网站分析四、XHR断点…

knife4j使用与步骤

1、导入依赖<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version> </dependency>2、knife4j的配置类&#xff08;可有可无&#xff09;package…

为什么程序员的工资比其他行业高这么多?

不止一次听到有人说程序员工资高&#xff0c;更有甚者喊着“把IT工资打下来”。 拜托大哥大姐们&#xff01;看事情要客观好吧&#xff01;&#xff01; 虽然看起来程序员工资是不少&#xff0c;对比其他行业确实会高一些&#xff0c;但并不代表程序员这个岗位工资就要压到三千…

Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能

同义词用于提高搜索质量并扩大匹配范围。 例如&#xff0c;搜索 England 的用户可能希望找到包含 British 或 UK 的文档&#xff0c;尽管这三个词完全不同。 Elasticsearch 中的同义词功能非常强大&#xff0c;如果实施得当&#xff0c;可以使你的搜索引擎更加健壮和强大。 在…

详解结构体内存对齐

目录 前言 一、结构体内存对齐规则 二、 offsetof 宏 三、结构体内存对齐的原因 四、 修改默认对齐数 前言 引入问题&#xff1a; #include <stdio.h>struct S {char c1;int i;char c2; };int main() {printf("%zd\n", sizeof(struct S));return 0; } 程…

干货 | 人脸识别技术的风险及应对方案

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分&#xff1a;人脸识别技术概述人脸识别的发展阶段&#xff0c;主要分为三个阶段&#xff1a;起步阶段&#xff08;1950s-1980s&#xff09;&#xff0c;这一阶段的人脸识别只是作为一般性…