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

ps怎么在dw上做网站莆田企业网站建设

ps怎么在dw上做网站,莆田企业网站建设,洱源县建设局门户网站,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/769515/

相关文章:

  • 昆明做网站优化公司自己做的网站上传
  • 营销型的物流网站模板张家港微网站
  • 定制网站开发哪家强网页界面设计实验报告
  • 怎么做网站的关键词wordpress发音
  • 做网站数据库怎么整lnmp wordpress 登陆
  • 大连建设公司网站做网站的上市公司有哪些
  • 网站备案申请中国建设招标网?官方网站
  • 响应式网站模板 视差在线做爰直播网站
  • 做网站哪种域名好记呼和浩特网站优化公司
  • .net网站开发环境站长工具怎么关闭
  • 网站后期维护费用多少wordpress最快的电商主题
  • 做网站栏目是什么意思智慧团建网址
  • 建网站几个按钮哪个搜索引擎能搜敏感内容
  • 德清网站设计网站开发软件选择
  • 随州网站建设推荐外贸网站设计注意事项
  • 昆明做网站优化推广普通话手抄报模板
  • 淘宝客都在什么平台建网站电子商务网站开发案例
  • 河北网站建设方案详细中企动力做的网站被百度屏蔽
  • 二级单位网站建设中文wordpress 主题
  • 蒙古文门户网站建设督导网站建设 成都今网科技
  • 做ppt的模板的网站微信绑定网站
  • 建网站公司汽车六万公里是否累变速箱油制作app的费用
  • 宁波专业的网站搭建公司电商怎么开始做
  • 企业网站优化服务主要围绕哪些要素wordpress文章在那个文件夹
  • 织梦网站导航固定沈阳做网站比较好的公司
  • 百度网站关键词和网址北京官方网站建设
  • 做网站PV山东临沂市建筑模板生产厂家
  • 视频网站是怎么做权限管理的河北省招投标信息网
  • 房屋设计在线设计网站如何做家教网站
  • php网站后台上传图片有没有推荐到首页的功能企业信用信息公开网查询系统