Three.js光源

目录

Three.js入门

Three.js光源

Three.js阴影

Three.js纹理贴图

本文我们将研究three.js中的灯光类型和JavaScript中的光源,探索不同的光源设置。我们的目标是全面理解光源设置和类型,比如环境光、半球光、矩形光、方向光、点光源和聚光灯。我们将逐个介绍它们的属性参数和使用方法。

环境光源

  • 环境光会均匀的照亮场景中的所有物体

环境光类似于一个颜色+强度的最简单的参数,材质的shader中会将其直接作为参数+到最终的颜色信息上,不会进行任何空间上的计算。

环境光的属性:

  • color:环境光的颜色;
  • intensity:光源照射的强度。默认值为1;
  • visible:设为 ture(默认值),光源就会打开。设为 false,光源就会关闭。

使用方法:

// 环境光
const ambientLight = new THREE.AmbientLight(0xffffff, 1);
scene.add(ambientLight);

环境光

半球光源

  • 光源直接放置于场景之上,光照颜色从天空光线颜色渐变到地面光线颜色。
  • 使用半球光源可以创建更加贴切自然的光照效果。

如果不使用这种光源,要模拟室外光照,可以添加一个方向光源来模拟太阳,或者添加一个环境光源来为场景提供基础色。但是这都不自然,因为室外不是所有的光照都来自上方,很多都是来自空气,地面的反射和其他物体的反射。

  • 半球光不能投射阴影。

半球光的属性:

  • color从天空发出的光线的颜色;
  • groundColor:从地面发出的光线的颜色
  • intensity:光源照射的强度。默认值为1;
  • position:光源在场景中的位置。默认值为:(0, 100, 0)
  • visible:设为 ture(默认值),光源就会打开。设为 false,光源就会关闭。

颜色的渐变方向和物体与半球光的位置决定的,物体面向半球光源的部分接收color,背向半球光源的部分接收groundColor

使用方法:

// 半球光
const hemisphereLight = new THREE.HemisphereLight(0xff0000, 0xff0000, 1);
hemisphereLight.position.set(0, 10, 0);
scene.add(hemisphereLight);

半球光

矩形区域光源

  • 矩形区域光光源从一个矩形平面上均匀地发射光线。这种光源可以用来模拟像明亮的窗户或者条状灯光光源;
  • 不支持阴影。

矩形区域光的属性:

  • color:环境光的颜色;
  • intensity:光源照射的强度。默认值为1;
  • width: 光源的宽度,默认值为10;
  • height: 光源的高度,默认值为10;
  • visible:设为 ture(默认值),光源就会打开。设为 false,光源就会关闭。

使用方法:

const rectLight = new THREE.RectAreaLight(0xffffff, 2, 4, 4);
rectLight.position.set(0, 2, 0);
rectLight.lookAt(0, 0, 0);
scene.add(rectLight);

矩形区域光

平行光源

  • 平行光是沿着特定方向发射的光。这种光的表现像是无限远,从它发出的光线都是平行的;

    image

  • 平行光可以投射阴影.

平行光的属性:

  • color平行光线的颜色;
  • intensity:光源照射的强度。默认值为1;
  • position:光源在场景中的位置。默认值为:(0, 100, 0)
  • visible:设为 ture(默认值),光源就会打开。设为 false,光源就会关闭。

使用方法:

const parallelLight = new THREE.DirectionalLight(0xffffff, 1);
parallelLight.position.set(10, 10, 0);
parallelLight.castShadow = true;
scene.add(parallelLight);

平行光

如何产生阴影请参考上一篇文章

点光源

  • 和平行光源类似的效果,区别是电光源是从一个点向各个方向发射的光源。

    image

一个常见的例子是模拟一个灯泡发出的光。

点光源的属性:

  • color点光源的颜色;
  • intensity:光源照射的强度。默认值为1;
  • position:光源在场景中的位置。默认值为:(0, 100, 0)
  • visible:设为 ture(默认值),光源就会打开。设为 false,光源就会关闭。

使用方法:

const pointLight = new THREE.PointLight(0xffffff, 5);
pointLight.position.set(0, 3, 0);
scene.add(pointLight);

在这里插入图片描述

聚光灯

  • 光线从一个点沿一个方向射出,随着光线照射的变远,光线圆锥体的尺寸也逐渐增大。

    在这里插入图片描述

聚光灯光源的属性:

  • color点光源的颜色;
  • intensity:光源照射的强度。默认值为1;
  • distance:光源照射的最大距离。默认值为 0(无限远);
  • angle:光线照射范围的角度。默认值为 Math.PI/3;
  • penumbra:聚光锥的半影衰减百分比。默认值为 0;
  • decay:沿着光照距离的衰减量。默认值为 2。

使用方法:

const spotLight = new THREE.SpotLight(0xffffff, 1);
spotLight.position.set(3, 3, 0);
scene.add(spotLight);

聚光灯

光源辅助器

各个光源基本上都有光源辅助器,这些辅助器可以方便的调试和查看效果。

  • 平行光辅助器(DirectionalLightHelper)
  • 半球形光源辅助器(HemisphereLightHelper)
  • 点光源辅助器(PointLightHelper)
  • 聚光灯辅助器(SpotLightHelper)

这些辅助器的使用方法也很简单,一般都构造器函数中传入光源就可以了。例如:

//  聚光灯
const spotLight = new THREE.SpotLight( 0xffffff );
spotLight.position.set( 10, 10, 10 );
scene.add( spotLight );// 聚光灯辅助器
const spotLightHelper = new THREE.SpotLightHelper( spotLight );
scene.add( spotLightHelper );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/83023.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能安防监控:基于Java+SpringBoot实现人脸识别搜索

目录 引言背景介绍目的和重要性 人脸识别技术的基本原理图像采集和预处理特征提取与表示人脸匹配算法 人脸识别搜索的应用领域公告安全和监控社交网络和照片管理 参考实现步骤数据收集与预处理人脸特征提取查询处理 引言 背景介绍 结合人脸识别技术,在工厂、学校、…

Java后台生成ECharts图片

前言 通过echarts的jar包,Java后台生成一张图片,并把图片插入到word中。关于word插图片的代码在下一章。 需要用到的工具PhantomJS,Echarts-convert.js,jquery.js,echarts.js。 1.PhantomJS 介绍 PhantomJS是一个不需要浏览器的富客户端。 官方介绍&…

gitlab-Runner搭建

root wget https://packages.gitlab.com/runner/gitlab-runner/packages/fedora/29/gitlab-runner-12.6.0-1.x86_64.rpm/download.rpm rpm -ivh download.rpm ---- 安装 rpm -Uvh download.rpm -----更新升级 然后运行: gitlab-runner register --url https://git…

泊松损坏图像的快速尺度间小波去噪研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Rocky Linux更换为国内源

Rocky Linux提供的可供切换的源列表:Mirrors - Mirror Manager 其中以 COUNTRY 列为 CN 的是国内源。 选择其中一个Rocky Linux 源使用帮助 — USTC Mirror Help 文档 操作前请做好备份 对于 Rocky Linux 8,使用以下命令替换默认的配置 sed -e s|^mirr…

实现静态资源访问的几种方法

什么是静态资源? 静态资源是指在服务器端存储的不会变化的文件,如HTML、CSS、JavaScript、图片、音频、视频等文件。这些文件一般不包含动态内容,每次请求时返回的内容都是固定的。 为什么要使用静态资源? 提升网站性能&#xf…

Docker学习(二十四)报错速查手册

目录 一、This error may indicate that the docker daemon is not running 报错docker login 报错截图:原因分析:解决方案: 二、Get "https://harbor.xxx.cn/v2/": EOF 报错docker login 报错截图:原因分析&#xff1a…

谷歌推出AI模型机器人RT2 将文本和图像输出为机器人动作

去年年底,ChatGPT火遍全球,全世界都见识了大语言模型的强大力量。人们对大模型不再陌生,开始使用基于大模型的应用绘画、作图、搜索资料、设计剧情等,而妙用不止于此。谷歌推出了Robotics Transformer 2(RT2),这是一个…

Python中enumerate用法详解

目录 1.简介 2.语法 3.参数 4.返回值 5.详解 6.实例 7.补充 1.简介 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 2.语法 以下是 enumerate() 方法的语…

Sencha Ext.NET Crack 快速应用程序的正确工具集

Sencha Ext.NET Crack 快速应用程序的正确工具集 Sencha Ext.NET是一个高级的ASP.NET核心组件框架,它包含了强大的跨浏览器Sencha Ext JS库。通过140多个预构建和专业测试的UI组件实现企业级性能和生产效率。Sencha Ext.NET使用尖端的Web技术创建功能强大的Web应用程…

Transformer理论学习

Transformer出自于论文《attention is all you need》。 一些主流的序列模型主要依赖于复杂的循环结构或者CNN,这里面包含了编解码器等。而Transformer主要的结构是基于注意力机制,而且是用多头注意力机制去替换网络中的循环或者CNN(换言之就是transfor…

可靠传输-选择重传协议SR

一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃 (尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大费。 为了进一步提高性能,可设法只重传出现误码的数据分组。因此,…

Python基础--序列操作/函数

Python基础 1.序列的操作 2.函数 1. 数据类型的具体操作 1.1 序列操作--列表具体操作: #定义列表 listA [] #定义一个空列表 listB [1,2.8,"你好",listA,[1,2,3]] # 访问列表 print(listB)#查看整个列表 print(listB[2])#查看单个…

OpenLayers入门,OpenLayers实现地图原地旋转动画效果

专栏目录: OpenLayers入门教程汇总目录 前言 OpenLayers实现地图原地旋转动画效果,顾名思义,就是站在原地转一圈。 二、依赖和使用 "ol": "^6.15.1"使用npm安装依赖npm install ol@6.15.1使用Yarn安装依赖yarn add olvue中如何使用: vue项目使用…

nodejs登录生成token并验证

目录 一、基础概念 二、JTW 三、实践 一、基础概念 "token": 是一个通用的术语,指代一种用于表示身份、权限或访问凭证的数据结构。它可以是一个字符串、数字或其他形式的数据。 主要用途: 身份验证:在身份验证过程…

(Python)Requests+Pytest+Allure接口自动化测试框架从0到1搭建

前言:本文主要介绍在企业使用Python搭建接口自动化测试框架,数据驱动读取excel表里的数据,和数据库方面的交互,包括关系型数据库Mysql和非关系型数据库MongDB,连接数据库,读取数据库中数据,最后…

云原生可观测框架 OpenTelemetry 基础知识(架构/分布式追踪/指标/日志/采样/收集器)...

什么是 OpenTelemetry? OpenTelemetry 是一个开源的可观测性框架,由云原生基金会(CNCF)托管。它是 OpenCensus 和 OpenTracing 项目的合并。旨在为所有类型的可观测信号(如跟踪、指标和日志)提供单一标准。 https://opentelemetry.iohttps://www.cncf.io…

Java课题笔记~ Servlet编程

1.Servlet编程基础 (1)什么是Servlet Servlet是基于Java语言的Web编程技术,部署在服务器端的Web容器里,获取客户端的访问请求,并根据请求生成响应信息返回给客户端。 创建Servlet的方式,有 如下图:一般创建Servlet都…

交流有效值,峰值和平均值关系

1,交流有效值,峰值和平均值关系: 2,根据负载,确定变压器满载时的输出电压: 1),为了使稳压芯片MIC29302输出4V,LDO压差 0.4V,整流桥压降为1V, 则…