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

织梦网站如何做地区分站友情链接发布网

织梦网站如何做地区分站,友情链接发布网,做网站需要学php吗,备案期间怎么关闭网站深度测试 介绍 vtkPixelSpaceCallbackMapper 遍历其输入数据集的点,使用来自活动摄像头的变换来计算每个点的屏幕坐标。 效果 核心代码 深度图绘制 function initializeDebugHandler() {const { renderWindow } context.current;const debugCanvas debugCanva…

深度测试

介绍

vtkPixelSpaceCallbackMapper 遍历其输入数据集的点,使用来自活动摄像头的变换来计算每个点的屏幕坐标。

效果

在这里插入图片描述

核心代码

深度图绘制

 function initializeDebugHandler() {const { renderWindow } = context.current;const debugCanvas = debugCanvasRef.current;const debugCtx = debugCanvas.getContext("2d", { willReadFrequently: true });const debugCanvasSize = 1 / 4;let dbgWidth = 0;let dbgHeight = 0;let lastDepthBuffer = null;debugCanvas.addEventListener("click", (evt) => {evt.preventDefault();evt.stopPropagation();const x = (evt.pageX - debugCanvas.offsetLeft) / debugCanvasSize;const y = (evt.pageY - debugCanvas.offsetTop) / debugCanvasSize;if (lastDepthBuffer && dbgWidth > 0 && dbgHeight > 0) {const dIdx =((dbgHeight - 1 - Math.floor(y)) * dbgWidth + Math.floor(x)) * 4;const r = lastDepthBuffer[dIdx] / 255;const g = lastDepthBuffer[dIdx + 1] / 255;let z = (r * 256 + g) / 257;z = z * 2 - 1; // scale depths from [0, 1] into [-1, 1]console.log(`depth at (${x}, ${y}) is ${z}`);const activeCamera = renderWindow.getRenderers()[0].getActiveCamera();const crange = activeCamera.getClippingRange();console.log(`current clipping range: [${crange[0]}, ${crange[1]}]`);} else {console.log(`click(${x}, ${y})`);}});return {update: (coordsList, depthBuffer) => {debugCtx.fillStyle = "rgba(255, 255, 255, 1.0)";debugCtx.clearRect(0, 0, dbgWidth, dbgHeight);if (!depthBuffer) {console.error("Expected a depthBuffer!");return;}lastDepthBuffer = depthBuffer;if (dbgWidth === 0 || dbgHeight === 0) {console.log("No size yet, cannot draw debug canvas");return;}const depthRange = [10000000, -10000000];const imageData = debugCtx.getImageData(0, 0, dbgWidth, dbgHeight);const data = imageData.data;for (let y = 0; y < imageData.height; y += 1) {for (let x = 0; x < imageData.width; x += 1) {// Going back to the raw pixels again here, so they need to be// flipped in y as the Core/PixelSpaceCallbackMapper already did.const dIdx = ((imageData.height - 1 - y) * imageData.width + x) * 4;const r = depthBuffer[dIdx] / 255;const g = depthBuffer[dIdx + 1] / 255;const z = (r * 256 + g) / 257;// z = (z * 2) - 1;   // scale depths from [0, 1] into [-1, 1]const zColor = affine(z, 0, 1, 0, 255);const pIdx = (y * imageData.width + x) * 4;data[pIdx] = zColor;data[pIdx + 1] = zColor;data[pIdx + 2] = zColor;data[pIdx + 3] = 255;if (z < depthRange[0]) {depthRange[0] = z;}if (z > depthRange[1]) {depthRange[1] = z;}// z = (z * 2) - 1;   // scale depths from [0, 1] into [-1, 1]// const pdepth = depthValues[dIdx] * 255;// const pdepth = affine(depthValues[dIdx], depthRange.min, depthRange.max, 0, 255);// const pIdx = ((y * imageData.width) + x) * 4;// data[pIdx] = pdepth;// data[pIdx + 1] = pdepth;// data[pIdx + 2] = pdepth;// data[pIdx + 3] = 255;}}debugCtx.putImageData(imageData, 0, 0);// console.log(`depth range: [${depthRange[0]}, ${depthRange[1]}], delta: ${depthRange[1] - depthRange[0]}`);},resize: (w, h) => {console.log(`Debug canvas resize: [${w}, ${h}]`);// const aspect = w / h;// const sw = w * debugCanvasSize;// const sh = sw / aspect;debugCanvas.setAttribute("width", `${w}px`);debugCanvas.setAttribute("height", `${h}px`);dbgWidth = w;dbgHeight = h;},};}	

主要流程

  useEffect(() => {const renderWindow = vtkRenderWindow.newInstance();const renderer = vtkRenderer.newInstance({ background: [0.2, 0.3, 0.4] });renderWindow.addRenderer(renderer);context.current = {renderWindow,};const pointMapper = vtkSphereMapper.newInstance({ radius: 0.5 });const pointActor = vtkActor.newInstance();pointMapper.setInputData(pointPoly);pointActor.setMapper(pointMapper);const planeMapper = vtkMapper.newInstance();const planeActor = vtkActor.newInstance();planeMapper.setInputData(planePoly);planeActor.setMapper(planeMapper);const psMapper = vtkPixelSpaceCallbackMapper.newInstance();psMapper.setInputData(pointPoly);psMapper.setUseZValues(true);psMapper.setCallback((coordsList, camera, aspect, depthBuffer) => {if (textCtx && windowWidth > 0 && windowHeight > 0) {const dataPoints = psMapper.getInputData().getPoints();const viewMatrix = camera.getViewMatrix();mat4.transpose(viewMatrix, viewMatrix);const projMatrix = camera.getProjectionMatrix(aspect, -1, 1);mat4.transpose(projMatrix, projMatrix);textCtx.clearRect(0, 0, windowWidth, windowHeight);coordsList.forEach((xy, idx) => {const pdPoint = dataPoints.getPoint(idx);const vc = vec3.fromValues(pdPoint[0], pdPoint[1], pdPoint[2]);vec3.transformMat4(vc, vc, viewMatrix);vc[2] += 0.5; // sphere mapper's radiusvec3.transformMat4(vc, vc, projMatrix);console.log(`Distance to camera: point = ${xy[2]}, depth buffer = ${xy[3]}`);if (vc[2] - 0.001 < xy[3]) {textCtx.font = "12px serif";textCtx.textAlign = "center";textCtx.textBaseline = "middle";textCtx.fillText(`p ${idx}`, xy[0], windowHeight - xy[1]);}});const activeCamera = renderWindow.getRenderers()[0].getActiveCamera();const crange = activeCamera.getClippingRange();console.log(`current clipping range: [${crange[0]}, ${crange[1]}]`);}if (enableDebugCanvas && depthBuffer) {if (!debugHandler) {debugHandler = initializeDebugHandler();}debugHandler.update(coordsList, depthBuffer);}});const textActor = vtkActor.newInstance();textActor.setMapper(psMapper);// ----------------------------------------------------------------------------// Add the actor to the renderer and set the camera based on it// ----------------------------------------------------------------------------renderer.addActor(pointActor);renderer.addActor(textActor);renderer.addActor(planeActor);resetCameraPosition();// renderer.resetCamera();// const cp = activeCamera.getPosition();// const cf = activeCamera.getFocalPoint();// console.log(`new cam pos: [${cp[0]}, ${cp[1]}, ${cp[2]}], new cam fp: [${cf[0]}, ${cf[1]}, ${cf[2]}]`);// ----------------------------------------------------------------------------// Use OpenGL as the backend to view the all this// ----------------------------------------------------------------------------const openGLRenderWindow = vtkOpenGLRenderWindow.newInstance();renderWindow.addView(openGLRenderWindow);openGLRenderWindow.setContainer(vtkContainerRef.current);context.current["openGLRenderWindow"] = openGLRenderWindow;const textCanvas = document.createElement("canvas");textCanvas.style.position = "absolute";textCanvas.style.top = "0px";textCanvas.style.left = "0px";vtkContainerRef.current.appendChild(textCanvas);textCtx = textCanvas.getContext("2d");context.current["textCanvas"] = textCanvas;// ----------------------------------------------------------------------------// Setup an interactor to handle mouse events// ----------------------------------------------------------------------------const interactor = vtkRenderWindowInteractor.newInstance();interactor.setView(openGLRenderWindow);interactor.initialize();interactor.setContainer(vtkContainerRef.current);interactor.setInteractorStyle(vtkInteractorStyleTrackballCamera.newInstance());resize();}, []);	

全部代码都放到github上了
新坑_Learning vtkjs_git地址
关注我,我持续更新vtkjs的example学习案例

也欢迎各位给我提意见,技术交流~

大鸿

WeChat : HugeYen
WeChat Public Account : BIM树洞

做一个静谧的树洞君

用建筑的语言描述IT事物;

用IT的思维解决建筑问题;

共建BIM桥梁,聚合团队。

本学习分享资料不得用于商业用途,仅做学习交流!!如有侵权立即删除!!

http://www.dtcms.com/wzjs/321182.html

相关文章:

  • 吉林省住房和城乡建设部网站营销计划
  • wordpress 免费cdnseo外链怎么发
  • 化妆品购物网站排名北京seo如何排名
  • 用静态网站更新什么是口碑营销
  • 建设银行etc信用卡申请网站重庆seo网页优化
  • 西安网站建设g搜索量排名
  • dramwaver做网站接广告推广
  • 如何做设计网站页面设计微信公众号推广
  • php框架做网站好处站长工具seo查询软件
  • 国家城乡建设官方网站关键词指数查询工具
  • 网站框架是怎么做的福州seo代理商
  • 温州企业做网站关键词优化收费标准
  • 建设网站教程百度客服中心人工电话
  • 佛山网站建设培训营销型企业网站建设的内容
  • 网站关键词扩展磁力猫最佳搜索引擎入口
  • 常见的网页布局结构有哪些seopeixun com cn
  • 珠海建站网站模板磁力猫
  • 做网站代下整站优化提升排名
  • 中国建设银行网站宁波网点提高百度搜索排名
  • 全国建设管理信息网站学校seo推广培训班
  • 做单页网站的软件百度seo软件曝光行者seo
  • 优化网站排名推荐公司链接推广平台
  • 公司产品展示网站源码今日新闻 最新消息 大事
  • 南京企业建设网站设计手机如何建立网站
  • 自己怎么做网站啊小广告清理
  • 免费商品列表网页模板源代码安新seo优化排名网站
  • 哪个网站可以做蛋白质的跨膜图长沙免费建站网络营销
  • 网站300m是什么意思重庆网站搭建
  • 哪个网站做的ppt模板好百度信息流代理
  • 兖州建设局网站百度查询入口