citys

news2024/11/21 2:30:11

城市边界电子围栏

初始化摄像头、灯光等

  let renderer, scene, camera, stats, gui, texture;
  renderer = new THREE.WebGLRenderer({
    logarithmicDepthBuffer: true,
  });
  renderer.setPixelRatio(window.devicePixelRatio);
  renderer.setSize(window.innerWidth, window.innerHeight);
  document.getElementById("hello3D").appendChild(renderer.domElement);

  scene = new THREE.Scene();
  // AxesHelper:辅助观察的坐标系
  const axesHelper = new THREE.AxesHelper(150);
  scene.add(axesHelper);

  camera = new THREE.PerspectiveCamera(30,window.innerWidth / window.innerHeight,0.1,2000);

  // 设置相机 在 threejs 三维坐标系中的位置
  camera.position.set(0, 0, 150);

  const controls = new OrbitControls(camera, renderer.domElement);

  const ambient = new THREE.AmbientLight(0xffffff, 1);
  scene.add(ambient);

城市围栏

以河南省城市数据为例子,边界线 去高德或者datav中自己过去,本样例是使用的高德api获取的处理的边界线
threejs 是以三角形确定面的
以下代码为了后面的贴图,直接创建了uv数组
uv的数据一定要和三角形的数据一致,一个三角形对应三个坐标,可以这样理解:一个面由两个三角形组成,一个三角形对应的uv是三个坐标

const depth = 3;
city.forEach((polygon) => {
  // 三角形点
  const vec3List = [];
  // 三角面
  const faceList = [];

  // uv
  const uvList = [];
  const t0 = [0, 0];
  const t1 = [1, 0];
  const t2 = [1, 1];
  const t3 = [0, 1];

  for (let i = 0; i < polygon.length; i++) {
    let [x, y] = projection(polygon[i]);

    // 根据数组创建三角形点的顺序数组
    vec3List.push([x, y, 0]);
    vec3List.push([x, y, -depth]);
  }
  // 根据三角形点组成面的数组
  for (let i = 0; i < vec3List.length - 2; i++) {
    if (i % 2 == 0) {
      // 下三角
      const face = [
        ...vec3List[i],
        ...vec3List[i + 2],
        ...vec3List[i + 1],
      ];
      Array.prototype.push.apply(faceList, face);
      // uv 一定要和三角形面一致
      const uv = [...t0, ...t1, ...t3];
      Array.prototype.push.apply(uvList, uv);
    } else {
      // 上三角
      const face = [
        ...vec3List[i],
        ...vec3List[i + 2],
        ...vec3List[i + 1],
      ];
      Array.prototype.push.apply(faceList, face);
      const uv = [...t3, ...t2, ...t1];
      Array.prototype.push.apply(uvList, uv);
    }
  }
  const geometryWall = new THREE.BufferGeometry();
  geometryWall.setAttribute(
    "position",
    new THREE.BufferAttribute(new Float32Array(faceList), 3)
  );
  geometryWall.setAttribute(
    "uv",
    new THREE.BufferAttribute(new Float32Array(uvList), 2)
  );
  // 计算法向量
  geometryWall.computeVertexNormals();
  geometryWall.computeBoundingBox();
  const max = geometryWall.boundingBox.max;
  const min = geometryWall.boundingBox.min;
  console.log("max-min:", max, min);
  texture = new THREE.TextureLoader().load(
    "./textures/linearGradient1.png"
  );
  //  texture = generateTexture(128, "#FFD500");
  texture.wrapS = THREE.RepeatWrapping;
  texture.wrapT = THREE.RepeatWrapping;
  const materialWall = new THREE.MeshBasicMaterial({
    color: "#0088ff",
    transparent: true,
    opacity:0.9,
    depthTest: false,
    side: THREE.DoubleSide,
    // map: texture,
  });
  const meshWall = new THREE.Mesh(geometryWall, materialWall);
  meshWall.scale.set(5,5,1)
  meshWall.rotation.x = Math.PI *0.8 

  meshWall.updateMatrix() 
  scene.add(meshWall);
  // 设置 uv贴图
});
renderer.render(scene, camera); //执行渲染操作
// 需要这个,要不坐标系 不显示
const controls = new OrbitControls(camera, renderer.domElement);
function render() {
  renderer.render(scene, camera);
  requestAnimationFrame(render); 
}
render();

效果:
河南省城市围栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何实现单例模式及不同实现方法分析-设计模式

这是 一道面试常考题&#xff1a;&#xff08;经常会在面试中让手写一下&#xff09; 什么是单例模式 【问什么是单例模式时&#xff0c;不要答非所问&#xff0c;给出单例模式有两种类型之类的回答&#xff0c;要围绕单例模式的定义去展开。】 单例模式是指在内存中只会创建…

一颗万能的PD协议芯片,能芯Type-C PD协议芯片“ECP5705”, 它是如何实现PD直流风扇应用呢?

文章目录 文章目录 前言 一、PD风扇方案介绍 二、芯片介绍 三、PD风扇-供电方式 四、能芯科技 PD 协议芯片ECP5705-应用场景 总结 前言 随着USB Type-C接口的普及和PD取电芯片的出现&#xff0c;使得小型家电和电动工具可以通过统一的USB Type-C接口进行充电&#xff0c;极大地…

台灯学生用哪个牌子最好?学生台灯十大名牌排行榜分享

近年来&#xff0c;我们注意到儿童近视的现象呈现出增多且趋于低龄化的趋势。这一变化&#xff0c;部分原因可以归咎于孩子们越来越多地使用电子产品&#xff0c;另一部分则与他们面临的学业压力增加有关。鉴于此&#xff0c;家长们在挑选儿童学习用品时变得格外谨慎&#xff0…

js实现简单计算器词法解析语法解析解释器,带可视化界面

代码 Lexer是词法解析器 Parser是语法解析器 Interpreter 是ast解释器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

【启明智显芯片应用】Model3C芯片4.3寸拼图机应用方案

数据显示&#xff0c;618前期&#xff0c;早教启智、智能玩具、科学启蒙、数字阅读类产品销量增长迅猛。当下&#xff0c;90后新生代父母对于孩子的科学启蒙教育愈发重视&#xff0c;他们在给孩子选择学习产品时&#xff0c;越来越倾向于选择寓教于乐的益智类产品&#xff0c;而…

神奇!你见过生成Prompt的Prompt?

目录 先上干货 这个Prompt是怎么来的 道路是曲折的 总结 PART/ 01 先上干货 你怎么会想到这些场景呢&#xff0c;比如健身计划、英语学习、旅游规划等等&#xff0c;其实挺不好意思的&#xff0c;大家被我骗了&#xff0c;这些都是我使用一个Prompt解决的。 对&#xf…

使用OpenLLM在AMD GPU上的分步指南

Step-by-Step Guide to Use OpenLLM on AMD GPUs — ROCm Blogs 引言 OpenLLM是一个开源平台&#xff0c;旨在促进大型语言模型&#xff08;LLMs&#xff09;的部署和使用&#xff0c;支持多种模型&#xff0c;适应不同的应用&#xff0c;无论是在云环境还是本地环境中。在本教…

何为屎山代码?

在编程界&#xff0c;有一种代码被称为"屎山代码"。这并非指某种编程语言或方法&#xff0c;而是对那些庞大而复杂的项目的一种形象称呼。屎山代码&#xff0c;也被称为"祖传代码"&#xff0c;是历史遗留问题&#xff0c;是前人留给我们的"宝藏"…

丽水职业技术学院:以太彩光网络筑基教育信息化标杆之路

丽水职业技术学院作为教育信息化的先行者,是浙江省首批“浙江省高职高水平学校”、“浙江省教育信息化试点校单位”,也是“浙江省数字校园示范校”的一员。学院紧握“十四五”规划契机,全面加速数字化转型,旨在通过基础网络的革新、数字化教学的深化、信息服务的优化、学生管理…

wma和mp3哪个音质好?让我告诉你哪个更胜一筹

在数字音频领域&#xff0c;WMA和MP3是两种常见的音频格式&#xff0c;它们在网络上的音频传输和储存中都扮演着重要的角色。然而&#xff0c;许多人可能会对这两者之间的音质差异产生疑问&#xff0c;想知道哪一个更适合他们的需求。wma和mp3哪个音质好&#xff1f;在本文中&a…

Transformer介绍

Transformer的诞生 2018年Google发出一篇论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》, BERT模型横空出世, 并横扫NLP领域11项任务的最佳成绩&#xff01; 而在BERT中发挥重要作用的结构就是Transformer, 之后又相继出现XLNET&a…

如何制作MapBox个性化地图

我们在《如何在QGIS中加载MapBox图源》一文中&#xff0c;为你分享了在QGIS中加载MapBox的方法。 现在为你分享如何制作MapBox个性化地图的方法&#xff0c;如果你需要最新版本的QGIS及高清图源&#xff0c;请在文末查看获取软件安装包的方法。 新建地图样式 进入Mapbox Stu…

[2024-06]-[大模型]-[Ollama]- WebUI

主要涉及要部署的前端webui是来源于:https://github.com/open-webui/open-webui 正常就使用: docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-web…

MySQL—多表查询—练习(1)

一、引言 上几篇关于多表查询的基本几个部分全部学习完了。 多表查询的基本类型的查询包括以下&#xff1a; 1、内连接&#xff08;隐式内连接、显示内连接&#xff09;&#xff1a;... [INNER] JOIN ... ON 条件; &#xff09; 2、外连接&#xff08;左外连接、右外连接&…

中国蚁剑 安装教程 2024年5月

2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码&#xff08;两个都要用到&#xff09; github官方下载地址&#xff1a;https://github.com/AntSwordProject/ 参考文档&#xff1a;antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…

iPhone - 为什么姓名和付款都变成灰色?

问题描述 为什么姓名和付款都变成灰色&#xff1f;点开订阅也显示图 2 的无法连接&#xff1f; 原因分析 联网 WIFI 没有对『设置』开放权限。 解决方案 设置 - 无线局域网 - 使用无线局域网与蜂窝网络的App - 找到『设置』应用 - 勾选『无线局域网与蜂窝数据』

品牌渠道健康发展的关键与方法

一个品牌的渠道健康与否对其长期发展至关重要。品牌虽多&#xff0c;但并非所有产品都能成为品牌&#xff0c;创建品牌需大量精力&#xff0c;而让品牌长久健康发展则需多方面努力。 力维网络服务众多知名品牌&#xff0c;总结出一些渠道治理方法供品牌参考。首先&#xff0c;管…

Matlab 2024a 建模基础知识全面指南

一、Matlab简介 1. Matlab是什么&#xff1f; Matlab&#xff08;Matrix Laboratory&#xff09;是由MathWorks公司开发的一个高性能的数值计算环境和编程语言。它以其强大的矩阵运算能力、丰富的工具箱和便捷的数据可视化功能而闻名&#xff0c;广泛应用于科学研究、工程模拟…

IP协议(二)

TOC 一: 网段划分 同一个局域网的主机,要按一定的规则分配IP地址 把一个IP地址分为两部分: 前半部分 ,网络号 >用来表示局域网后半部分,主机号 > 用来区分同一个局域网中的不同主机 同一个局域网内部&#xff0c;主机之间的IP &#xff0c; 网络号相同&#xff0c;主…

进口电动双座调节阀选型-美国品牌

在选型进口电动双座调节阀时&#xff0c;需要综合考虑多个因素以确保选择到最适合的调节阀。以下是一个清晰的选型指南&#xff0c;结合了参考文章中的相关信息&#xff1a; 1. 根据工艺需求确定调节阀类型 流量需求&#xff1a;对于需要大流量调节的场合&#xff0c;双座调节…