为THREEJS场景添加光影效果

添加光影效果主要用到的代码如下:

//使渲染器支持阴影贴图

THREE.Render.shadowMapEnabled= true;

//设置灯光阴影属性

//设置灯光生成阴影

THREE.Light.castShadow= true;

//如果是调试状态,还可以把灯光的调试帮助框显示出来

THREE.Light.shadowCameraVisible= true;

//设置阴影贴图质量

THREE.Light.shadowMapWidth = THREE.Light.shadowMapHeight = 1024*4;

//设置模型属性

//设置物体生成阴影

THREE.Mesh.castShadow = true;
//设置物体接收阴影,即其它物体的阴影可以显示在该物体上

THREE.Mesh.receiveShadow= true;

完整的测试代码如下:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<script src="ThreeJS/build/three.js"></script>
<script src="ThreeJS/examples/js/controls/OrbitControls.js"></script>
<script src="ThreeJS/examples/js/loaders/OBJMTLLoader.js"></script>
<script src="ThreeJS/examples/js/loaders/MTLLoader.js"></script>
<script>
    var _scene,_camera,_control,_render,_ambient,_spotLight;
    Init();
    Animate();
    function Init()
    {
        _scene = new THREE.Scene();

        _camera = new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,2000);
        _camera.position.z = 50;

        _render = new THREE.WebGLRenderer();
        //设置渲染器大小
        _render.setSize(window.innerWidth,window.innerHeight);
        //设置渲染器阴影可用
        _render.shadowMapEnabled = true;
        document.body.appendChild(_render.domElement);

        //场景控制器,用以控制场景中的摄相机,方便观察场景
        _control = new THREE.OrbitControls(_camera,_render.domElement);

        //添加环境光
        _ambient = new THREE.AmbientLight(0xffffff);
        _scene.add(_ambient);
        //灯光属性
        _spotLight = new THREE.SpotLight(0xffffff);
        _spotLight.castShadow = true;
        _spotLight.shadowCameraVisible = true;
        _spotLight.position.set(100,100,100);
        //设置阴影贴图精度
        _spotLight.shadowMapWidth = _spotLight.shadowMapHeight = 1024*4;
        _scene.add(_spotLight);
        //加载模型
        LoadModel();
    }
    function Animate()
    {
        requestAnimationFrame(Animate);
        Render();
    }
    function Render()
    {
        //更新摄相机角度
        _control.update();
        _render.render(_scene,_camera);
    }
    function LoadModel()
    {
        //调用OBJMTLLoader加载模型
        var loader = new THREE.OBJMTLLoader();
        loader.load(‘Model/tc_tm/tc.obj‘,‘Model/tc_tm/tc.mtl‘,
        function(obj)
        {
            //traverse:回调,该模型以及所有子模型均执行该函数
            //相当于遍历obj的children数组
            obj.traverse(function(child)
            {
                if (child instanceof THREE.Mesh)
                {
                    //设置模型生成阴影并接收阴影
                    child.castShadow = true;
                    child.receiveShadow = true;
                }
            });
            _scene.add(obj);
        });
    }
</script>
</body>
</html>

效果如下图所示:

远观:

近看:

时间: 2024-11-10 17:05:26

为THREEJS场景添加光影效果的相关文章

Unity 2D游戏开发教程之为游戏场景添加多个地面

Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面.具体的操作方法是: (1)在Project视图里,新建一个文件夹,命名为Prefabs.然后将Hierarchy视图里的Platform对象,拖动到Prefabs文件夹中,如此一来就可以生成一个同名的预置资源,如图2-11所示. 图2-11  通过拖动对象到Project视图的方式,新建预置资源 (

tookit2D使用6——给场景添加音乐

1给单个场景添加音乐1 在2D游戏中取消游戏的3D音效->apply2 创建空的游戏对象——>添加audio source组件——>设置组件属性3 把新创建的游戏对象添加到摄像机的子物体 2在gui按钮中可以直接添加声音,(注意声音的选择,如果点击游戏按钮没有声音是因为声音要等几秒才能发声) 3让所有的场景比方同一个音乐1 创建空的游戏对象——>添加audio source组件——>设置组件属性2 给该对象添加脚本 void Start() { DontDestroyOnLo

Unity3D学习笔记之八为场景添加细节(一)

这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>,下载链接附在第二篇学习笔记中. 我花了30分钟做了一个中等大小的迷宫场景,不知道大家自己发挥,做的场景大小如何. 在完成场景之后,我们看到Hierarchy视图里面的东西已经满了,所以我们先来整理一下Hierarchy视图.创建一个空的游戏物体命名为Environment. 然后来到Hierarchy视图,先讲First Person Controller找到,挪到最上方,然后选中第一个物体,按住

Unity3D学习笔记九为场景添加细节(二)

上节为场景中添加了第一块带有碰撞器的石头,本节我们来利用Prefab,将场景细节都添加进去,并且做的更完善. 这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程<Unity游戏引擎的基础入门视频教程>,下载链接附在第二篇学习笔记中. 继续来到那块已经成形的石头--Boulder旁边,我们可以制作很多石头的Prefab,这样对于丰富我们巨大的场景很有利,我们先来创建第一个石头的Prefab按下Control+D复制一块石头,按住坐标轴拖动出来,按下R调整到缩放工具,按住中心的白色立方体缩小

Threejs场景中的基本组件

总序 相机:决定哪些东西将要在屏幕上渲染 光源:决定对材质会如何显示和生成阴影的使用 物体: 相机中被渲染的对象 Scene场景的几个方法 Scene.add(object);//往场景中添加物体 Scene.remove(object);//场景中去除物体 Scene.children;//Scene的子对象列表:数组吧,包括相机和光源 Scene.getChildByName()//通过物体的name属性访问该物体 在var cude=-时候可以设定cude.name为"方块1"

[微信小游戏+Three.JS]给场景添加反射材质,实现3D水珠移动效果

前几篇博客,我分别加好了3D移动盒子,也给场景加好了天空盒 这篇博客,就给场景再加一些效果 绘制的水珠的源代码来自Three.JS在GitHub上的demo 小游戏所用到的,修改过的JS库,大家可以移步我之前发的博客下载 直接上代码 let THREE = require('libs/three.js') export default class Game3d { constructor() { this.scene = new THREE.Scene(); this.camera = new

在OpenGL中给场景添加光照

为了在OpenGL中使用光照计算,我们需要调用glEnable方法,并用GL_LIGHTING作为参数.这个调用告诉OpenGL在确定场景中每个顶点的颜色时使用光照参数和材料属性.当然,如果我们没有指定任何光照参数和材料属性,那么物体仍将会保持为黑暗的无光照状态. // 启用光照 glEnable(GL_LIGHTING); 一.设置环境光 OpenGL提供了一个全局光源,它只发射环境光.这种光源很有用,它可以照射没有被其它光源直接照射的物体的背面,并且如果场景看上去太暗,可以调节这种全局环境光

为超图三维场景添加屏幕快照功能

1 public static void saveSceneScreenShot(Control control) 2 { 3 Image objImage = getSceneScreenShot(control); 4 if (objImage != null) 5 { 6 SaveFileDialog saveImageDialog = new SaveFileDialog(); 7 saveImageDialog.Title = "场景快照"; 8 saveImageDialo

threejs学习笔记01

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>333</title> <style> html, body { margin: 0; padding: 0; } #three_canvas { position: absolute; width: 100%; height: 100%; }