Rotate by cube
by 蔡 育曄
HTML
<button id='switch'>ON</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/stats.js/r16/Stats.min.js"></script>
CSS
body {
overflow: hidden;
}
#degress {
position: absolute;
text-align: center;
bottom: 3%;
right: 44%;
width: 12.4%
}
#switch {
position: absolute;
bottom: 3%;
left: 57%;
}
JavaScript
var renderer, camera, controls, scene, axes, stats;
var arrow, angle = 0, theta2 = 0;
var type = 0, tmp = true;
$('#switch').click(function() {
axes.material.visible = !axes.material.visible;
if (tmp == true) {
$('#switch').text('OFF');
} else {
$('#switch').text('ON');
}
tmp = !tmp;
});
init();
animate();
function buildArrow() {
//設置物體的長、寬、高
let bodyGeometry = new THREE.BoxGeometry(3, 3, 16);
let headGeometry = new THREE.CylinderGeometry(4,4,3,3);
let material = new THREE.MeshNormalMaterial();
let body = new THREE.Mesh(bodyGeometry, material);
var head = new THREE.Mesh(headGeometry, material);
head.rotation.x = Math.PI;
head.position.z = -10;
body.add(head);
let obj = new THREE.Group();
body.position.z = -8;
obj.add(body);
return obj;
}
function init() {
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight); //設置畫面大小
renderer.setClearColor(0x888888);
document.body.appendChild(renderer.domElement);
camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 50; // important
//camera.lookAt (new THREE.Vector3(0,0,0));
controls = new THREE.OrbitControls(camera, renderer.domElement);
scene = new THREE.Scene();
arrow = buildArrow();
scene.add(arrow);
let gridXZ = new THREE.GridHelper(100, 10, 'red', 'white');
// ↑ 設置網格: GridHelper(設置大小,分成幾等份,網格中線顏色,網格線顏色),若分成積數等份,第三格疑似不會起作用
scene.add(gridXZ);
axes = new THREE.AxisHelper(10);
scene.add(axes);
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '8px';
stats.domElement.style.zIndex = 100;
document.body.appendChild(stats.domElement);
window.addEventListener('resize', onWindowResize, false); //事件處理器
}
function onWindowResize() {
var width = window.innerWidth;
var height = window.innerHeight;
camera.aspect = width / height;
...