Three.js基础入门(1)

1.场景

场景是three.js最基础的三大要素之一,你的所有要展示的内容都在场景之中,创建的方式十分简单var scene = new Scene() 就可以创建场景对象

2.相机

相机是three.js最基础的三大要素之二,我们做的是一个3D的视图所以需要一个从一个�角度去观察物体,var camera = THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000)这样就可以创建一个最常用的相机,第一个参数是观察视角的角度,第二个是观察场景比例,第三,四个是近景距离远景距离。代表的是观察者的角色

3.渲染器

渲染器是three.js最基础的三大要素之二,是three.js用来渲染图形的引擎,three.js最基础的三大要素之二,我们做的是一个3D的视图所以需要一个从一个�角度去观察物体。

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

我们可以通过api来控制渲染视图的颜色和尺寸

4.坐标系

采用的是右手坐标系来建立模型,为了方便理解我们可以创建坐标系来帮助我们开发var axes=new THREE.AxisHelper(20); scene.add(axes)传入的值是坐标系的长度,把坐标系加入场景才会生效

5.物体

我们的图形都是由各种物体拼接在一起组成的,three.js为我们提供了几种基本的图形,简单说几个

模型及材料

每个物体都是由模型和材料组成的每个物体都有一个定义模型的方法,模型决定物体的形状,材料决定的颜色,纹理等

1.平面
var planeGeo = new THREE.PlaneGeometry(60,20)
var planeMaterial = new THREE.MeshBasicMaterial({color: 0xcccccc})
var plane = new THREE.Mesh(planeGeo, planeMaterial)

THREE.PlaneGeometry创建一个基本的平面,THREE.MeshBasicMaterial创建一个基本的材料在这里我们只添加颜色,然后把材料和模型合成到一起组成平面

2.长方体
var cubeGeo = new THREE.CubeGeometry(4,4,4)
var cubeMaterial = new THREE.MeshLambertMaterial({color: 0xff0000})
var cube = new THREE.Mesh(cubeGeo, cubeMaterial)

THREE.CubeGeometry创建一个长方体三个参数分别代表x,y,z轴的长度其他方法同上

3.球体
var spGeo = new THREE.SphereGeometry(4, 20, 20)
var spMa = new THREE.MeshLambertMaterial({color: 0x7777ff})
var sp = new THREE.Mesh(spGeo, spMa)

6.渲染

我们定义好了物体需要把物体添加到场景中,scene.add(plane)依次把物体添加到场景中,然后我们调用renderer.render(scene, camera)把图形渲染好最后,我们把图形添加到dom元素中,创建一个空的div标签id为webdocument.getElementById('web').appendChild(renderer.domElement)

7.位置

我们默认的物体都会渲染在原点上,我们需要把物体画在我们想要的位置上,我们先来旋转一下平面plane.rotation.x = -0.5*Math.PI将平面旋转90度
plane.position.x = 15将平面在x轴方向上移动15,相应的处理下长方体和球体,还差一个相机的位置的位置,如果不设置我们会什么都看不到,设置一个坐标决定我们是在哪个角度看

cube.position.x = -4
cube.position.y = 2
cube.position.z = 2
sp.position.x = 20
sp.position.y = 4
sp.position.z = 2
camera.position.x = -30
camera.position.y = 40
camera.position.z = 30
camera.lookAt(scene.position)
1.png

现在我们会看到如上图的效果

8.光源

three.js我们可以通过api来控制光,来我们可以控制光的颜色和光的角度,为了性能,默认是不显示阴影的所以我们要开启阴影效果,renderer.shadowMap.enabled = true,我们之前使用的材料apiTHREE.MeshBasicMaterial是不会产生阴影的,所以长方体和球体我们采用THREE.MeshLambertMaterial,需要反射光的物体需要通过api开启阴影

plane.receiveShadow = true
cube.castShadow = true
sp.castShadow = true

这样我们就会看到图形上的阴影

9.动画

three.js中我们调用webGl专门的api来重新渲染,效率比setInterval高,直接看代码

  function renderScene(){
    stats.update()
    cube.rotation.x += 0.03
    step += 0.03
    requestAnimationFrame(renderScene)
    sp.position.x = 20 + (10*Math.cos(step))
    sp.position.y = 2 + (10*Math.abs(Math.sin(step)))
    renderer.render(scene, camera)
  }
  renderScene()

这样就会看到长方体绕着x轴转动,球体在做抛物线来回运动

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容