首页 > Web开发 > 详细

Three.js 总结一

时间:2017-01-10 18:04:17      阅读:343      评论:0      收藏:0      [点我收藏+]

三要素:scene(场景)、camera(相机)、renderer(渲染器)

scene变量是一个容器,用来保存并跟踪所有我们想渲染的物体。

camera变量定义了我们能够在渲染好的scene里看到什么。

renderer对象负责计算制定相机角度下,浏览器中scene的样子。

 

三维对象:Plane(平面)、Cube(方块)、Sphere(球体)、Camera(相机)、Axes(轴) 

renderer  

var renderer = new THREE.WebGLRenderer()
renderer.setClearColorHex(0xEEEEEE)
renderer.setSize(window.innerWidth,window.innerHeight)
renderer.shadowMapEnabled = true

setClearColorHex()    设置renderer背景色      

setSize()        设置scene渲染成多大尺寸

shadowMapEnabled  设置是否有阴影   

 

axes  坐标轴

var axes = new THREE.AxisHelper(20)
scene.add(axes)

 

创建平面

定义面板尺寸,宽60高20。创建材质,颜色。把这两个对象合并到名为plane的Mesh对象中。

添加到场景前 首先放置到合适的位置。 先将它绕着x轴旋转90度,然后position定义它在场景中的位置。

var planeGeometry = new THREE.PlaneGeometry(60,20)
var planeMaterial = new THREE.MeshBasicMaterial({color:0xcccccc})
var plane = new THREE.Mesh(planeGeometry,planeMaterial)
plane.rotation.x = -0.5*Math.PI
plane.position.x = 15
plane.position.y = 0
plane.position.z = 0
scene.add(plane)

 

创建光源

var spotLight = new THREE.SpotLight(0xffffff)
spotLight.position.set(-40,60,-10)
scene.add(spotLight)

不同材质对光源的反应不同,基础材质(MeshBasicMaterial)不会对场景中的光源产生反应,只会以制定的颜色渲染物体。

 MeshLambertMaterial,MeshphongMaterial对光源有反应。

 

创建阴影

1、renderer.shadowMapEnabled = true

2、哪个物体接受阴影 哪个物体投射阴影  plane.receiveShadow = true cube.castShadow = true

3、定义光源 不是所有的光源都能产生阴影 spotLight.castShadow = true

 

引入requestAnimationFrame()方法

通过它你可以指定一个函数,按照浏览器定义的时间间隔调用。

function renderScene(){
      requestAnimationFrame(renderScene)
      renderer.render(scene,camera)        
}

递归调用,让动画持续运行。在整个场景创建完毕后,调用一次renderScene()函数来启动动画。

document.getElementById("WebGL-output").appendChild(renderer.domElement)
renderScene()

辅助库:检测动画运行的帧频。当我们显示动画时,该库可以在一个小图片里显示每秒显示的帧数

<script src="../libs/stats.js"></script>
<div id="Stats-output"></div>
function initStats(){
  var stats = new Stats()
  stats.setNode(0)
  stats.domElement.style.position = ‘absolute‘
  stats.domElement.style.left = ‘0px‘
  stats.domElement.style.top = ‘0px‘      
document.getElementById("Statsoutput").appendChild(stats.domElement)   return stats }

$(function(){
  var stats = initStats()
})

 

Three.js 总结一

原文:http://www.cnblogs.com/jszabc/p/6268727.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!