当前位置: 首页 > news >正文

黄石做网站联系河南建设工程信息网招标公告

黄石做网站联系,河南建设工程信息网招标公告,wordpress 二级页面,做网站维护的收入怎么确认推荐:用 NSDT编辑器 快速搭建可编程3D场景 在Three.js应用开发中,有时你可能需要为3D场景中的网格绘制2D的包围框,应该怎么做? 朴素的想法是把网格的3D包围框投影到屏幕空间,例如,下图中的绿色框 3D包围框…

在这里插入图片描述

推荐:用 NSDT编辑器 快速搭建可编程3D场景

在Three.js应用开发中,有时你可能需要为3D场景中的网格绘制2D的包围框,应该怎么做?

朴素的想法是把网格的3D包围框投影到屏幕空间,例如,下图中的绿色框 3D包围框, 当将其投影为 2D 时,得到的红色2D包围框,显然比想要的蓝色框大很多:
在这里插入图片描述

正确的做法是先将3D网格投影到屏幕空间,再计算2D包围框。

1、计算单个网格的2D包围框

只需将所有顶点转换为屏幕空间并从中创建一个 2d 边界框:

function computescreenspaceboundingbox(mesh, camera) {var vertices = mesh.geometry.vertices;var vertex = new three.vector3();var min = new three.vector3(1, 1, 1);var max = new three.vector3(-1, -1, -1);for (var i = 0; i < vertices.length; i++) {var vertexworldcoord = vertex.copy(vertices[i]).applymatrix4(mesh.matrixworld);var vertexscreenspace = vertexworldcoord.project(camera);min.min(vertexscreenspace);max.max(vertexscreenspace);}return new three.box2(min, max);
}

生成的 box2 位于标准化屏幕坐标 [-1, 1] 中, 可以通过乘以渲染器高度和宽度的一半来获得像素:

function normalizedtopixels(coord, renderwidthpixels, renderheightpixels) {var halfscreen = new three.vector2(renderwidthpixels/2, renderheightpixels/2)return coord.clone().multiply(halfscreen);
}

2、计算3DObject的2D包围框

更完善的实现需要考虑组、子节点等各种3DObject,其中可能包含多个网格,这需要一个递归实现,代码如下:

function computescreenspaceboundingbox(obj, camera) {var min;var max;// is this an array of objects?if(array.isarray(obj)) {for(var i = 0; i < obj.length; ++i) {let box2 = computescreenspaceboundingbox(obj[i], camera);if(min === undefined) {min = box2.min.clone();max = box2.max.clone();} else {min.min(box2.min);max.max(box2.max);}}}// does this object have geometry?if(obj.geometry !== undefined) {var vertices = obj.geometry.vertices;if(vertices === undefined&& obj.geometry.attributes !== undefined&& 'position' in obj.geometry.attributes) {// buffered geometryvar vertex = new three.vector3();       var pos = obj.geometry.attributes.position;for(var i = 0; i < pos.count * pos.itemsize; i += pos.itemsize){vertex.set(pos.array[i], pos.array[i + 1], pos.array[1 + 2]);var vertexworldcoord = vertex.applymatrix4(obj.matrixworld);var vertexscreenspace = vertexworldcoord.project(camera);if(min === undefined) {min = vertexscreenspace.clone();max = vertexscreenspace.clone();}min.min(vertexscreenspace);max.max(vertexscreenspace);}} else {// regular geometryvar vertex = new three.vector3();       for(var i = 0; i < vertices.length; ++i) {var vertexworldcoord = vertex.copy(vertices[i]).applymatrix4(obj.matrixworld);var vertexscreenspace = vertexworldcoord.project(camera);if(min === undefined) {min = vertexscreenspace.clone();max = vertexscreenspace.clone();}min.min(vertexscreenspace);max.max(vertexscreenspace);}}}// does this object have children?if(obj.children !== undefined) {for(var i = 0; i < obj.children.length; ++i) {let box2 = computescreenspaceboundingbox(obj.children[i], camera);if(min === undefined) {min = box2.min.clone();max = box2.max.clone();} else {min.min(box2.min);max.max(box2.max);}}}return new three.box2(min, max);
}

原文链接:计算3D对象的2D包围框 — BimAnt

http://www.yayakq.cn/news/261614/

相关文章:

  • 网站开发创业计划书财务分析wordpress 文章详情页
  • 海南省网站做网站编写
  • 建立公司网站流程计算机网络培训速成班
  • 毕业设计网站设计中山高端企业网站设计
  • 禹城做网站的公司手机定制网站建设
  • 网站开发语言查看器企业所得税优惠政策最新2023税率
  • 门户网站制作价格表asp网站验证码不显示
  • 合肥网站建设创优昆明网站建设首选
  • jsp可以做网站首页吗江西网站开发公司
  • 怎样做网站建设的程序新乡建设公司网站
  • 石家庄手机网站建设公司通州网站建设是什么
  • 建设网站计划 pptpython创建网页
  • 自建站什么意思企业购 网站建设
  • 做品牌网站的企业网络营销解释
  • 查国外网站备案校园门户网站开发甲方合同
  • 佛山网站建设seo优化外贸营销文案
  • 网站首页设计报价多少简付后wordpress
  • 上海建设行政主管部门网站网站设计一般包括
  • 国外的一个大学生做的匿名社交网站深圳今天最新招聘信息
  • 云南做商城网站多少钱不懂编程如何做网站
  • linux 做网站数据库大连百度推广哪家好
  • 两人做性视频网站杭州滨江的网站建设公司
  • 南宁区建设银行招聘网站电脑商城网站源码
  • 免费的行情软件网站不下载郑州做网站优化运营商
  • 域名网站建设教程重庆网页设计美工
  • 网站建设与管理论文的总结网站开发设计注册
  • 电子商务网站设计与开发手游源码网
  • 微网站 淘宝客网页版传奇游戏排行榜
  • 中山石岐网站建设做学校网站用什么模版
  • 上海易站网站建设全国工程造价咨询企业管理系统