three.js基础之mesh属性

news/2025/1/15 17:49:10/文章来源:https://www.cnblogs.com/caroline2016/p/18197566

mesh之位置、缩放、平移、旋转属性

<canvas id="mesh-properties"></canvas>
<script type="importmap">{"imports": {"three": "./js/build/three.module.js","three/addons/": "./js/jsm/"}}
</script>
<script type="module">import * as THREE from "three";import { GUI } from "three/addons/libs/lil-gui.module.min.js";import { initRenderer, initPerspectiveCamera, initAmbientLight, addPlane, addBox } from "./init.js";const gui = new GUI();const renderer = initRenderer("mesh-properties");const scene = new THREE.Scene();const camera = initPerspectiveCamera();scene.add(camera);const ambientLight = initAmbientLight();scene.add(ambientLight);const axesHelper = new THREE.AxesHelper(150);scene.add(axesHelper);const plane = addPlane();scene.add(plane);const cube = addBox({ color: 0x44ff44 });cube.position.set(0, 4, 0);scene.add(cube);const controls = setupControls();render();function render() {cube.visible = controls.visible;cube.rotation.x = controls.rotationX;cube.rotation.y = controls.rotationY;cube.rotation.z = controls.rotationZ;cube.position.x = controls.translateX;cube.position.y = controls.translateY;cube.position.z = controls.translateZ;cube.scale.set(controls.scaleX, controls.scaleY, controls.scaleZ);requestAnimationFrame(render);renderer.render(scene, camera);}function setupControls() {const controls = new (function () {this.scaleX = 1;this.scaleY = 1;this.scaleZ = 1;this.positionX = 0;this.positionY = 4;this.positionZ = 0;this.rotationX = 0;this.rotationY = 0;this.rotationZ = 0;this.scale = 1;this.translateX = 0;this.translateY = 0;this.translateZ = 0;this.visible = true;this.translate = function () {cube.translateX(controls.translateX);cube.translateY(controls.translateY);cube.translateZ(controls.translateZ);controls.positionX = cube.position.x;controls.positionY = cube.position.y;controls.positionZ = cube.position.z;};})();const guiScale = gui.addFolder("scale");guiScale.add(controls, "scaleX", 0, 5);guiScale.add(controls, "scaleY", 0, 5);guiScale.add(controls, "scaleZ", 0, 5);const guiPosition = gui.addFolder("position");const contX = guiPosition.add(controls, "positionX", -10, 10);const contY = guiPosition.add(controls, "positionY", -4, 20);const contZ = guiPosition.add(controls, "positionZ", -10, 10);contX.listen();contX.onChange(function (value) {cube.position.x = controls.positionX;});contY.listen();contY.onChange(function (value) {cube.position.y = controls.positionY;});contZ.listen();contZ.onChange(function (value) {cube.position.z = controls.positionZ;});const guiRotation = gui.addFolder("rotation");guiRotation.add(controls, "rotationX", -4, 4);guiRotation.add(controls, "rotationY", -4, 4);guiRotation.add(controls, "rotationZ", -4, 4);const guiTranslate = gui.addFolder("translate");guiTranslate.add(controls, "translateX", -10, 10);guiTranslate.add(controls, "translateY", -10, 10);guiTranslate.add(controls, "translateZ", -10, 10);gui.add(controls, "visible");return controls;}
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux平台移植音频芯片实战记录

本文详细记录在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片移植的过程,其他平台操作方法类似,希望为大家提供帮助。本文详细记录在NXP I.MX6ULL+Linux平台下进行WM8960音频芯片移植的过程,其他平台操作方法类似,希望为大家提供帮助。 1. 环境准备 平台: HD6ULL-IOT开发板 …

shared_ptr的概念和一些特性调查

shared_ptr 概念 shared_ptr 是 C++11 中引入的一种智能指针,用于自动管理资源,特别是动态分配的内存。它属于 头文件中定义的智能指针类之一,用于解决动态内存分配中的内存泄漏和资源生命周期管理问题。shared_ptr 通过引用计数机制来实现多个 shared_ptr 实例共享同一资源…

SIEM

背景和介绍 SIEM(Security Information and Event Management,简称SIEM)安全信息和事件管理,最初是被设计为一个工具,辅助企业实现合规和特定行业的规定。从时间维度上讲,SIEM是已经存活了近20年的技术。 其结合安全信息管理(security information management, SIM)和安…

七牛云文件批量上传加单个上传和下载

第一步: 先在七牛云官网注册一个账号 然后点击对象存储-空间管理-新建空间 创建一个存储空间创建好之后就完成了第一步 可以往里面放东西了 第二步: 打开你的VS 创建一个类 改成静态类 方便外部调用 写一个静态的方法/// <summary>/// 上传文件类/// </summary&g…

vue3 ts 集成 tinymce

首先引入 @tinymce/tinymce-vueyarn add @tinymce/tinymce-vue -S 我的版本是 然后写一个组件<template><main id="sample"><Editor v-model="editorData" api-key="j7tvgx4xnptg3cjd63cfnl62z9s78uylw4o7vkkwdljjy91e" :init=…

tinymce 集成 vue3 ts

首先引入 @tinymce/tinymce-vueyarn add @tinymce/tinymce-vue -S 我的版本是 然后写一个组件<template><main id="sample"><Editor v-model="editorData" api-key="j7tvgx4xnptg3cjd63cfnl62z9s78uylw4o7vkkwdljjy91e" :init=…

IBM X3650 M4服务器使用U盘重装系统教程

一、前期准备工作 1、已经制作完成的系统U盘(笔者使用魔术师制作的启动盘) 2、下载好的windows_server_2008_r2镜像 3、下载好的.M5110e阵列卡驱动 二、安装过程 1、将前期准备的镜像、阵列驱动拷贝到优盘根目录下2、优盘插入服务器后启动服务器,开机后会进入图1,等待后在图…

打开、关闭、切换App以及清除App进程,操作so easy!

有很多新手同学经常问到,如何优雅地快速打开、关闭、切换APP以及清除设备应用后台,那么本周我们来分享一下怎么优雅地实现这些操作吧此文章来源于项目官方公众号:“AirtestProject” 版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途#一、前言 很多新手…

稳定、省钱的 ClickHouse 读写分离方案:基于 JuiceFS 的主从架构实践

Jerry 是一家位于北美的科技公司,利用人工智能和机器学习技术,简化汽车保险和贷款的比价和购买流程。在美国,Jerry 的应用在其所属领域排名第一。 随着数据规模的增长,Jerry 在使用 AWS Redshift 时遇到了一些性能与成本的挑战。Jerry 重新设计了系统架构,使用 ClickHouse…

GDCL论文阅读笔记

Diffusion-Based Graph Contrastive Learning for Recommendation with Implicit Feedback论文阅读笔记 Abstract 提出问题: ​ 自监督学习模型大多采用随机辍学来构造附加的图视图,没有区分边的重要性。这些方法在捕获用户-项目交互图的结构属性方面的不足,导致了推荐性能的…

关于IDEA使用xml实现动态sql的问题

如上图,我在mapper层编写了一个list方法用于实现动态sql。 1.导入使用xml文件的mybatis依赖。 2.配置文件的修改 .properties .yml mybatis.mapper-locations=classpath:mapper/*.xml:这个配置项指定了 MyBatis 映射器 XML 文件的位置。 值 classpath:mapper/*.xml 表示 MyBa…

基于LoRa的智慧农业解决方案--ASR6601、SX1278、SX1262

我国《数字乡村发展战略纲要》明确指出“要推进农业数字化转型”,加快推广云计算、大数据、物联网、人工智能在农业生产经营管理中的运用。然而,目前我国的农业数字化转型还面临着诸多挑战。我国整体农业机械化程度和自动化控制水平仍然较低。由于农田面积广袤,大量的区域没…