【发布时间】:2018-11-04 20:13:20
【问题描述】:
【问题讨论】:
-
我在问题中包含了您的照片,但我不知道它应该如何帮助我们。也请在问题中包含您的代码。如果你想要答案,你必须帮助人们为你解答。
-
查看此处以围绕用户定义的轴旋转:.rotateOnAxis
标签: javascript random three.js rotation axis
【问题讨论】:
标签: javascript random three.js rotation axis
如果您希望一个对象相对于另一个对象定位,则必须将该对象添加为引用对象的子对象。
使用Object3D.add 向对象添加子对象。
看例子:
(function onLoad() {
var container, loader, camera, scene, renderer, controls, mesh, child;
init();
animate();
function init() {
container = document.getElementById('container');
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
container.appendChild(renderer.domElement);
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 100);
camera.position.set(0, -4, -1.5);
loader = new THREE.TextureLoader();
loader.setCrossOrigin("");
scene = new THREE.Scene();
scene.background = new THREE.Color(0xffffff);
scene.add(camera);
window.onresize = resize;
var ambientLight = new THREE.AmbientLight(0x404040);
scene.add(ambientLight);
var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
directionalLight.position.x = -0.75;
directionalLight.position.y = -0.5;
directionalLight.position.z = -1;
scene.add( directionalLight );
controls = new THREE.OrbitControls(camera, renderer.domElement);
var axis = new THREE.AxesHelper(2);
scene.add(axis);
var material = new THREE.MeshPhongMaterial({color:'#f08080'});
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
mesh = new THREE.Mesh(geometry, material);
var material2 = new THREE.MeshPhongMaterial({color:'#8080f0'});
var geometry2 = new THREE.BoxGeometry( 1, 1, 1 );
child = new THREE.Mesh(geometry2, material2);
child.position.x = 1.5;
mesh.add(child);
scene.add(mesh);
}
function resize() {
var aspect = window.innerWidth / window.innerHeight;
renderer.setSize(window.innerWidth, window.innerHeight);
camera.aspect = aspect;
camera.updateProjectionMatrix();
}
function animate() {
child.position.set(0, 0, 0);
child.rotateY(0.02)
child.translateX(1.5);
mesh.position.set(0, 0, 0);
mesh.rotateZ(0.01);
mesh.translateX(1.0);
requestAnimationFrame(animate);
render();
}
function render() {
renderer.render(scene, camera);
}
})();
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<div id="container"></div>
【讨论】:
感谢 Rabbid76 的快速回复。它确实有帮助。
我已经添加了
child.rotateY(0.02);
到上面的代码在动画函数中以随机轴旋转。
我可以知道如何让子框自动旋转吗?
(function onLoad() {
var container, loader, camera, scene, renderer, controls, mesh, child;
init();
animate();
function init() {
container = document.getElementById('container');
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
container.appendChild(renderer.domElement);
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 100);
camera.position.set(0, -4, -1.5);
loader = new THREE.TextureLoader();
loader.setCrossOrigin("");
scene = new THREE.Scene();
scene.background = new THREE.Color(0xffffff);
scene.add(camera);
window.onresize = resize;
var ambientLight = new THREE.AmbientLight(0x404040);
scene.add(ambientLight);
var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
directionalLight.position.x = -0.75;
directionalLight.position.y = -0.5;
directionalLight.position.z = -1;
scene.add( directionalLight );
controls = new THREE.OrbitControls(camera, renderer.domElement);
var axis = new THREE.AxesHelper(2);
scene.add(axis);
var material = new THREE.MeshPhongMaterial({color:'#f08080'});
var geometry = new THREE.BoxGeometry( 1, 1, 1 );
mesh = new THREE.Mesh(geometry, material);
var material2 = new THREE.MeshPhongMaterial({color:'#8080f0'});
var geometry2 = new THREE.BoxGeometry( 1, 1, 1 );
child = new THREE.Mesh(geometry2, material2);
child.position.x = 1.5;
mesh.add(child);
scene.add(mesh);
}
function resize() {
var aspect = window.innerWidth / window.innerHeight;
renderer.setSize(window.innerWidth, window.innerHeight);
camera.aspect = aspect;
camera.updateProjectionMatrix();
}
function animate() {
child.position.set(0, 0, 0);
child.rotateY(0.02)
child.translateX(1.5);
mesh.position.set(0, 0, 0);
mesh.rotateZ(0.01);
mesh.translateX(1.0);
requestAnimationFrame(animate);
render();
}
function render() {
renderer.render(scene, camera);
}
})();
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<div id="container"></div>
【讨论】: