Three.JS提升学习1:创建场景并渲染三维对象
来源:互联网 发布:拳峰凝胶知乎 编辑:程序博客网 时间:2024/05/24 06:56
本系列学习内容来自《Three.js开发指南:WebGL的JavaScript 3D库》
创建场景并渲染三维对象
代码示例:
<!DOCTYPE html><html> <head> <title></title> <script src="../libs/three.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,1000); // 定义基于WebGL的渲染器 var renderer = new THREE.WebGLRenderer(); // 设置场景背景色 renderer.setClearColorHex(0xEEEEEE); // 设置场景大小 renderer.setSize(window.innerWidth,window.innerHeight); // 创建轴对象 var axes = new THREE.AxisHelper(20); // 添加到场景中 scene.add(axes); // 创建平面 var planeGeometry = new THREE.PlaneGeometry(60,20,1,1); // 平面颜色,创建基本材质 var planeMaterial = new THREE.MeshBasicMaterial({color:0xcccccc}); // 合并到网格对象中 var plane = new THREE.Mesh(planeGeometry,planeMaterial); // 平面绕x轴旋转90度 plane.rotation.x = -0.5*Math.PI; // 网格对象位置 plane.position.x = 15; plane.position.y = 0; plane.position.z = 0; scene.add(plane); // 添加立方体 var cubeGeometry = new THREE.BoxGeometry(4,4,4); var cubeMaterial = new THREE.MeshBasicMaterial({color:0xff0000,wireframe:true}); var cube = new THREE.Mesh(cubeGeometry,cubeMaterial); cube.position.x = -4; cube.position.y = 3; cube.position.z = 0; scene.add(cube); // 添加球体 var sphereGeometry = new THREE.SphereGeometry(4,20,20); var sphereMaterial = new THREE.MeshBasicMaterial({color:0x7777ff,wireframe:true}); var sphere = new THREE.Mesh(sphereGeometry,sphereMaterial); sphere.position.x = 20; sphere.position.y = 4; sphere.position.z = 2; scene.add(sphere); camera.position.x = -30; camera.position.y = 40; camera.position.z= 30; // 摄像机指向场景中心 camera.lookAt(scene.position); document.getElementById("WebGL-output").appendChild(renderer.domElement); renderer.render(scene,camera); }; window.onload=init; </script> </body></html>
代码中有完整注释。
添加材质、光源
基本材质对光源是没有反应的,要对光源有反映,要改变物体的材质。
如:给平面MeshLambertMaterail材质:
// 创建平面 var planeGeometry = new THREE.PlaneGeometry(60,20,1,1); // 平面颜色,创建基本材质 var planeMaterial = new THREE.MeshLambertMaterial({color:0xffffff}); // 合并到网格对象中 var plane = new THREE.Mesh(planeGeometry,planeMaterial);
添加光源:
// 定义光源 var spotLight = new THREE.SpotLight(0xffffff); spotLight.position.set(-40,60,-10); scene.add(spotLight);
同样方法可以给立方体和球体修改材质。
添加阴影效果
- 修改渲染器,添加shadowMapEnabled=true属性
- 给平面加receiveShadow=true
- 给球体立方体加 cube.castShadow=true;
- 给光源添加spotLight.castShadow=true;
完整代码:
<!DOCTYPE html><html> <head> <title></title> <script src="../libs/three.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,1000); // 定义基于WebGL的渲染器 var renderer = new THREE.WebGLRenderer(); // 设置场景背景色 renderer.setClearColorHex(new THREE.Color(0xeeeeee,1.0)); // 设置场景大小 renderer.setSize(window.innerWidth,window.innerHeight); renderer.shadowMapEnabled = true; // 创建轴对象 var axes = new THREE.AxisHelper(20); // 添加到场景中 scene.add(axes); // 创建平面 var planeGeometry = new THREE.PlaneGeometry(60,20,1,1); // 平面颜色,创建基本材质 var planeMaterial = new THREE.MeshLambertMaterial({color:0xffffff}); // 合并到网格对象中 var plane = new THREE.Mesh(planeGeometry,planeMaterial); // 平面绕x轴旋转90度 plane.rotation.x = -0.5*Math.PI; // 网格对象位置 plane.position.x = 15; plane.position.y = 0; plane.position.z = 0; plane.receiveShadow=true; scene.add(plane); // 添加立方体 var cubeGeometry = new THREE.BoxGeometry(4,4,4); var cubeMaterial = new THREE.MeshLambertMaterial({color:0xff0000}); var cube = new THREE.Mesh(cubeGeometry,cubeMaterial); cube.position.x = -4; cube.position.y = 3; cube.position.z = 0; cube.castShadow=true; scene.add(cube); // 添加球体 var sphereGeometry = new THREE.SphereGeometry(4,20,20); var sphereMaterial = new THREE.MeshLambertMaterial({color:0x7777ff}); var sphere = new THREE.Mesh(sphereGeometry,sphereMaterial); sphere.position.x = 20; sphere.position.y = 4; sphere.position.z = 2; sphere.castShadow=true; scene.add(sphere); // 定义光源 var spotLight = new THREE.SpotLight(0xffffff); spotLight.position.set(-40,60,-10); spotLight.castShadow=true; scene.add(spotLight); camera.position.x = -30; camera.position.y = 40; camera.position.z= 30; // 摄像机指向场景中心 camera.lookAt(scene.position); document.getElementById("WebGL-output").appendChild(renderer.domElement); renderer.render(scene,camera); }; window.onload=init; </script> </body></html>
阅读全文
0 0
- Three.JS提升学习1:创建场景并渲染三维对象
- three.js学习点滴(1) — 创建场景
- Three.JS第一个三维场景建立
- 【three.js】创建一个场景
- Three.js 中文手册-创建场景
- three.js第二篇【场景创建】
- 18 Three.js的场景对象
- Three.js学习创建物体
- 用Three.js根据两个三维点创建Cylinder
- 三维场景的渲染优化
- 三维场景的渲染优化
- Three.js创建一个场景(Creating a scene)
- Three.JS学习 4:循环渲染与动画
- Three.js之渲染器
- Three.js之渲染器
- 三维场景的渲染优化(一)
- 三维场景的渲染优化(二)
- 浅谈三维场景的渲染优化
- 仿射变换VS透视变换
- [HNOI2002]营业额统计
- Poj 地震之后(朱-刘算法,亦称Edmond Algorithm) 解题报告
- 性能测试类型之负载测试和压力测试
- loj116 有源汇有上下界最大流
- Three.JS提升学习1:创建场景并渲染三维对象
- QoS配置与管理——4
- SQL RIGHT JOIN(关键字)
- QT 下载
- 插入排序和希尔排序
- SQL FULL JOIN(关键字)
- Linux 环境配置之 安装 Tomcat
- 简单说说正向代理和反向代理
- Vue2单页应用导致的微信支付安全域名问题