webgl计算包围盒大小

news/2024/11/29 6:29:04/

使用three.js;

代码;

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>第一个three.js 示例</title><style>body {margin: 0;overflow: hidden;}</style><script src="./build/three.js"></script>
</head><body><script>var scene = new THREE.Scene();var geometry = new THREE.SphereGeometry(120, 60, 60); //创建一个球体几何对象var material = new THREE.MeshLambertMaterial({color: 0x0000ff}); //材质var mesh = new THREE.Mesh(geometry, material); //网格模型对象var mesh2 = new THREE.Mesh(geometry, null);scene.add(mesh); //网格模型添加到场景中//点光源var point = new THREE.PointLight(0xffffff);point.position.set(400, 200, 300); //点光源位置scene.add(point); //点光源添加到场景中/*** 相机*/var width = window.innerWidth; //窗口宽度var height = window.innerHeight; //窗口高度var k = width / height; //窗口宽高比var s = 200; //三维场景显示范围控制系数//创建相机var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);camera.position.set(200, 300, 200); //相机位置camera.lookAt(scene.position); //相机方向/*** 渲染器*/var renderer = new THREE.WebGLRenderer();renderer.setSize(width*1/4, height*1/4);//设置渲染区域尺寸renderer.setClearColor(0xffff00, 1); //设置背景颜色document.body.appendChild(renderer.domElement); //body元素中插入canvas对象//执行渲染操作   指定场景、相机作为参数renderer.render(scene, camera);// 包围盒计算模型对象的大小和位置const box3 = new THREE.Box3();box3.expandByObject(mesh); // 计算模型包围盒const size = new THREE.Vector3();box3.getSize(size); // 计算包围盒尺寸// console.log('模型包围盒尺寸',size);alert('box size is: '+ size.x+","+size.y+","+size.z);const center = new THREE.Vector3();box3.getCenter(center); // 计算包围盒中心坐标// console.log('模型中心坐标',center);alert('center: '+ center.x+","+center.y+","+center.z);box3.expandByObject(mesh2); // 计算模型包围盒const size2 = new THREE.Vector3();box3.getSize(size2); // 计算包围盒尺寸alert('box size is: '+ size2.x+","+size2.y+","+size2.z);</script>
</body>
</html>

根据three.js手册;

Box3
    在3D空间中表示一个盒子或立方体。这个的主要目的是表示对象的最小边界框Minimum Bounding Boxes;

运行如下;

 

SphereGeometry的第一个参数是半径,这就对了,直径是240;一个长宽高都是240的立方体就可以包围此球体;

但是SphereGeometry的后2个参数不是球的x和y坐标;根据手册,是,

widthSegments — 水平分段数(沿着经线分段),最小值为3,默认值为8;
heightSegments — 垂直分段数(沿着纬线分段),最小值为2,默认值为6;

看上去比较费解,下回继续;


http://www.ppmy.cn/news/1168281.html

相关文章

Golang实现逻辑编排解释引擎

作者&#xff1a;井卓 文章简介&#xff1a; 逻辑编排提供一站式集成平台&#xff0c;简化了在集成接口、应用和服务时&#xff0c;所涉及的业务逻辑和流程。本文会介绍如何通过ChatGPT学习Golang、以及表达式解释器的实现和Golang解析引擎的基本设计架构。 Golang实现逻辑编…

Linux:用户和权限

Linux&#xff1a;用户和权限 1. 认知root用户1.1 root用户&#xff08;超级管理员&#xff09;1.2 su和exit命令1.3 sudo命令1.3.1 为普通用户配置sudo认证 2. 用户、用户组管理2.1 用户组管理2.2 用户管理2.3 getent命令 3. 查看权限控制3.1 认知权限信息3.1.1 案例 4. 修改权…

FGSM快速梯度符号法非定向攻击代码(PyTorch)

数据集&#xff1a;手写字体识别MNIST 模型&#xff1a;LeNet import torch.nn as nn import torch.nn.functional as F import torch from torchvision import datasets, transforms import matplotlib.pyplot as plt use_cuda True device torch.device("cuda"…

NFT Insider112:The Sandbox聘请Apple高管担任其首席内容官,YGG 将在菲律宾举办Web3游戏峰会

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟世界类&#…

【LeetCode】71. 简化路径

1 问题 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff08;.&#xff09;表示当前目录本身&#xf…

22. containerd使用Devmapper snapshotter讲解

最近一直在跟进的工程是想打造k8e的serverless服务,也就是用VMM虚拟机来跑容器。其中对镜像存储的驱动不再是overlay,需要采用Device-mapper功能来驱动虚拟机的存储、运行。 Devmapper是一个containerd snapshotter插件,它将快照存储在Device-mapper thin-pool中的文件系统…

收藏,安装报错信息汇总,MacOS上安装Adobe等软件/插件报错问题解决合集

打开允许“允许任何来源” 如何打开允许任何来源&#xff1f;在 Finder 菜单栏选择 【前往】 – 【实用工具 】&#xff0c;找到【终端】程序&#xff0c;双击打开&#xff0c;在终端窗口中输入&#xff1a;sudo spctl --master-disable 输入代码后&#xff0c;按【return 回车…

【网络协议】聊聊ICMP与ping是如何测试网络联通性

ICMP协议格式 ping是基于iCMP协议工作的&#xff0c;ICMP全称Internet Control Message Protocol&#xff0c;就是互联网控制报文协议。其实就是有点类似于古代行军打仗&#xff0c;哨探进行前方探明具体情况。 IMCP本身处于网络层&#xff0c;将报文封装在IP包里&#xff0c;…