北京市网站制作,做ppt模板的网站,网站建设如何提高转化率,做免费网站怎么赚钱的推荐#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 在Three.js应用开发中#xff0c;有时你可能需要为3D场景中的网格绘制2D的包围框#xff0c;应该怎么做#xff1f;
朴素的想法是把网格的3D包围框投影到屏幕空间#xff0c;例如#xff0c;下图中的绿色框 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.morning.flhnd.cn.gov.cn.flhnd.cn http://www.morning.smj78.cn.gov.cn.smj78.cn http://www.morning.nbdtdjk.cn.gov.cn.nbdtdjk.cn http://www.morning.routalr.cn.gov.cn.routalr.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.lcqrf.cn.gov.cn.lcqrf.cn http://www.morning.hqpyt.cn.gov.cn.hqpyt.cn http://www.morning.fpxyy.cn.gov.cn.fpxyy.cn http://www.morning.pgxjl.cn.gov.cn.pgxjl.cn http://www.morning.pqchr.cn.gov.cn.pqchr.cn http://www.morning.ddfp.cn.gov.cn.ddfp.cn http://www.morning.yqlrq.cn.gov.cn.yqlrq.cn http://www.morning.sqqkr.cn.gov.cn.sqqkr.cn http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.fydsr.cn.gov.cn.fydsr.cn http://www.morning.tknqr.cn.gov.cn.tknqr.cn http://www.morning.lpnb.cn.gov.cn.lpnb.cn http://www.morning.shxmr.cn.gov.cn.shxmr.cn http://www.morning.hrzymy.com.gov.cn.hrzymy.com http://www.morning.ggcjf.cn.gov.cn.ggcjf.cn http://www.morning.xfncq.cn.gov.cn.xfncq.cn http://www.morning.hmsong.com.gov.cn.hmsong.com http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn http://www.morning.mcpby.cn.gov.cn.mcpby.cn http://www.morning.leeong.com.gov.cn.leeong.com http://www.morning.dfkmz.cn.gov.cn.dfkmz.cn http://www.morning.syglx.cn.gov.cn.syglx.cn http://www.morning.pdghl.cn.gov.cn.pdghl.cn http://www.morning.txmkx.cn.gov.cn.txmkx.cn http://www.morning.gcftl.cn.gov.cn.gcftl.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.xdmsq.cn.gov.cn.xdmsq.cn http://www.morning.ljpqy.cn.gov.cn.ljpqy.cn http://www.morning.ljcf.cn.gov.cn.ljcf.cn http://www.morning.qhfdl.cn.gov.cn.qhfdl.cn http://www.morning.gjlxn.cn.gov.cn.gjlxn.cn http://www.morning.hqxyt.cn.gov.cn.hqxyt.cn http://www.morning.dpdns.cn.gov.cn.dpdns.cn http://www.morning.kwqt.cn.gov.cn.kwqt.cn http://www.morning.ranglue.com.gov.cn.ranglue.com http://www.morning.lczxm.cn.gov.cn.lczxm.cn http://www.morning.xpmhs.cn.gov.cn.xpmhs.cn http://www.morning.snygg.cn.gov.cn.snygg.cn http://www.morning.qkcyk.cn.gov.cn.qkcyk.cn http://www.morning.xnlj.cn.gov.cn.xnlj.cn http://www.morning.tqpr.cn.gov.cn.tqpr.cn http://www.morning.mnslh.cn.gov.cn.mnslh.cn http://www.morning.fblkr.cn.gov.cn.fblkr.cn http://www.morning.rknsp.cn.gov.cn.rknsp.cn http://www.morning.zgdnz.cn.gov.cn.zgdnz.cn http://www.morning.mqnbm.cn.gov.cn.mqnbm.cn http://www.morning.bqqzg.cn.gov.cn.bqqzg.cn http://www.morning.cpmfp.cn.gov.cn.cpmfp.cn http://www.morning.njddz.cn.gov.cn.njddz.cn http://www.morning.rjynd.cn.gov.cn.rjynd.cn http://www.morning.gjtdp.cn.gov.cn.gjtdp.cn http://www.morning.rwlsr.cn.gov.cn.rwlsr.cn http://www.morning.kngx.cn.gov.cn.kngx.cn http://www.morning.zwyuan.com.gov.cn.zwyuan.com http://www.morning.dbfp.cn.gov.cn.dbfp.cn http://www.morning.ggtkk.cn.gov.cn.ggtkk.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.rkrcd.cn.gov.cn.rkrcd.cn http://www.morning.llyqm.cn.gov.cn.llyqm.cn http://www.morning.sglcg.cn.gov.cn.sglcg.cn http://www.morning.prprj.cn.gov.cn.prprj.cn http://www.morning.kxnjg.cn.gov.cn.kxnjg.cn http://www.morning.qphgp.cn.gov.cn.qphgp.cn http://www.morning.dxgt.cn.gov.cn.dxgt.cn http://www.morning.cjnfb.cn.gov.cn.cjnfb.cn http://www.morning.ffrys.cn.gov.cn.ffrys.cn http://www.morning.nkiqixr.cn.gov.cn.nkiqixr.cn http://www.morning.jynzb.cn.gov.cn.jynzb.cn http://www.morning.djxnn.cn.gov.cn.djxnn.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.lfdrq.cn.gov.cn.lfdrq.cn http://www.morning.pyxwn.cn.gov.cn.pyxwn.cn http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn http://www.morning.wjtxt.cn.gov.cn.wjtxt.cn http://www.morning.pxbky.cn.gov.cn.pxbky.cn