前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3d弹弹球(加强版)

3d弹弹球(加强版)

作者头像
江南一点雨
发布2019-03-07 11:16:21
5410
发布2019-03-07 11:16:21
举报
文章被收录于专栏:玩转JavaEE

上篇文章带读者完成了一个3d弹弹球,本文我们来继续看看这个3d弹弹球的一个增强版,即给弹弹球添加上光线和阴影。

本文是threejs系列的第四篇,阅读前面的文章有助于更好的理解本文:


1.一个简单的案例,理解threejs中几个基本概念 2.三维世界中的坐标系 3.3d弹弹球


添加灯光

本文的案例在上文的基础上完成,首先通过SpotLight构造一个灯光,添加到场景中,如下:

代码语言:javascript
复制
var spotLight = new THREE.SpotLight(0xffffff);
spotLight.position.set(-40, 60, -10);
spotLight.castShadow = true;
scene.add(spotLight);

构造光源时,参数表示光源的颜色,然后设置光源的位置为(-40,60,-10),这个坐标在三维坐标系的第6卦限中,同时设置castShadow为true,表示这个光源会产生阴影,不过单纯的添加光源,并不能使物体的颜色作出改变,还需要修改组件的材料,代码如下:

代码语言:javascript
复制
var planeGeometry = new THREE.PlaneGeometry(60, 20, 1, 1);
var planeMaterial = new THREE.MeshLambertMaterial({color: 0xcccccc});
var plane = new THREE.Mesh(planeGeometry, planeMaterial);
plane.rotation.x = -0.5 * Math.PI;
plane.position.set(15, 0, 0);
scene.add(plane);
var sphereGeometry = new THREE.SphereGeometry(4, 20, 20);
var sphereMaterial = new THREE.MeshLambertMaterial({color: 0x7777ff, wireframe: true});
var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
sphere.position.set(20, 4, 2);
scene.add(sphere);

和上文相比,这里主要是将物体材料由MeshBasicMaterial转为MeshLambertMaterial,其他的均未变化,最终显示效果如下:

可以看到,球体背光一侧为黑色的,plane离光源远的地方颜色也暗淡(由于gif录制的原因,这里看起来色彩不均匀,实际上是均匀的,读者可以文末下载源码查看)。

作为比较,如果不添加光源,效果如下:

添加阴影

此时并没有阴影展现出来,要使阴影展示出来,需要从三个方面作出改变:1.render支持;2.组件支持;3.灯光支持,其中灯光支持我们在上文已经添加了,render支持和组件支持则未添加,添加方式如下:

代码语言:javascript
复制
render.shadowMapEnabled = true;
plane.receiveShadow = true;
sphere.castShadow = true;

有了阴影支持之后,再来运行,结果如下:

好了,这样一个简单的案例,向读者展示了灯光和阴影的简单用法,有问题欢迎留言讨论。

本文案例:https://github.com/lenve/threejsDemo

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江南一点雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加灯光
  • 添加阴影
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档