`

WebGL中光照模型

阅读更多

一、目的

       在场景内模拟出几道光源,这些光源本身不需要是可见的,但它们发出的光必须能够作用于3D物体的表面,让物体面对光源的那一侧显得明亮,同时背对光源的部分变得阴暗。要指定一系列的光源,然后让这些光源可以作用于我们 的3D场景内的任何一个部分。  

二、实现技术    

       WebGL是通过向着色器中写入代码实现这些效果的。更进一步的说,要做的就是向顶点着色器和片元着色器写入代码来处理光照。需要计算出光照对每个顶点的影响,并以此来调整顶点的颜色。

       逐顶点光照:基于每个顶点来处理光照效果,顶点间像素的光照效果都是由线性插值来实现

       逐像素光照(逐片元光照):每个像素都独立计算出光照效果

 

       光照类型

       一种是从特定方向射入并只会照亮面对入射方向的物体,我们称之为平行光(directional light)。

       一种是来自所有方向并且会照亮所有物体,不管这些物体的朝向如何,我们称之为环境光(ambient light)。当然在真实世界里,这只是平行光照到其他物体上,比如空气、灰尘等等,然后反射出来的散射而已。需要把它单独作为一个光照模型列出来。

      

       反射类型

       漫反射(Diffuse):无论光的入射角度如何,都会向所有方向发生反射。反射光的亮度只和光线的入射角度有关,与观察角度无关。光线越平行于 物体表面,则反射光越弱,表面越暗;光线越垂直于表面,反射光越强,表面越亮。漫反射是我们通常想到一个物体受到光照时需要首先想到的。

       镜面反射(Specular):这就像镜子一样,反射光将按照和入射角相同的角度反射出来。这种情况下,你看到的物体反射出来的光的亮度,取决于 你的眼睛和光反射的方向是否在同一直线上;也就是说,反射光的亮度不仅与光线的入射角有关,还与你的视线和物体表面之间的角度有关。镜面反射通常会造成物 体表面上的“闪烁”和“高光”现象,镜面反射的强度也与物体的材质有关,无光泽的木材很少会有镜面反射发生,而高光泽的金属则会有大量镜面反射。

 

      法向量随着模型视图矩阵变换而变换。默认模型每个点的法向量已经有了,模型的移动和缩放不应该改变法向量,旋转会改变法向量。所以要对法向量进行处理,去掉平移缩放对它的影响,而保留旋转对法向量的改变。

      var normalMatrix = mvMatrix.inverse().transpose();

      让法线向量永远指向正确方向的正规解决方法是使用模型视图矩阵的左上角3×3矩阵的逆转置矩阵,这样可以去掉矩阵中非正交的因素。形象的说, 就是只保留旋转,而不能对向量做缩放和移动,否则会这会改变向量的方向,这并不是变换矩阵想要做的。

     

      光照反射模型

      Lambertian reflection model(朗伯光照反射模型)只考虑了光照的漫反射情况,没有考虑环境光和镜面反射;与之相对应的是Phong reflection model相对应,考虑了环境光、漫反射以及镜面反射
      着色法
      Goraud shading(高洛德着色法)是在顶点着色器中计算顶点颜色,然后将顶点颜色通过varying变量插值传递给片元着色器,是对color进行插值;Phong shading(冯氏着色法)是在顶点着色器中将顶点的法向量normal通过varying变量插值传递给片元着色器,然后在片元着色器中根据插值生成 的normal以及其他信息生成颜色,是对normal进行插值。

http://blog.csdn.net/sunqunsunqun/article/details/8576339

 

http://blog.csdn.net/doctorsc/article/details/6287059?reload

 

 

补充知识:

向量运算:

点积


 

叉积:又称为向量积。

向量积|c|=|a×b|=|a| |b|sin<a,b>
c的长度在数值上等于以ab,夹角为θ组成的平行四边形的面积。
c的方向垂直于a与b所决定的平面,c的指向按右手规则从a转向b来确定。
a×b=(aybz-azby)i+(azbx-axbz)j+(axby-aybx)k,为了帮助记忆,利用三阶行列式,写成
|i j k |
|ax ay az|
|bx by bz|


 

逆矩阵:设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。

 

转置矩阵:把矩阵A的行换成相应的列,得到的新矩阵称为A的转置矩阵,记作A'或A

 

  • 大小: 1.2 KB
  • 大小: 16.3 KB
分享到:
评论

相关推荐

    WebGL编程指南(中文版)第1部分

    2.3在.WebGL中渲染几何体 2.4将属性关联至VBO 2.5渲染机制 2.6整合过程 2.7渲染模式 2.8缓冲区操控 2.9高级几何体加载技术:JSON和AJAX 2.10使用AJAX+JSON加载圆锥体对象 2.11本章小结 第3章光照 3.1光照、法线和...

    WebGL编程指南(中文版)-第2部分

    2.3在.WebGL中渲染几何体 2.4将属性关联至VBO 2.5渲染机制 2.6整合过程 2.7渲染模式 2.8缓冲区操控 2.9高级几何体加载技术:JSON和AJAX 2.10使用AJAX+JSON加载圆锥体对象 2.11本章小结 第3章光照 3.1光照、法线和...

    WebGL搭建完整场景

    WebGL实现给场景添加光照、纹理,模型的独立运动、层级运动,场景漫游

    WebGL编程指南压缩包

    附录A WebGL 中无须交换缓冲区 423 附录B GLSL ES 1.0 内置函数 427 角度和三角函数 428 指数函数 429 通用函数 430 几何函数 433 矩阵函数 434 矢量函数 435 纹理查询函数 436 附录C 投影矩阵 437 正射...

    webgl编程指南及源码2/2

    附录A WebGL 中无须交换缓冲区 423 附录B GLSL ES 1.0 内置函数 427 角度和三角函数 428 指数函数 429 通用函数 430 几何函数 433 矩阵函数 434 矢量函数 435 纹理查询函数 436 附录C 投影矩阵 437 正射...

    WebGL编程指南

    附录A WebGL 中无须交换缓冲区 423 附录B GLSL ES 1.0 内置函数 427 角度和三角函数 428 指数函数 429 通用函数 430 几何函数 433 矩阵函数 434 矢量函数 435 纹理查询函数 436 附录C 投影矩阵 437 正射...

    webgl编程指南及源码1/2

    附录A WebGL 中无须交换缓冲区 423 附录B GLSL ES 1.0 内置函数 427 角度和三角函数 428 指数函数 429 通用函数 430 几何函数 433 矩阵函数 434 矢量函数 435 纹理查询函数 436 附录C 投影矩阵 437 正射...

    webgl_solar:[JS]使用ThreeJS库建立地球,月亮和太阳的模型

    webgl_solar [JS]使用ThreeJS库的可视地球演示在建立的地球,月亮和太阳模型

    famous-webgl-specular:WebGL 网格镜面反射和光泽度贴图

    如果您有兴趣查看这个特定的光照模型,这里有一个使用的示例。 ###演示 有四盏灯,随机旋转,发出随机的颜色。 光泽度/镜面反射属性已应用于Backdrop.js和Cube.js文件,您可以在src目录中找到这些文件。 继续尝试...

    Computer-Graphics-Vanilla3d:WebGL中3D场景的基本实现,没有光照,纹理。 转换和执行视图更改

    该程序是WebGL中3D图形的简介,并基于代码库构建。 该程序由四个3D对象组成,我们可以在这些对象上执行各种操作,例如平移,旋转,缩放。 显示程序中使用的四种不同模型 指示 使用实时服务器运行该程序。 默认情况...

    threejs 局部泛光、局部发光使用

    其余是不发光体 这种情况下可以使用局部泛光解决 用到bloom 适用场景挺多得 两个小球 一个发光 一个不发光 逻辑清晰明了 工业场景 室内场景大多会遇到 能制作出一些酷炫得效果 结合线框模型使用更美好 结合了模型...

    HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍

    这些框架不同程度的封装了创建3D场景的各种要素,例如场景,相机、模型、光照、材质等等;使用这些封装起来的对象,就可以很简单的创建需要的3D场景,这样你就只需要把更多精力放在逻辑方面就可以了。 目前并没有哪...

    OpenGL ES 3.x游戏开发 上卷 高清版

    ● 介绍了OpenGL ES 3.x中的光照、纹理映射、3 D 模型加载、混合和雾等基础特效, 以及常用的 3 D 开发技巧, 如标志板、天空盒、镜像绘制等。 ● 既介绍了Android下使用SDK基于Java进行开发,又介绍了Android下使用...

    华南理工大学计算机图形学实验

    实现光线跟踪算法, 能利用Whitted光照模型对场景进行渲染; (optional) 通过亚像素采样实现反混淆. b.材质: 支持环境光、漫反射、高光反射、透射等光学现象; (optional)支持纹理绘制可加分. c.光源: 在场景中至少有一...

    nunuStudio:基于Web的跨平台3D,WebXR游戏引擎

    nunuStudio是用于Web的开源3D VR游戏引擎,它使设计人员和Web开发人员...将文件直接拖放到项目中(图像,视频,模型等) 管理项目资源。 编辑材质,纹理,着色器,代码,... 建立在库中 实时光照和阴影贴图支持 th

    retro-ngon:用于HTML5画布的软件3D渲染器。 使用强大的复古效果栅格化n面多边形。 具有:简化的API,pixelvertex着色器,异步渲染,文档等

    复古主题3D游戏和模型可视化 参与简约 异步渲染 避免WebGL 屏幕截图 由古墓丽影1呈现的场景,由复古n边形渲染器渲染,并由带纹理的四边形组成。 自定义光照贴图已烘焙到纹理上。 (基于Core Design为《古墓丽影》

    graphics:一些图形系统相关的小例子

    3D模型矩阵 动画 webgl动画 贝塞尔 帆布 颜色 covid可视化 坐标系 数据图表-css 数据图表里-svg Github贡献图表 GPU抽奖 光照 噪声 法线贴图 参数方程 后期处理 出现处理 呈现处理-着色器 极坐标-着色器 超过填充 ...

Global site tag (gtag.js) - Google Analytics