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>
标签:10,cube,const,three,controls,js,add,mesh,position
From: https://www.cnblogs.com/caroline2016/p/18197566