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
);
相关推荐
李蚊子39 分钟前
从代理提醒到真实响铃:懒熊闹钟的鸿蒙开发实践
前端·harmonyos
IT_陈寒1 小时前
Redis的Lua脚本居然把我的集群搞崩了!
前端·人工智能·后端
计算机魔术师1 小时前
索尼与华纳起诉Anthropic,指控其大规模盗用版权音乐训练Claude
前端
恋猫de小郭1 小时前
AI 时代,一个优化 Flutter 的重复代码工具 Deslop
android·前端·flutter
穗余1 小时前
Typescript let和var区别
前端·javascript·typescript
晓得迷路了1 小时前
栗子前端技术周刊第 144 期 - Rspack 2.2、pnpm 12、Solid 2.0 RC...
前端·javascript·css
YHHLAI1 小时前
前端路由与浏览器历史:从多页应用到单页应用的演进
前端
奈斯先生Vector1 小时前
从“能调用”到“可运营”:AI Agent 进入多模型时代后的架构升级
java·javascript·数据库·人工智能·算法·架构·aigc
Escalating_xu1 小时前
【C++类和对象(上)】从类的定义、封装与对象模型到内存对齐和 this 指针
开发语言·前端·c++