Three.Js开发WebGL鼠标操作三维场景
Three.Js GitHub地址:点击跳转
Three.Js API说明文档:点击跳转
或复制网页端Three.js源码使用:点击跳转
WEBGL 三维控制器(放置在Script标签下):
var controls = new THREE.OrbitControls(camera,renderer.domElement);
controls.addEventListener('change',()=>{ renderer.render(scene,camera); });
|
OrbitControls 必须将要被控制的相机。该相机不允许是其他任何对象的子级,除非该对象是场景自身。
注意:这里为优化阴影反射效果对聚光灯属性进行了设置调整
spotLight.angle = Math.PI / 10; spotLight.shadow.penumbra = 0.05 spotLight.shadow.mapSize.window = 1024; spotLight.shadow.mapSize.innerHeight = 1024;
|
完整实例代码:
<!doctype html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <title>Demo-01</title> <script src="libs/build/three.js"></script> <script src="libs/js/controls/OrbitControls.js"></script> <style> body{ margin: 0; overflow: hidden; } </style> </head>
<body>
<div id="webGl-output">
</div>
<script> function init(){ var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,2000); var renderer = new THREE.WebGLRenderer(); renderer.setClearColor(new THREE.Color(0xEEEEEE)); renderer.setSize(window.innerWidth,window.innerHeight); renderer.shadowMapEnabled = true; var axes = new THREE.AxesHelper(20); scene.add(axes); var planeGeometry = new THREE.PlaneGeometry(60,20); var PlaneMaterial = new THREE.MeshStandardMaterial({color:0xCCCCCC}); var plane = new THREE.Mesh(planeGeometry,PlaneMaterial); plane.rotation.x = -0.5*Math.PI; plane.position.x = 0; plane.position.y = 0; plane.position.z = 0; plane.castShadow = true; plane.receiveShadow = true; scene.add(plane);
var cubeGeometry = new THREE.BoxGeometry(4,4,4); var cubeMaterial = new THREE.MeshLambertMaterial({color: 0xFFB6C1}); var cube = new THREE.Mesh(cubeGeometry,cubeMaterial); cube.position.x = 0; cube.position.y = 5; cube.position.z = 2; var sphereGeometry = new THREE.SphereGeometry(4,20,20); var sphereMaterial = new THREE.MeshLambertMaterial({color: 0xFFB6C1}); var Sphere = new THREE.Mesh(sphereGeometry,sphereMaterial); Sphere.position.x = 10; Sphere.position.y = 4; Sphere.position.z = 2; cube.castShadow = true; Sphere.castShadow = true; scene.add(cube) scene.add(Sphere);
var spotLight = new THREE.SpotLight(0xFFFFFF); spotLight.position.set(130,130,-130); spotLight.castShadow = true; spotLight.angle = Math.PI / 10; spotLight.shadow.penumbra = 0.05 spotLight.shadow.mapSize.window = 1024; spotLight.shadow.mapSize.innerHeight = 1024;
scene.add(spotLight);
camera.position.x = 30; camera.position.y = 30; camera.position.z = 30; camera.lookAt(scene.position) document.getElementById('webGl-output').appendChild(renderer.domElement); renderer.render(scene,camera);
var controls = new THREE.OrbitControls(camera,renderer.domElement); controls.addEventListener('change',()=>{ renderer.render(scene,camera); });
let T0 = new Date();
function render(){ let T1 = new Date(); let T = T1 - T0; T0 = T1; renderer.render(scene,camera); cube.rotateY(0.001 * T); window.requestAnimationFrame(render); } window.requestAnimationFrame(render); } window.onload = init </script> </body> </html>
|
版權聲明: 此文章版權歸Arvin所有,如有轉載,請註明來自原作者