3d Three.js:使用鼠标旋转立方体
我正在使用threejs渲染立方体。目前,我实现了一个具有不同纹理的旋转立方体。现在我正在尝试使用鼠标使立方体旋转。在我的例子中,立方体正在旋转:3d Three.js:使用鼠标旋转立方体,3d,three.js,rotation,mouseevent,3d,Three.js,Rotation,Mouseevent,我正在使用threejs渲染立方体。目前,我实现了一个具有不同纹理的旋转立方体。现在我正在尝试使用鼠标使立方体旋转。在我的例子中,立方体正在旋转: function animate() { mesh.rotation.x += .015; mesh.rotation.y += .015; mesh.rotation.y += .015; render(); requestAnimationFrame( animate ); } 现在我有两个选择: 我在
function animate() {
mesh.rotation.x += .015;
mesh.rotation.y += .015;
mesh.rotation.y += .015;
render();
requestAnimationFrame( animate );
}
现在我有两个选择:
var camera;
var scene;
var renderer;
var mesh;
var geometry;
var material1;
var material2;
var material3;
var material4;
var material5;
var material6;
var materials;
var meshFaceMaterial;
init();
animate();
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 30, window.innerWidth / window.innerHeight, 1, 1000);
var light = new THREE.DirectionalLight( 0xffffff );
light.position.set( 0, 1, 1 ).normalize();
scene.add(light);
geometry = new THREE.CubeGeometry( 10, 10, 10);
material1 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub1.jpg') } );
material2 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub2.jpg') } );
material3 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub3.jpg') } );
material4 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub4.jpg') } );
material5 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub5.jpg') } );
material6 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub6.jpg') } );
materials = [material1, material3, material5, material6, material4, material2];
meshFaceMaterial = new THREE.MeshFaceMaterial( materials );
mesh = new THREE.Mesh(geometry, meshFaceMaterial );
mesh.position.z = -50;
scene.add( mesh );
renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.getElementById('render').appendChild( renderer.domElement );
window.addEventListener( 'resize', onWindowResize, false );
render();
}
function animate() {
mesh.rotation.x += .015;
mesh.rotation.y += .015;
mesh.rotation.y += .015;
render();
requestAnimationFrame( animate );
}
function render() {
renderer.render( scene, camera );
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
render();
}
看看代码:
https://codepen.io/kranzy/pen/pEjGqV
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js"></script>
<div id="container"></div>
<script>
var container, stats;
var camera, controls, scene, renderer;
var cross;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000 );
camera.position.z = 10;
controls = new THREE.OrbitControls( camera );
controls.addEventListener( 'change', render );
scene = new THREE.Scene();
// world
geometry = new THREE.CubeGeometry( 10, 10, 10);
/*
material1 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub1.jpg') } );
material2 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub2.jpg') } );
material3 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub3.jpg') } );
material4 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub4.jpg') } );
material5 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub5.jpg') } );
material6 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub6.jpg') } );
materials = [material1, material3, material5, material6, material4, material2];
*/
meshFaceMaterial = /*new THREE.MeshFaceMaterial( materials )*/ new THREE.MeshPhongMaterial({color: 0xff00ff});
mesh = new THREE.Mesh(geometry, meshFaceMaterial );
mesh.position.z = 0;
scene.add( mesh );
// lights
light = new THREE.DirectionalLight( 0xffffff );
light.position.set( 1, 1, 1 );
scene.add( light );
light = new THREE.DirectionalLight( 0x002288 );
light.position.set( -1, -1, -1 );
scene.add( light );
light = new THREE.AmbientLight( 0x222222 );
scene.add( light );
// renderer
renderer = new THREE.WebGLRenderer( { antialias: false } );
renderer.setSize( window.innerWidth, window.innerHeight );
container = document.getElementById( 'container' );
container.appendChild( renderer.domElement );
window.addEventListener( 'resize', onWindowResize, false );
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
render();
}
function animate() {
requestAnimationFrame( animate );
controls.update();
}
function render() {
renderer.render( scene, camera );
}
</script>
var容器,stats;
摄像机、控件、场景、渲染器;
变量交叉;
init();
制作动画();
函数init(){
摄像头=新的三个透视摄像头(60,window.innerWidth/window.innerHeight,11000);
摄像机位置z=10;
控制装置=新的三个控制装置(摄像机);
控件。addEventListener('change',render);
场景=新的三个。场景();
//世界
几何学=新的三次立方测量法(10,10,10);
/*
material1=新的THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub1.jpg')});
material2=新的THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub2.jpg')});
material3=新的THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub3.jpg'))});
material4=新的THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub4.jpg')});
material5=新的三个.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub5.jpg'))});
material6=新的三个.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub6.jpg'))});
材料=[材料1、材料3、材料5、材料6、材料4、材料2];
*/
meshFaceMaterial=/*new THREE.meshFaceMaterial(材质)*/new THREE.MeshPhongMaterial({color:0xff00ff});
网格=新的三个网格(几何体、网格面材质);
网格位置z=0;
场景。添加(网格);
//灯光
灯光=新的三个方向灯光(0xffffff);
光。位置。设置(1,1,1);
场景。添加(灯光);
灯光=新的三方向灯光(0x002288);
灯。位置。设置(-1,-1,-1);
场景。添加(灯光);
灯光=新的三个环境灯光(0x22222);
场景。添加(灯光);
//渲染器
renderer=new THREE.WebGLRenderer({antialas:false});
renderer.setSize(window.innerWidth、window.innerHeight);
container=document.getElementById('container');
container.appendChild(renderer.doElement);
addEventListener('resize',onWindowResize,false);
}
函数onWindowResize(){
camera.aspect=window.innerWidth/window.innerHeight;
camera.updateProjectMatrix();
renderer.setSize(window.innerWidth、window.innerHeight);
render();
}
函数animate(){
请求动画帧(动画);
控件更新();
}
函数render(){
渲染器。渲染(场景、摄影机);
}
您需要设置大于零的camera.position.z
。这就是为什么不能使用OrbitControls。请查看代码:
https://codepen.io/kranzy/pen/pEjGqV
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js"></script>
<div id="container"></div>
<script>
var container, stats;
var camera, controls, scene, renderer;
var cross;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000 );
camera.position.z = 10;
controls = new THREE.OrbitControls( camera );
controls.addEventListener( 'change', render );
scene = new THREE.Scene();
// world
geometry = new THREE.CubeGeometry( 10, 10, 10);
/*
material1 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub1.jpg') } );
material2 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub2.jpg') } );
material3 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub3.jpg') } );
material4 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub4.jpg') } );
material5 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub5.jpg') } );
material6 = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('img/cub6.jpg') } );
materials = [material1, material3, material5, material6, material4, material2];
*/
meshFaceMaterial = /*new THREE.MeshFaceMaterial( materials )*/ new THREE.MeshPhongMaterial({color: 0xff00ff});
mesh = new THREE.Mesh(geometry, meshFaceMaterial );
mesh.position.z = 0;
scene.add( mesh );
// lights
light = new THREE.DirectionalLight( 0xffffff );
light.position.set( 1, 1, 1 );
scene.add( light );
light = new THREE.DirectionalLight( 0x002288 );
light.position.set( -1, -1, -1 );
scene.add( light );
light = new THREE.AmbientLight( 0x222222 );
scene.add( light );
// renderer
renderer = new THREE.WebGLRenderer( { antialias: false } );
renderer.setSize( window.innerWidth, window.innerHeight );
container = document.getElementById( 'container' );
container.appendChild( renderer.domElement );
window.addEventListener( 'resize', onWindowResize, false );
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
render();
}
function animate() {
requestAnimationFrame( animate );
controls.update();
}
function render() {
renderer.render( scene, camera );
}
</script>
var容器,stats;
摄像机、控件、场景、渲染器;
变量交叉;
init();
制作动画();
函数init(){
摄像头=新的三个透视摄像头(60,window.innerWidth/window.innerHeight,11000);
摄像机位置z=10;
控制装置=新的三个控制装置(摄像机);
控件。addEventListener('change',render);
场景=新的三个。场景();
//世界
几何学=新的三次立方测量法(10,10,10);
/*
material1=新的THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub1.jpg')});
material2=新的THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub2.jpg')});
material3=新的THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub3.jpg'))});
material4=新的THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub4.jpg')});
material5=新的三个.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub5.jpg'))});
material6=新的三个.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('img/cub6.jpg'))});
材料=[材料1、材料3、材料5、材料6、材料4、材料2];
*/
meshFaceMaterial=/*new THREE.meshFaceMaterial(材质)*/new THREE.MeshPhongMaterial({color:0xff00ff});
网格=新的三个网格(几何体、网格面材质);
网格位置z=0;
场景。添加(网格);
//灯光
灯光=新的三个方向灯光(0xffffff);
光。位置。设置(1,1,1);
场景。添加(灯光);
灯光=新的三方向灯光(0x002288);
灯。位置。设置(-1,-1,-1);
场景。添加(灯光);
灯光=新的三个环境灯光(0x22222);
场景。添加(灯光);
//渲染器
renderer=new THREE.WebGLRenderer({antialas:false});
renderer.setSize(window.innerWidth、window.innerHeight);
container=document.getElementById('container');
container.appendChild(renderer.doElement);
addEventListener('resize',onWindowResize,false);
}
函数onWindowResize(){
camera.aspect=window.innerWidth/window.innerHeight;
camera.updateProjectMatrix();
renderer.setSize(window.innerWidth、window.innerHeight);
render();
}
函数animate(){
请求动画帧(动画);
控件更新();
}
函数render(){
渲染器。渲染(场景、摄影机);
}
您需要设置大于零的
camera.position.z
。这就是为什么您不能使用OrbitControl。谢谢!它还可以处理html文件中的面材质。现在我想在我的文件中对此进行调整,但不幸的是,我在使用OrbitControls时再次遇到问题:3dcube.js:26 Uncaught TypeError:THREE.OrbitControls不是构造函数,即使在这里它也没有加载修复它。我的错是-我