React+three.js之场景(Scene),相机(Camera)

场景THREE.Scene

场景=3d世界的大容器,所有的物体,灯光,模型,网格都要添加到场景里,可以设置背景色,背景贴图,雾化效果,层级

创建场景

javascript 复制代码
const scene = new THREE.Scene();

常用属性和方法

javascript 复制代码
//设置背景颜色
scene.background = new THREE.Color(0x050520); 

//设置背景图片
import bgImg from '@/assets/bg.jpg';
const texture = new THREE.TextureLoader().load(bgImg);
scene.background = texture;

//雾化效果
// 雾类型1:线性雾
scene.fog = new THREE.Fog(0x050520, 10, 50); 
// 参数:雾颜色、开始距离、结束距离

// 雾类型2:指数雾
scene.fog = new THREE.FogExp2(0x050520, 0.02);
// 参数:雾颜色、浓度

//添加物体到场景
scene.add(立方体 / 灯光 / 模型);

//移除物体
scene.remove(立方体);

//遍历所有子元素
scene.traverse((obj) => {
  console.log(obj.name, obj.type);
});

//清空场景
scene.clear();

相机(Camera)

透视相机(PerspectiveCamera)

构造参数含义

javascript 复制代码
const camera = new THREE.PerspectiveCamera(
  fov,       // 视角范围 视野角度
  aspect,    // 画布宽高比 width / height
  near,      // 近裁剪面 小于这个距离不渲染
  far        // 远裁剪面 大于这个距离不渲染
);
  • fov:视野角度 ,越大看得越广、物体越小;一般 45~75
  • aspect:画布宽 / 高,必须和渲染器画布比例一致,否则模型拉伸变形
  • near:最近能看到多近,一般 0.1
  • far:最远能看多远,大屏地图一般 1000 / 2000

相机位置position

javascript 复制代码
// x y z 三轴位置
camera.position.set(0, 0, 5);
// 等价
camera.position.x = 0;
camera.position.y = 0;
camera.position.z = 5;

相机看向某点lookAt

javascript 复制代码
// 看向坐标原点
camera.lookAt(0, 0, 0);
// 看向某个模型
camera.lookAt(立方体.position);

更新相机投影矩阵

javascript 复制代码
camera.updateProjectionMatrix();

正交相机OrthographicCamera

无近大远小。合适2d可视化,地图,二维大屏

javascript 复制代码
const camera = new THREE.OrthographicCamera(
  left,    // 左边界
  right,   // 右边界
  top,     // 上边界
  bottom,  // 下边界
  near,
  far
);
相关推荐
再吃一根胡萝卜26 分钟前
DSH 插件的 Host 与 Client:为什么「只加载了 Host」,以及要不要自己写 Client 加载器
前端
parade岁月43 分钟前
AI 写的前端代码为什么总像 5 年前的?Chrome 官方出手了
前端
新*1 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
tryCbest1 小时前
Vue系列——第 15 篇:内置组件全家桶——Transition、Teleport、Suspense、KeepAlive
前端·vue.js
易师傅1 小时前
技术面试已死?AI 时代,真正拉开程序员差距的是什么?
前端·后端·程序员
jay神2 小时前
基于深度学习的交通流量预测系统(Web 版)
前端·人工智能·深度学习·yolo·计算机毕业设计
OpsEye2 小时前
别再挨个充会员了:多模型编码,最麻烦的从来不是选模型
javascript·ai编程
AiMan2 小时前
别再把秘塔会话逐个点开:这可把秘塔多个会话一次导出?AI导出鸭
前端·后端·面试
AiMan2 小时前
你好,请问可以一键导出Dola多个对话框内容吗?一键导出一整年哦
前端
Moment3 小时前
写给迷茫的应届生,怎样在 AI 时代争取更多机会
前端·后端·面试