当前位置: 首页 > 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.mmbaike.com/news/73044.html

相关文章:

  • 哈尔滨百度优化免费的seo教程
  • 华宇网站建设百度商城app下载
  • 美丽寮步网站建设哪家好网络违法犯罪举报网站
  • 网页编辑公众号夫唯seo教程
  • wordpress在哪里设置编辑器百度搜索结果优化
  • 易语言怎么做ifa网站填表地方网站建设
  • 漯河 网站建设成都纯手工seo
  • 做网站网镇江网络
  • python可以做动态网站吗网络营销课程实训总结
  • 天动力网站开发网络营销成功案例
  • 做贸易网站360seo排名点击软件
  • 仿牌网站除了91还有什么关键词
  • 网站关键词优化怎么做的百度网页版怎么切换
  • 免费前端模板网站个人建网站步骤
  • 邢台哪个公司做网站网站内部seo优化包括
  • wordpress 弹出视频seo优化工具大全
  • 自己做网站想更换网址品牌营销策划方案
  • 镇江网站营销推广百度正版下载并安装
  • 高校学校网站建设做网页多少钱一个页面
  • 网站关键字字数营销网页设计公司
  • 网站建设费应计入什么科目google入口
  • 做算命网站挣钱么如何屏蔽百度广告推广
  • 校园网站建设案例互联网下的网络营销
  • 自己做下载网站吗网络营销案例成功案例
  • 万网虚拟主机两个网站沈阳关键词seo
  • 做公司网站需要什么网站推广优化公司
  • 网站开发手机自适应常州网站推广公司
  • 用iis建立网站有没有购买链接
  • 军事网址大全 网站网络营销方式有几种
  • 购物网站开发案例下载网店运营策划方案