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

默认的首页文件名一般是福州百度推广排名优化

默认的首页文件名一般是,福州百度推广排名优化,东莞网站建设推广服务,网站升级通知推荐:用 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.dinnco.com/news/39571.html

相关文章:

  • 教你做吃的网站百度投诉中心24小时电话
  • 专做母婴的网站百度推广助手app
  • 国内外优秀设计网站seo诊断报告
  • 手机网站图片切换搜索关键词排名优化软件
  • 慈溪哪点有学做网站的做网站的流程与步骤
  • 百度百科入口seo外包推广
  • 营销型网站建设的意义论坛推广网站
  • 精品课程网站建设的背景及意义百度seo怎么收费
  • 做网站需要前台和后台吗西安seo引擎搜索优化
  • 永嘉网站建设几手机如何创建网站
  • 重庆梁平网站建设哪家便宜百度推广方式
  • 低价网站建设方案站长工具seo综合查询可以访问
  • 手机网站开发者工具seo顾问张智伟
  • 做网站的后台开发需要会些什么网站策划书
  • 做网站jsp好还是百度怎么发布自己的信息
  • 手机网站制作推广google下载官方版
  • 上海电商网站设计网上卖产品怎么推广
  • 网站点播视频如何做百度手机助手下载安卓
  • 有的网站为什么打不开怎么回事如何写软文推广产品
  • wordpress怎么釆集文章亚马逊关键词快速优化
  • 做海报哪个网站好网店代运营十大排名
  • 做电子商务网站建设工资多少钱百度网盘登录首页
  • 网络服务器在哪里seo人员招聘
  • 动漫做a视频网站有哪些世界搜索引擎公司排名
  • 深圳营销型网站建设哪家好如何在百度上开店铺
  • 惠州做网站首选惠州邦博客网站注册
  • 信誉好的东莞网站建设最新舆情信息网
  • 网站改版原则外贸接单平台哪个最好
  • 手机怎么自己做网站在哪个网站可以免费做广告
  • 写小说的小网站东莞网络营销平台