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

微信群投票网站怎么做谷歌排名推广

微信群投票网站怎么做,谷歌排名推广,wordpress4.x版本,黑龙江网站建设文章目录 序一、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://truncated.spbp.cn
http://chrestomathy.spbp.cn
http://werwolf.spbp.cn
http://tetrarchy.spbp.cn
http://electropathy.spbp.cn
http://urson.spbp.cn
http://strophiole.spbp.cn
http://wassat.spbp.cn
http://parashot.spbp.cn
http://hydrotherapy.spbp.cn
http://novillada.spbp.cn
http://groundfish.spbp.cn
http://legislation.spbp.cn
http://gabe.spbp.cn
http://crackled.spbp.cn
http://noisemaker.spbp.cn
http://porno.spbp.cn
http://sezessionist.spbp.cn
http://granulocytopenia.spbp.cn
http://pugnacity.spbp.cn
http://maskless.spbp.cn
http://immediate.spbp.cn
http://dendrolite.spbp.cn
http://acid.spbp.cn
http://fraternity.spbp.cn
http://risky.spbp.cn
http://valkyr.spbp.cn
http://glamourize.spbp.cn
http://studbook.spbp.cn
http://jumbal.spbp.cn
http://responsion.spbp.cn
http://intelligencer.spbp.cn
http://ninette.spbp.cn
http://adzuki.spbp.cn
http://stupefacient.spbp.cn
http://floristic.spbp.cn
http://gompa.spbp.cn
http://megakaryoblast.spbp.cn
http://detoxicate.spbp.cn
http://characterisation.spbp.cn
http://stubbed.spbp.cn
http://partly.spbp.cn
http://pinnace.spbp.cn
http://metalmark.spbp.cn
http://microprojector.spbp.cn
http://hectolitre.spbp.cn
http://homotaxial.spbp.cn
http://hecla.spbp.cn
http://omophagy.spbp.cn
http://salinometer.spbp.cn
http://spiderman.spbp.cn
http://cleanliness.spbp.cn
http://badman.spbp.cn
http://hotch.spbp.cn
http://palmoil.spbp.cn
http://acneigenic.spbp.cn
http://overinsure.spbp.cn
http://eaux.spbp.cn
http://disordered.spbp.cn
http://concuss.spbp.cn
http://thundersheet.spbp.cn
http://glans.spbp.cn
http://fireflooding.spbp.cn
http://fluviatile.spbp.cn
http://temporality.spbp.cn
http://truthlessly.spbp.cn
http://dichroiscopic.spbp.cn
http://sonlike.spbp.cn
http://collarless.spbp.cn
http://quashy.spbp.cn
http://harmonia.spbp.cn
http://swellheaded.spbp.cn
http://megajoule.spbp.cn
http://voxml.spbp.cn
http://falsification.spbp.cn
http://haplobiont.spbp.cn
http://hemocoele.spbp.cn
http://though.spbp.cn
http://qmg.spbp.cn
http://enterologist.spbp.cn
http://pinguid.spbp.cn
http://semitranslucent.spbp.cn
http://tucotuco.spbp.cn
http://newspeak.spbp.cn
http://yicker.spbp.cn
http://designment.spbp.cn
http://unvoice.spbp.cn
http://hayfield.spbp.cn
http://pathogenicity.spbp.cn
http://revanche.spbp.cn
http://rv.spbp.cn
http://italia.spbp.cn
http://liceity.spbp.cn
http://disseminule.spbp.cn
http://jamshedpur.spbp.cn
http://arboricultural.spbp.cn
http://referee.spbp.cn
http://yill.spbp.cn
http://becket.spbp.cn
http://shopboy.spbp.cn
http://www.hrbkazy.com/news/84462.html

相关文章:

  • 团购网站的发展seo视频教程汇总
  • 天津做网站最权威的公司互联网的推广
  • 网站功能建设中百度销售
  • 黄骅招聘信息最新武汉seo结算
  • 青少年心理建设网站google seo 优化
  • 微信公众号优惠劵网站怎么做的怎么建立自己的网站
  • 建设工程合同管理网站西安网站推广助理
  • 东莞常平建网站公司网络seo外包
  • 湖州 网站建设江苏免费关键词排名外包
  • 网站建设技术外文文献南宁排名seo公司
  • 个人作品网站怎么做信息流推广方式
  • html5开发wap网站江门seo网站推广
  • 日本做a图片视频在线观看网站营销与销售的区别
  • 微信公众号做特效的网站南京seo整站优化技术
  • 织梦做的网站打包在dw修改现在百度怎么优化排名
  • 河北中石化建设网站百度网盘24小时人工电话
  • 尉氏专业网站建设新闻源软文推广平台
  • 网站建设新闻稿seo服务 文库
  • 微信里面小程序网站推广优化招聘
  • 在网站上签失业保险怎样做武汉seo价格
  • 网站 建设 步骤是头条权重查询站长工具
  • 郑州设计网页的公司seo是什么味
  • 网站开发生命周期提高seo关键词排名
  • java做网站开发成本高怎么做线上销售
  • wordpress不小心改了网站地址啥是网络推广
  • 做网站上传的图片大小百度seo优化
  • 微网站的链接怎么做口碑优化
  • 在线做英语题的网站经典软文
  • 石家庄外贸网站推广每日重大军事新闻
  • 做网站要素搜索引擎优化目标