2016-08-23 3 views
0

Два вопроса: 1) Почему так трудно найти пример, когда 3D-объект свободно вращающийся в соответствии с движением мыши, например, если бы я сделать следующее для объекта:ThreeJS Объект вращения

object.rotation.x += 1; 

объект.ротация.y + = 1;

Объект не всегда будет вращаться в одинаковой степени, это, кажется, математическая проблема, у кого-то есть пример или математическое объяснение того, как работает ротация, я считаю, что есть что-то, что необходимо реализовать для изменения в центр геометрии.

  1. Если объект имеет более чем два центра геометрии, например, в случае объекта с разными целями морфинга, почему существует только один ограничивающий прямоугольник, есть ли простой способ найти центр геометрии для ограничивающей рамки для каждой цели морфинга, а не только для среднего центра геометрии?

ответ

1

Не уверен, что вы собираетесь, но это что-то вроде этого:

https://jsfiddle.net/72p3z0Lh/27/

var scene = new THREE.Scene(); 
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 

var renderer = new THREE.WebGLRenderer(); 
renderer.setSize(window.innerWidth, window.innerHeight); 
document.body.appendChild(renderer.domElement); 

var screenX = 0; 
var screenY = 0; 

var deltaX = 0; 
var deltaY = 0; 

renderer.domElement.addEventListener('mousemove', function(event) { 

    deltaX = event.screenX - screenX; 
    deltaY = event.screenY - screenY; 

    screenX = event.screenX; 
    screenY = event.screenY; 

}); 

var geometry = new THREE.BoxGeometry(1, 1, 1); 
var material = new THREE.MeshBasicMaterial({ 
    color: 0x00ff00 
}); 
var cube = new THREE.Mesh(geometry, material); 
scene.add(cube); 
camera.position.x = 5; 
camera.position.y= 2; 

camera.lookAt(new THREE.Vector3(0,0,0)); 

cube.geometry.translate(-.5, 0, 0); //Center Offset 

var render = function() { 
    requestAnimationFrame(render); 
    cube.rotateOnAxis(cube.worldToLocal(camera.up.clone()).normalize(), deltaX/20); 
    cube.rotateOnAxis(cube.worldToLocal(camera.getWorldDirection().clone().cross(camera.up)).normalize(), deltaY/20); 

    deltaX = 0; 
    deltaY = 0; 

    renderer.render(scene, camera); 
}; 

render(); 
+0

Спасибо, это почти то, что я ищу, однако, я пытаясь сохранить эту функциональность с добавлением возможности перемещения камеры, я замечаю, что на примере, который вы мне дали, если камера движется, куб больше не вращается. Можете ли вы помочь мне еще раз? –

+0

Исправлено. Теперь он должен вращаться в соответствии с вектором обрамления и вектора камеры. Если это не так, вам может потребоваться выполнить некоторые дополнительные преобразования localToGlobal и/или наоборот в зависимости от настройки камеры. – radthemad4

+0

Большое спасибо, ты потрясающий! :) –

Смежные вопросы