ThreeJs学习笔记--坐标系,光源,相机控件

server/2024/9/23 0:31:19/

坐标系

一、创建添加坐标系

给场景添加坐标系THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小,你可以根据需要改变尺寸

const axesHelper = new THREE.AxesHelper(200)//数值是坐标的尺寸
scene.add(axesHelper)//添加到场景里

坐标系包含三个坐标轴,xyz。分别是红,绿,蓝,x轴右偏下方向,Y轴默认向上,Z轴则是左偏下方向

光源

受光源影响材质

光源可以理解为,房间里有东西,可是没有光的话,就看不到。只是threejs中的物体并不是所有的都受光源限制,大致可以分为受光源限制的和不受光源限制的材质

不受光源限制的材质

const material = new THREE.MeshBasicMaterial()//不受光源限制的材质

受光源限制的材质

//MeshLambertMaterial受光照影响
const material = new THREE.MeshLambertMaterial(); 

没有光源物体看不到了(其他受光源影响的是表现一样,就不一个个展示了)

光源分类

光源分为四个类,点光源PointLight(灯泡),平行光 DirectionalLight,聚光灯灯源 SpotLight,环境光 AmbientLight。

1)、PointLight 点光源

color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。

intensity -(可选)光照强度。默认值为 1。

distance - 光源照射的最大距离。默认值为 0(无限远)。

decay - 沿着光照距离的衰退量。默认值为 2。

2)、DirectionalLight 平行光

color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。

intensity -(可选)光照强度。默认值为 1。

3)、SpotLight  聚光灯

color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。

intensity -(可选)光照强度。默认值为 1。

distance - 光源照射的最大距离。默认值为 0(无限远)。

angle - 光线照射范围的角度。默认值为 Math.PI/3。

penumbra - 聚光锥的半影衰减百分比。默认值为 0。

decay - 沿着光照距离的衰减量。默认值为 2。

4)、AmbientLight  环境光

color -(可选)一个表示颜色的 Color 的实例、字符串或数字,默认为一个白色(0xffffff)的 Color 对象。

intensity -(可选)光照强度。默认值为 1。

环境光是全方位的打光,其余三个都是从光源位置到物体,看不到背面。

点光源在Z轴上就可以看得出很明显的剩余面是黑色

创建光源

// 创建光源
const pointLight = new THREE.SpotLight(0xffffff, 10000);
pointLight.position.set(0, 0, 120); // 点光源在场景中的位置
// pointLight.intensity = 10000.0; //光照强度
// pointLight.decay = 2.0; //设置光源不随距离衰减
scene.add(pointLight);

光源辅助

1)、点光源辅助观察PointLightHelper
// 光源辅助观察
const pointLightHelper = new THREE.PointLightHelper(pointLight, 10);
scene.add(pointLightHelper);

效果如下:我们可以看到有一个白色菱形,就是光源位置可视化

2)、平行光辅助观察DirectionalLightHelper
// 平行光光源辅助观察
const dirLightHelper = new THREE.DirectionalLightHelper(pointLight,5,0xff0000
);
scene.add(dirLightHelper);

示例如下

相机控件OrbitControls

引入相机控件
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
使用
// 设置相机控件轨道控制器OrbitControls
const controls = new OrbitControls(camera, renderer.domElement);
// 如果OrbitControls改变了相机参数,重新调用渲染器渲染三维场景
controls.addEventListener('change', function () {renderer.render(scene, camera); //执行渲染操作
});//监听鼠标、键盘事件

控制器的本质就是监听鼠标移动,然后重新渲染场景

当然还有更安逸的用法

// 创建控制器
const controls = new OrbitControls(camera, renderer.domElement);// 动画循环
function animate() {requestAnimationFrame(animate);controls.update(); // 更新控制器renderer.render(scene, camera); // 渲染场景
}
animate();
 随机创建大量的模型
// 随机创建大量的模型,测试渲染性能
const num = 1000; //控制长方体模型数量
for (let i = 0; i < num; i++) {const geometry = new THREE.BoxGeometry(5, 5, 5);const material = new THREE.MeshLambertMaterial({color: 0x00ffff});const mesh = new THREE.Mesh(geometry, material);// 随机生成长方体xyz坐标const x = (Math.random() - 0.5) * 200const y = (Math.random() - 0.5) * 200const z = (Math.random() - 0.5) * 200mesh.position.set(x, y, z)scene.add(mesh); // 模型对象插入场景中
}


http://www.ppmy.cn/server/101210.html

相关文章

行列视主要覆盖的行业领域

行列视报表系统是一种广泛应用于生产型企业的数据应用系统&#xff0c;它通过提供强大的数据整合、报表创建、业务应用和数据可视化功能&#xff0c;帮助企业提高生产效率和管理水平。以下是该系统覆盖的一些主要行业领域&#xff1a; 生产型企业&#xff1a;行列视报表系统特…

C语言家教记录(六)

导语 本次授课的内容如下&#xff1a;指针&#xff0c;指针和数组 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 指针 指针变量 计算机按字节划分地址&#xff0c;每个地址访问一个字节 指针变量指向变量的地址&#xff0c;指的是变量第一个字节的…

【DGL系列】详细分析DGL中dgl.NID和orig_id的区别

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景知识 深入分析 初步结论 代码验证 实验设计 结果分析 最终结论 扩展思考 本文将详细分析orig_id和dgl.NID的区别。 背景知识 在做子图…

Qt+OpenCV配置和测试

一、前言 OpenCV作为比较大众化的跨平台计算机视觉开源库&#xff0c;可以运行在多种操作系统上&#xff0c;通过与Qt的结合&#xff0c;能够轻松的是实现一些图像处理和识别的任务&#xff0c;本文在Windows操作系统的基础上具体讲解Qt和OpenCV的配置和环境搭建方法&#xff…

Python版《超级玛丽+源码》-Python制作超级玛丽游戏

小时候最喜欢玩的小游戏就是超级玛丽了&#xff0c;有刺激有又技巧&#xff0c;通关真的很难&#xff0c;救下小公主还被抓走了&#xff0c;唉&#xff0c;心累&#xff0c;最后还是硬着头皮继续闯&#xff0c;终于要通关了&#xff0c;之后再玩还是没有那么容易&#xff0c;哈…

基于springboot物流管理系统

TOC springboot208基于springboot物流管理系统 第1章 绪论 1.1 研究背景 互联网时代不仅仅是通过各种各样的电脑进行网络连接的时代&#xff0c;也包含了移动终端连接互联网进行复杂处理的一些事情。传统的互联网时代一般泛指就是PC端&#xff0c;也就是电脑互联网时代&…

这是啥设计模式-适配模式

有一个广告召回系统&#xff0c;输入用户id就可以给用户推荐相应的广告&#xff0c;一开始我们只有布尔检索和向量检索两种方式。 1. 面向接口编程&#xff0c;而非实现 第一点就是定义接口&#xff0c;客户端关注的是接口&#xff0c;对客户端来说&#xff0c;他只关心检索引…

GPS叉车安全管理系统,远程监控管理车辆,保障叉车资产安全!

叉车的管理和监管一直是一个挑战&#xff0c;九盾叉车监管系统旨在实现对叉车资产的全面监管和管理&#xff0c;结合了GPS车辆定位技术&#xff0c;为您提供了实时、精确的叉车位置信息&#xff0c;从而帮助您更好地管理您的叉车资产。 一、IC卡指纹认证&#xff1a; 确保叉车…