在THREE.js中绘制3d边界框

山姆

我可以在three.js示例中使用OBB.js来获取center,halfSize和rotation值。如果我们知道中心,halfSize和旋转矩阵,则如何计算边界框的8个角围绕对象绘制框,如下所示:

{
 center: Vector3
 x: 4.453294992446899
 y: 7.885950803756714
 z: 0.4816467687487602

 halfSize: Vector3
 x: 0.19511961936950684
 y: 0.2595798969268799
 z: 0.34599775820970535

 rotation: Matrix3
 elements: Array(9)
 0: 1
 1: 0
 2: 0
 3: 0
 4: 1
 5: 0
 6: 0
 7: 0
 8: 1
}
囚犯849

像这样的东西:

body{
  overflow: hidden;
  margin: 0;
}
<script type="module">
import * as THREE from "https://cdn.jsdelivr.net/npm/[email protected]/build/three.module.js";
import {OrbitControls} from "https://cdn.jsdelivr.net/npm/[email protected]/examples/jsm/controls/OrbitControls.js";

let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, 1, 1000);
camera.position.set(0, 5, 20);
let renderer = new THREE.WebGLRenderer();
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);

let controls = new OrbitControls(camera, renderer.domElement);

scene.add(new THREE.GridHelper());

let halfSize = new THREE.Vector3( 0.19511961936950684, 0.2595798969268799, 0.34599775820970535);
let rotMat = new THREE.Matrix3().identity();
let rot = new THREE.Matrix4().identity().setFromMatrix3(rotMat);

let g = new THREE.SphereGeometry(1, 36, 18);
g.scale(halfSize.x, halfSize.y, halfSize.z);
let obj = new THREE.Mesh(g, new THREE.MeshNormalMaterial());

obj.position.set( 4.453294992446899, 7.885950803756714, 0.4816467687487602);
obj.rotation.setFromRotationMatrix(rot);
obj.updateMatrixWorld();
scene.add(obj);

let gH = new THREE.BufferGeometry().setFromPoints([
  new THREE.Vector3(1, 1, 1),
  new THREE.Vector3(1, 1, -1),
  new THREE.Vector3(1, -1, -1),
  new THREE.Vector3(1, -1, 1),
  new THREE.Vector3(-1, 1, 1),
  new THREE.Vector3(-1, 1, -1),
  new THREE.Vector3(-1, -1, -1),
  new THREE.Vector3(-1, -1, 1)
]);
gH.setIndex([
  0, 1, 1, 2, 2, 3, 3, 0,
  4, 5, 5, 6, 6, 7, 7, 4,
  0, 4, 1, 5, 2, 6, 3, 7
])
let mH = new THREE.LineBasicMaterial({color: "yellow"});
let oH = new THREE.LineSegments(gH, mH);
oH.scale.copy(halfSize);
oH.position.copy(obj.position);
oH.rotation.setFromRotationMatrix(rot);
scene.add(oH);

renderer.setAnimationLoop( _ => {
  renderer.render(scene, camera);
});
</script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在three.js中确定相机视场的3D边界

来自分类Dev

如何在three.js中从BufferGeometry绘制2D/3D网格

来自分类Dev

使用three.js在3D场景中绘制不规则水

来自分类Dev

JavaScript-具有BufferGeometry的Three.js计算Object3D的边界框

来自分类Dev

JavaScript-具有BufferGeometry的Three.js计算Object3D的边界框

来自分类Dev

Three.js中的多种3D声音

来自分类Dev

在Three.js中链接3d对象

来自分类Dev

Three js 3D rotation

来自分类Dev

THREE.js定向边界框

来自分类Dev

THREE.js定向边界框

来自分类Dev

如何使用three.js绘制自定义3d曲面?

来自分类Dev

如何使用three.js绘制自定义3d曲面?

来自分类Dev

如何使用three.js将3d框放置在另一个3d框内?

来自分类Dev

three.js 3d模型作为超链接

来自分类Dev

Three.js 3D文字弯曲

来自分类Dev

three.js以相同的视角显示3d对象

来自分类Dev

从jsartoolkit和three.js创建3D环境

来自分类Dev

如何拉伸几何图形,使其边界框恰好适合Three.js中的屏幕

来自分类Dev

在three.js中概述一个3d对象

来自分类Dev

初始加载时,在Three.JS Canvas中适合3D对象(Collada文件)

来自分类Dev

如何在three.js中的3D对象上放置透明的颜色蒙版?

来自分类Dev

逐步“显示” Three.js中的3d对象-我这样做对吗?

来自分类Dev

3d法线贴图在Three.js中无法正常工作

来自分类Dev

在Three.js中减去几何(或者实际上是3D编程)

来自分类Dev

Three.js中的操纵杆,游戏手柄或3D鼠标支持

来自分类Dev

拖动以更改Three.js场景中3D模型对象的位置

来自分类Dev

在运行时从 localfile 导入 Three.js 中的 3d 模型

来自分类Dev

在Three.js中绘制网格的边缘

来自分类Dev

Three.js使object3d子级扩展以填充其父级边界

Related 相关文章

热门标签

归档