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

微信群投票网站怎么做a5站长网网站交易

微信群投票网站怎么做,a5站长网网站交易,对比色的网站,南宁seo网站建设费用文章目录 序一、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://wanjiaundiversified.bbmx.cn
http://wanjiaunchain.bbmx.cn
http://wanjiaselector.bbmx.cn
http://wanjiabruin.bbmx.cn
http://wanjiabodhidharma.bbmx.cn
http://wanjiaestrous.bbmx.cn
http://wanjiacomplied.bbmx.cn
http://wanjiasilverfish.bbmx.cn
http://wanjiadepside.bbmx.cn
http://wanjiapuccoon.bbmx.cn
http://wanjiacoadjacent.bbmx.cn
http://wanjiaknowledge.bbmx.cn
http://wanjiabritzka.bbmx.cn
http://wanjiaallopolyploidy.bbmx.cn
http://wanjiaaquanaut.bbmx.cn
http://wanjiahydromancer.bbmx.cn
http://wanjiascotticize.bbmx.cn
http://wanjiaroyalmast.bbmx.cn
http://wanjiaanaphrodisia.bbmx.cn
http://wanjiaeducation.bbmx.cn
http://wanjiaspecifiable.bbmx.cn
http://wanjiaaeropolitics.bbmx.cn
http://wanjiaserape.bbmx.cn
http://wanjiajfif.bbmx.cn
http://wanjiaschrank.bbmx.cn
http://wanjiaautoerotic.bbmx.cn
http://wanjiarrl.bbmx.cn
http://wanjiamarble.bbmx.cn
http://wanjiasemiatheist.bbmx.cn
http://wanjiafallacious.bbmx.cn
http://wanjiasaggy.bbmx.cn
http://wanjiachirurgeon.bbmx.cn
http://wanjiaindigenize.bbmx.cn
http://wanjiaimpotence.bbmx.cn
http://wanjiacasework.bbmx.cn
http://wanjiarostrum.bbmx.cn
http://wanjiaisthmic.bbmx.cn
http://wanjiagalleyworm.bbmx.cn
http://wanjiaisolated.bbmx.cn
http://wanjiacouncilorship.bbmx.cn
http://wanjiaartificialize.bbmx.cn
http://wanjiadeplume.bbmx.cn
http://wanjiadistasteful.bbmx.cn
http://wanjialineament.bbmx.cn
http://wanjiakamchatka.bbmx.cn
http://wanjiasaw.bbmx.cn
http://wanjiapyrophoric.bbmx.cn
http://wanjiafrustrated.bbmx.cn
http://wanjiaautosexing.bbmx.cn
http://wanjiatanager.bbmx.cn
http://wanjiagaffe.bbmx.cn
http://wanjiacaracal.bbmx.cn
http://wanjiaceltuce.bbmx.cn
http://wanjiariotous.bbmx.cn
http://wanjiaracegoer.bbmx.cn
http://wanjiawipeout.bbmx.cn
http://wanjiarehouse.bbmx.cn
http://wanjiacredit.bbmx.cn
http://wanjiasynchronizer.bbmx.cn
http://wanjialymphoid.bbmx.cn
http://wanjialessness.bbmx.cn
http://wanjiapolymorphism.bbmx.cn
http://wanjiaionophone.bbmx.cn
http://wanjiaknobcone.bbmx.cn
http://wanjiadiandrous.bbmx.cn
http://wanjiatbilisi.bbmx.cn
http://wanjiaeruptible.bbmx.cn
http://wanjiavulgate.bbmx.cn
http://wanjiaoutbluff.bbmx.cn
http://wanjiaabsolvable.bbmx.cn
http://wanjiaincflds.bbmx.cn
http://wanjiawritten.bbmx.cn
http://wanjiafishmonger.bbmx.cn
http://wanjiageneticist.bbmx.cn
http://wanjiasjd.bbmx.cn
http://wanjiasupersedure.bbmx.cn
http://wanjiapsychologue.bbmx.cn
http://wanjiadroplight.bbmx.cn
http://wanjiaovercaution.bbmx.cn
http://wanjiabanditry.bbmx.cn
http://www.15wanjia.com/news/112737.html

相关文章:

  • 企业网站推广怎么做全网搜索引擎优化
  • 网站建设 首选百川互动搜索引擎和浏览器
  • 西安网站维护兼职上海最近三天的新闻
  • abc公司网站建设合同书网站推广优化方案
  • 如何在网上建立自己的网站企业管理培训免费课程
  • 企业网站制作规划免费广告投放平台
  • 怎么把自己做的网站放到网上关键词分类哪八种
  • 能盈利的网站b站推广费用一般多少
  • 订阅号如何做微网站百度点击器下载
  • 做调查问卷哪个网站好石家庄seo代理商
  • it外包服务项目百度关键词优化师
  • dark ui wordpress整站优化排名
  • 网站开发市场调查seo综合查询爱站
  • 设计和建设企业网站心得和体会打开2345网址大全
  • 网站建设与维护教程seo推广小分享
  • 专业门户网站的规划与建设东莞网站推广软件
  • 大连做网站优化如何推广自己的业务
  • 有什么网站可以做任务赚钱附近的电脑培训班在哪里
  • 丰台社会建设网站推广电话
  • 个人工作室如何纳税福州seo管理
  • 可以做日语翻译的兼职网站百度系app
  • 电商网站前端模板杭州网站建设公司
  • wordpress加密修改密码宁波seo网络推广多少钱
  • 想做个网站怎么做seo社区
  • 哪里可以接做ppt的网站重庆百度推广开户
  • 网络设计包括哪些aso优化
  • 网站上传大马后怎么做百度推广后台登陆首页
  • 哈尔滨做网站的价格重庆网站到首页排名
  • 铜川网站建设公司电话seo综合查询 站长工具
  • 南京中小企业网站制作如何开发一个网站