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

Threejs 实现3D 地图(01)创建基本场景

"d3": "^7.9.0",
"three": "^0.169.0",
"vue": "^3.5.10"
<script setup>
import { onMounted,ref } from 'vue'
import * as THREE from 'three'
import * as d3 from "d3";  //莫开托坐标 矫正地图坐标
import map from './constant/map.json'
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// 拿到页面的宽高
const width = window.innerWidth, height = window.innerHeight;// 创建场景
const scene = new THREE.Scene();
// 将背景颜色设置为白色
scene.background = new THREE.Color("#000000");// 创建相机
const camera = new THREE.PerspectiveCamera(70, width / height, 0.01, 10000);
// 设置相机位置
camera.position.z = 1000;// // 辅助线 AxesHelper
const axesHelper = new THREE.AxesHelper( 500 );
scene.add( axesHelper );// 初始化渲染器
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(width, height);// 设置相机控件轨道控制器OrbitControls
const controls = new OrbitControls(camera, renderer.domElement);
//阻尼 更真实
controls.enableDamping = trueconst initGeom = () => {// 添加一个物体(测试是否显示)const geometry = new THREE.BoxGeometry( 200, 200,200 );const material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );const cube = new THREE.Mesh( geometry, material );scene.add( cube );
}// 渲染页面
const render = () => {// 将场景(scene)和摄像机(camera 加入进来)renderer.render(scene, camera)// 渲染下一帧的时候会调用render函数requestAnimationFrame(render)controls.update()
}const initLight = () => {// 基本光源const ambLight = new THREE.AmbientLight('#ffffff', 0.3)/*** 设置聚光灯相关的的属性*/const spotLight = new THREE.SpotLight(0xFFFFFF); // 聚光灯spotLight.position.set(40, 200, 10);spotLight.castShadow = true; // 只有该属性为true时,该点光源允许产生阴影,并且下列属性可用scene.add(ambLight, spotLight); // 向场景中添加光源
}onMounted(() => {// 添加物体到场景initGeom()// 渲染render()// 设置环境光initLight()// 将渲染加入到页面上document.body.appendChild(renderer.domElement);
})
</script><template><div id="info"></div>
</template><style scoped></style>

下一篇:Threejs 实现3D 地图(02)创建3d 地图-CSDN博客 

http://www.lryc.cn/news/464116.html

相关文章:

  • snmpdelta使用说明
  • Hadoop集群安装
  • VuePress集成到Vue项目的方法
  • 【ROS】ROS局域网下多机通讯方法
  • linux 系统怎么使用
  • Java线程池知识点梳理
  • SFT、RLHF、DPO、IFT —— LLM 微调的进化之路_如何搭建自己的dpo
  • CSS 选择器简单回顾
  • uniapp配置微信小程序分包(分包优化)
  • MySQL-10.DML-添加数据insert
  • ARM/Linux嵌入式面经(四八):tp-link联洲国际
  • 代码实践篇四 形状检测与规则重建
  • JVM(HotSpot):GC之垃圾回收阶段
  • Go 项目如何集成类似mybatisPlus插件呢?GORM走起!!
  • 《深度学习》Dlib库 CNN卷积神经网络 人脸识别
  • 滚雪球学Redis[7.1讲]:Redis实战案例
  • WordPress外部图片本地化插件
  • Linux基础-shell的简单实现
  • Tomcat日志文件详解及catalina.out日志清理方法
  • react 中的hooks中的useState
  • STM32学习笔记---DMA
  • Cesium 实战 - 自定义纹理材质 - 立体墙(旋转材质)
  • 进程间关系与守护进程
  • 金山翻译接口逆向
  • unified-runtime编译与验证
  • 【Python】最详细--基础语法
  • 二叉树基础:什么样的二叉树适合用数组来存储?
  • iTOP-RK3568开发板独立NPU通过算法加特应用到以下的场景
  • Java基于SpringBoot微信小程序的跳蚤市场系统设计与实现(lw+数据库+讲解等)
  • 【分布式微服务云原生】《Redis 的高效之道:线程模型、IO 模型与 Reactor 模型全解析》