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

服务器有了网站怎么做的今日热点新闻事件2021

服务器有了网站怎么做的,今日热点新闻事件2021,网站系统建设管理制度,网站建设公司怎么样文章目录 序一、1.0.0版本1.新增2.编辑3.导出4.导入 总结 序 要实现一个类似于数字孪生的场景 可以在线、新增、删除模型 、以及编辑模型的颜色、长宽高 然后还要实现 编辑完后 保存为json数据 记录模型数据 既可以导入也可以导出 一、1.0.0版本 1.新增 先拿建议的立方体来…

文章目录

  • 一、1.0.0版本
    • 1.新增
    • 2.编辑
    • 3.导出
    • 4.导入
  • 总结

要实现一个类似于数字孪生的场景 可以在线、新增、删除模型 、以及编辑模型的颜色、长宽高
然后还要实现 编辑完后 保存为json数据 记录模型数据 既可以导入也可以导出

一、1.0.0版本

1.新增

先拿建议的立方体来代替模型
点击新增按钮就新增一个立方体
在这里插入图片描述

2.编辑

点击编辑按钮可以修改坐标 长宽高 颜色等等信息
在这里插入图片描述

3.导出

点击导出按钮 可以导出为json数据格式
在这里插入图片描述

在这里插入图片描述

4.导入

选择导入刚才的json文件
在这里插入图片描述
有一个bug 就是导入后颜色丢失了 点击模型 信息面板的颜色显示正常 渲染颜色丢失
在这里插入图片描述


源码

<template><div id="app" @click="onAppClick"><div id="info"><button @click.stop="addBuilding">新增</button><button @click.stop="showEditor">编辑</button><button @click.stop="exportModelData">导出</button><input type="file" @change="importModelData" ref="fileInput" /></div><div id="editor" v-if="editorVisible" @click.stop><h3>Edit Building</h3><label for="color">Color:</label><input type="color" id="color" v-model="selectedObjectProps.color" /><br /><label for="posX">Position X:</label><inputtype="number"id="posX"v-model="selectedObjectProps.posX"step="0.1"/><br /><label for="posY">Position Y:</label><inputtype="number"id="posY"v-model="selectedObjectProps.posY"step="0.1"/><br /><label for="posZ">Position Z:</label><inputtype="number"id="posZ"v-model="selectedObjectProps.posZ"step="0.1"/><br /><label for="scaleX">Scale X:</label><inputtype="number"id="scaleX"v-model="selectedObjectProps.scaleX"step="0.1"/><br /><label for="scaleY">Scale Y:</label><inputtype="number"id="scaleY"v-model="selectedObjectProps.scaleY"step="0.1"/><br /><label for="scaleZ">Scale Z:</label><inputtype="number"id="scaleZ"v-model="selectedObjectProps.scaleZ"step="0.1"/><br /><label for="rotX">Rotation X:</label><inputtype="number"id="rotX"v-model="selectedObjectProps.rotX"step="0.1"/><br /><label for="rotY">Rotation Y:</label><inputtype="number"id="rotY"v-model="selectedObjectProps.rotY"step="0.1"/><br /><label for="rotZ">Rotation Z:</label><inputtype="number"id="rotZ"v-model="selectedObjectProps.rotZ"step="0.1"/><br /><button @click="applyEdit">保存</button><button @click="deleteBuilding">删除</button></div><div ref="canvasContainer" style="width: 100vw; height: 100vh"></div></div>
</template><script>
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";export default {data() {return {editorVisible: false,selectedObject: null,selectedObjectProps: {color: "#00ff00",posX: 0,posY: 0,posZ: 0,scaleX: 1,scaleY: 1,scaleZ: 1,rotX: 0,rotY: 0,rotZ: 0,},raycaster: null,};},mounted() {this.init();this.animate();window.addEventListener("resize", this.onWindowResize, false);this.loadModelData(); // Load saved model data on page load},methods: {init() {console.log("Initializing Three.js");this.scene = new THREE.Scene();this.scene.background = new THREE.Color(0xcccccc);this.camera = new THREE.PerspectiveCamera(60,window.innerWidth / window.innerHeight,0.1,1000);this.camera.position.set(0, 10, 20);this.renderer = new THREE.WebGLRenderer({ antialias: true });this.renderer.setSize(window.innerWidth, window.innerHeight);this.$refs.canvasContainer.appendChild(this.renderer.domElement);this.controls = new OrbitControls(this.camera, this.renderer.domElement);const light = new THREE.DirectionalLight(0xffffff, 1);light.position.set(5, 10, 7.5);this.scene.add(light);this.raycaster = new THREE.Raycaster();const geometry = new THREE.BoxGeometry(1, 1, 1);const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });this.cube = new THREE.Mesh(geometry, material);this.scene.add(this.cube);},onWindowResize() {this.camera.aspect = window.innerWidth / window.innerHeight;this.camera.updateProjectionMatrix();this.renderer.setSize(window.innerWidth, window.innerHeight);},onAppClick(event) {const mouse = new THREE.Vector2();mouse.x = (event.clientX / window.innerWidth) * 2 - 1;mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;this.raycaster.setFromCamera(mouse, this.camera);const intersects = this.raycaster.intersectObjects(this.scene.children, true);if (intersects.length > 0) {this.selectedObject = intersects[0].object;console.log("Object selected:", this.selectedObject);this.showEditor();}},addBuilding() {const geometry = new THREE.BoxGeometry(1, 1, 1);const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });const building = new THREE.Mesh(geometry, material);building.position.set(Math.random() * 10 - 5, 0.5, Math.random() * 10 - 5);this.scene.add(building);},showEditor() {if (this.selectedObject) {this.editorVisible = true;this.updateEditor(this.selectedObject);}},updateEditor(object) {this.selectedObjectProps.color = `#${object.material.color.getHexString()}`;this.selectedObjectProps.posX = object.position.x;this.selectedObjectProps.posY = object.position.y;this.selectedObjectProps.posZ = object.position.z;this.selectedObjectProps.scaleX = object.scale.x;this.selectedObjectProps.scaleY = object.scale.y;this.selectedObjectProps.scaleZ = object.scale.z;this.selectedObjectProps.rotX = object.rotation.x;this.selectedObjectProps.rotY = object.rotation.y;this.selectedObjectProps.rotZ = object.rotation.z;},applyEdit() {if (this.selectedObject) {const color = this.selectedObjectProps.color;this.selectedObject.material.color.set(color);this.selectedObject.position.set(parseFloat(this.selectedObjectProps.posX),parseFloat(this.selectedObjectProps.posY),parseFloat(this.selectedObjectProps.posZ));this.selectedObject.scale.set(parseFloat(this.selectedObjectProps.scaleX),parseFloat(this.selectedObjectProps.scaleY),parseFloat(this.selectedObjectProps.scaleZ));this.selectedObject.rotation.set(parseFloat(this.selectedObjectProps.rotX),parseFloat(this.selectedObjectProps.rotY),parseFloat(this.selectedObjectProps.rotZ));}},deleteBuilding() {if (this.selectedObject) {this.scene.remove(this.selectedObject);this.selectedObject = null;this.editorVisible = false;}},animate() {requestAnimationFrame(this.animate);this.renderer.render(this.scene, this.camera);this.controls.update();},exportModelData() {const modelData = {objects: this.scene.children.filter((obj) => obj instanceof THREE.Mesh) // 过滤出是 Mesh 对象的物体.map((obj) => ({position: obj.position.toArray(),scale: obj.scale.toArray(),rotation: obj.rotation.toArray(),color: `#${obj.material.color.getHexString()}`,})),};const jsonData = JSON.stringify(modelData);const blob = new Blob([jsonData], { type: "application/json" });const url = URL.createObjectURL(blob);const a = document.createElement("a");a.style.display = "none";a.href = url;a.download = "model_data.json";document.body.appendChild(a);a.click();URL.revokeObjectURL(url);document.body.removeChild(a);},importModelData(event) {const file = event.target.files[0];if (file) {const reader = new FileReader();reader.onload = () => {try {const data = JSON.parse(reader.result);console.log("Imported data:", data); // 输出导入的完整数据,确保格式和内容正确this.clearScene();data.objects.forEach((objData, index) => {const geometry = new THREE.BoxGeometry();// 设置默认颜色为红色const color = new THREE.Color(0xff0000); // 红色// 如果数据中有颜色字段并且是合法的颜色值,则使用数据中的颜色if (objData.color && typeof objData.color === "string") {try {color.set(objData.color);} catch (error) {console.error(`Error parsing color for object ${index}:`, error);}} else {console.warn(`Invalid color value for object ${index}:`, objData.color);}const material = new THREE.MeshStandardMaterial({color: color,metalness: 0.5, // 示例中的金属度设置为0.5,可以根据需求调整roughness: 0.8, // 示例中的粗糙度设置为0.8,可以根据需求调整});const object = new THREE.Mesh(geometry, material);object.position.fromArray(objData.position);object.scale.fromArray(objData.scale);object.rotation.fromArray(objData.rotation);this.scene.add(object);});} catch (error) {console.error("Error importing model data:", error);}};reader.readAsText(file);}},clearScene() {while (this.scene.children.length > 0) {this.scene.remove(this.scene.children[0]);}},saveModelData() {const modelData = {objects: this.scene.children.map((obj) => ({position: obj.position.toArray(),scale: obj.scale.toArray(),rotation: obj.rotation.toArray(),color: `#${obj.material.color.getHexString()}`,})),};localStorage.setItem("modelData", JSON.stringify(modelData));},loadModelData() {const savedData = localStorage.getItem("modelData");if (savedData) {try {const data = JSON.parse(savedData);this.clearScene();data.objects.forEach((objData) => {const geometry = new THREE.BoxGeometry();const material = new THREE.MeshStandardMaterial({color: parseInt(objData.color.replace("#", "0x"), 16),});const object = new THREE.Mesh(geometry, material);object.position.fromArray(objData.position);object.scale.fromArray(objData.scale);object.rotation.fromArray(objData.rotation);this.scene.add(object);});} catch (error) {console.error("Error loading model data from localStorage:", error);}}},},
};
</script><style>
body {margin: 0;overflow: hidden;
}canvas {display: block;
}#info {position: absolute;top: 10px;left: 10px;background: rgba(255, 255, 255, 0.8);padding: 10px;
}#editor {position: absolute;top: 100px;left: 10px;background: rgba(255, 255, 255, 0.8);padding: 10px;
}
</style>

总结

未完待续


文章转载自:
http://wangle.mzpd.cn
http://ascension.mzpd.cn
http://nekoite.mzpd.cn
http://brownian.mzpd.cn
http://epidermoid.mzpd.cn
http://camarilla.mzpd.cn
http://litigiosity.mzpd.cn
http://haulier.mzpd.cn
http://posterity.mzpd.cn
http://matchmaker.mzpd.cn
http://centime.mzpd.cn
http://reprobate.mzpd.cn
http://responsor.mzpd.cn
http://bushelage.mzpd.cn
http://rowdyish.mzpd.cn
http://icteric.mzpd.cn
http://dictum.mzpd.cn
http://flagelliform.mzpd.cn
http://sunscald.mzpd.cn
http://coverley.mzpd.cn
http://straggly.mzpd.cn
http://seafood.mzpd.cn
http://skinflint.mzpd.cn
http://narcomatous.mzpd.cn
http://museum.mzpd.cn
http://yate.mzpd.cn
http://permissively.mzpd.cn
http://corneitis.mzpd.cn
http://pseudologue.mzpd.cn
http://misdeed.mzpd.cn
http://pentose.mzpd.cn
http://howe.mzpd.cn
http://windbreaker.mzpd.cn
http://crosswise.mzpd.cn
http://spherosome.mzpd.cn
http://fishmeal.mzpd.cn
http://mutilator.mzpd.cn
http://pentaerythritol.mzpd.cn
http://inrush.mzpd.cn
http://columbium.mzpd.cn
http://acatalectic.mzpd.cn
http://blustery.mzpd.cn
http://garnishry.mzpd.cn
http://litterbug.mzpd.cn
http://corfam.mzpd.cn
http://upsides.mzpd.cn
http://rascaldom.mzpd.cn
http://lexigraphy.mzpd.cn
http://pleuritic.mzpd.cn
http://prehistoric.mzpd.cn
http://recreational.mzpd.cn
http://conjointly.mzpd.cn
http://misfile.mzpd.cn
http://neoclassic.mzpd.cn
http://chosen.mzpd.cn
http://ellipse.mzpd.cn
http://thule.mzpd.cn
http://zayin.mzpd.cn
http://firstling.mzpd.cn
http://narcomania.mzpd.cn
http://imperfective.mzpd.cn
http://uninvestigated.mzpd.cn
http://selflessly.mzpd.cn
http://planetologist.mzpd.cn
http://synoicous.mzpd.cn
http://gonadotrophin.mzpd.cn
http://grandchildren.mzpd.cn
http://balloonfish.mzpd.cn
http://tune.mzpd.cn
http://exoneration.mzpd.cn
http://pict.mzpd.cn
http://eighteenmo.mzpd.cn
http://fasciated.mzpd.cn
http://tinstone.mzpd.cn
http://crestless.mzpd.cn
http://beatster.mzpd.cn
http://dobsonfly.mzpd.cn
http://hydroquinone.mzpd.cn
http://lithonephrotomy.mzpd.cn
http://archaeologist.mzpd.cn
http://turnix.mzpd.cn
http://hindoo.mzpd.cn
http://salification.mzpd.cn
http://dose.mzpd.cn
http://pluralize.mzpd.cn
http://overrefine.mzpd.cn
http://devotedly.mzpd.cn
http://article.mzpd.cn
http://lambie.mzpd.cn
http://truantry.mzpd.cn
http://parsimoniously.mzpd.cn
http://comparison.mzpd.cn
http://chirrup.mzpd.cn
http://fuzz.mzpd.cn
http://thrombose.mzpd.cn
http://amphitheatre.mzpd.cn
http://culex.mzpd.cn
http://stockpot.mzpd.cn
http://spezia.mzpd.cn
http://electret.mzpd.cn
http://www.15wanjia.com/news/92325.html

相关文章:

  • wordpress文件wordpress南昌seo管理
  • 网站开发服务转包合同网页推广怎么做
  • 网站推广优化教程西安seo经理
  • 怎么建立一个好公司网站企业推广是什么意思
  • 旅游营销型网站建设新品推广活动方案
  • 找供应商去哪个网站武汉seo关键字优化
  • 在网上帮做图片的网站小程序开发教程
  • ec 在线客服 官方网站怎样申请网站注册
  • 优惠券网站怎么做线上推广平台
  • 网站建设与管理下拉列表框百度关键词搜索指数
  • wordpress站点设置使用时间百度下载安装2021
  • 国内bi软件排名seo营销推广公司
  • 珠海住房和建设局网站百度热词
  • 小游戏网站审核怎么做最新的新闻 今天
  • 青浦网站建设公司千锋教育和达内哪个好
  • 域名备案和网站备案是一回事吗临沂森拓网络科技有限公司
  • 湖南省政府办公厅官网江门关键词优化公司
  • 云南域名注册网站建设网络推广公司北京
  • 几分钟弄清楚php做网站厦门seo培训
  • 5星做号宿水软件的网站站长之家ping
  • 织梦网站被黑推广普通话手抄报内容怎么写
  • 移动互联网的主要特点seo培训学校
  • 微信网站是什么意思360免费建站教程
  • 网站服务器怎么做放单平台
  • 没有网怎么安装wordpressseo简单速排名软件
  • 做电商自建网站怎样怎么去推广自己的公司
  • 免费建自己域名的网站网销怎么做
  • 怎么用PHP做网站留言板公司网站推广怎么做
  • 北京招聘网站开发谷歌seo外包公司哪家好
  • 国内最大的网站制作公司网络推广是干嘛的