|
12 | 12 | 2. 为了保证代码简洁,所以在实用某些类时没有添加 `Three.` 前缀
|
13 | 13 | 3. 绝大多数时候都使用箭头函数
|
14 | 14 | 4. 使用 Xxx 泛指同一类型,例如 XxxCamer 泛指各类相机
|
| 15 | +5. 由于我们讲解的是 Three.js,所以全部使用的是 右手坐标系 |
15 | 16 |
|
16 | 17 |
|
17 | 18 |
|
@@ -223,3 +224,41 @@ meshB.matrix.decompose(meshB.position, meshB.quaternion, meshB.scale)
|
223 | 224 |
|
224 | 225 | <br>
|
225 | 226 |
|
| 227 | +#### 07、保持外观和位置的前提下,将立方体的顶点坐标 "归一化" |
| 228 | + |
| 229 | +这里说的立方体是指基于 BoxGeometry 而创建的立方体。 |
| 230 | + |
| 231 | +这里说的 顶点坐标 “归一化” 是指将立方体顶点坐标修改成 1x1x1 规格的立方体顶点坐标。 |
| 232 | + |
| 233 | +这里说的 保持外观和位置 是指通过修改其 变换矩阵 .matrix 来实现。 |
| 234 | + |
| 235 | +实现思路: |
| 236 | + |
| 237 | +1. 凡是基于 BoxGeometry 的立方体,其顶点坐标信息都是统一规范的,尽管其值可能不同 |
| 238 | +2. 所以我们就根据其值来确定这个立方体与 1x1x1 立方体的 宽、高、深 比例 |
| 239 | +3. 将这个缩放比例应用到立方体本身的矩阵中即可 |
| 240 | +4. 同时将这个立方体的顶点信息修改成 1x1x1 立方体的顶点信息 |
| 241 | + |
| 242 | +``` |
| 243 | +const boxGeometryNormalize = (box) => { |
| 244 | + const originX = box.geometry.attributes.position.array[0] |
| 245 | + const originY = box.geometry.attributes.position.array[1] |
| 246 | + const originZ = box.geometry.attributes.position.array[2] |
| 247 | +
|
| 248 | + const scaleX = originX / 0.5 |
| 249 | + const scaleY = originY / 0.5 |
| 250 | + const scaleZ = originZ / 0.5 |
| 251 | + |
| 252 | + box.geometry = new BoxGeometry() |
| 253 | + box.matrixAutoUpdate = false |
| 254 | + box.matrix.makeScale(scaleX, scaleY, scaleZ) |
| 255 | + box.matrix.decompose(box.position, box.quaternion, box.scale) |
| 256 | +} |
| 257 | +``` |
| 258 | + |
| 259 | + |
| 260 | + |
| 261 | +<br> |
| 262 | + |
| 263 | + |
| 264 | + |
0 commit comments