65.Three.js案例-使用 MeshNormalMaterial 和 MeshDepthMaterial 创建 3D 图形

65.Three.js案例-使用 MeshNormalMaterial 和 MeshDepthMaterial 创建 3D 图形

实现效果

在该案例中,Three.js 被用来创建一个包含多个 3D 对象的场景。其中包括:

  • 圆环结(TorusKnot)
  • 立方体(Box)
  • 球体(Sphere)

这些对象使用 MeshNormalMaterial 来渲染,并且整个场景背景为白色,所有对象位于一个居中的容器中。

效果

知识点

WebGLRenderer (WebGL 渲染器)

构造器

THREE.WebGLRenderer(parameters)

参数 类型 描述
parameters Object 包含渲染器选项的对象

常用参数:

  • antialias:布尔值,启用抗锯齿以获得更平滑的渲染结果。
  • alpha:布尔值,是否支持透明背景(默认为黑色)。
  • precision:字符串,着色器精度 (highp, mediump, lowp)。
方法
setSize(width, height, updateStyle)

设置渲染器的尺寸。

  • width:渲染器的宽度(像素)。
  • height:渲染器的高度(像素)。
  • updateStyle:是否更新 canvas 的样式尺寸(可选,默认为 true)。
setClearColor(color, opacity)

设置渲染器的清除颜色。

  • color:十六进制颜色值或 CSS 字符串表示的颜色。
  • opacity:透明度(0.0 到 1.0)。

PerspectiveCamera (透视相机)

构造器

THREE.PerspectiveCamera(fov, aspect, near, far)

参数 类型 描述
fov Number 视野角度(单位是度),即垂直视角范围
aspect Number 渲染区域的宽高比(通常用窗口宽度除以高度)
near Number 近裁剪面(相机视图可见范围的最近距离)
far Number 远裁剪面(相机视图可见范围的最远距离)
方法
position.set(x, y, z)

设置相机的位置坐标。

lookAt(vector)

让相机朝向指定的三维坐标点。

Scene (场景)

构造器

THREE.Scene()

用于创建一个空的场景对象,之后可以将相机、灯光、几何体等添加到场景中。

属性
overrideMaterial : Material

如果被赋值,则场景中的所有物体都会使用这个材质进行渲染,常用于调试。

translateX(value)

沿 X 轴移动整个场景。

MeshNormalMaterial (法线材质)

构造器

THREE.MeshNormalMaterial(options)

参数 类型 描述
options Object 可选参数对象

常见参数:

  • wireframe:布尔值,是否显示线框模式。
  • flatShading:布尔值,是否使用平面着色。
  • visible:布尔值,控制材质是否可见。

说明:此材质会根据物体表面的法线方向映射成 RGB 颜色,用于调试模型的表面方向。

TorusKnotGeometry (圆环结几何体)

构造器

THREE.TorusKnotGeometry(radius, tube, tubularSegments, radialSegments, p, q)

参数 类型 描述
radius Number 圆环结的主半径
tube Number 管道的半径
tubularSegments Number 管道分段数(越高越光滑)
radialSegments Number 径向分段数(越高越光滑)
p Number
Vue3 + TypeScript (简称V3TS) 是结合了 Vue.js 的下一代版本 TypeScript 这种强类型的 JavaScript 变体来构建应用的技术组合。手撕甘特图通常是一个时间线视图,用于展示项目的进度、任务分配或计划安排。在 V3TS 中制作甘特图,你可以遵循以下步骤: 1. **环境配置**:首先,确保已安装 Vue CLI v3,并设置支持 TypeScript。可以使用命令 `vue create` 创建一个新的 Vue3项目并选择 TypeScript 作为配置。 2. **引入库**:由于甘特图需要数据驱动,你可能需要引入第三方库如 `antv-g6` 或者 `vis` 来处理图形绘制。通过npm或yarn添加依赖。 3. **声明组件**:创建 TypeScript 类型化的组件,例如 `TaskItem.vue`,其中包含任务对象的数据类型 (`Task`) 方法 (`generateGanttGraph()`). ```typescript import { Component, Prop } from 'vue'; interface Task { id: number; name: string; start: Date; end: Date; } @Component({ // ... }) export default class TaskItem extends Vue { @Prop() task: Task; generateGanttGraph(): void { // 使用甘特图库生成图表逻辑 } } ``` 4. **数据绑定**:在组件内部或父组件中,管理任务列表 (`Task[]`) 并将其绑定到视图上,以便更新显示。 5. **渲染图表**:在组件的模板部分,利用甘特图库提供的 API 渲染任务节点,传递任务数据。 6. **事件监听**:为了动态调整交互,可以添加事件监听器,比如拖拽、点击事件等。 7. **样式定制**:用 CSS 样式美化甘特图,使其符合项目的视觉风格。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MossGrower

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值