`

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模型-人体头部模型

    WebGL支持多种光照模型,如环境光、漫反射光和镜面高光,这些都可能在头部模型中有所体现。 7. **动画和交互性**:这个模型可能包含一些交互元素,比如头部转动、眼睛眨眼等,这些都是通过JavaScript控制模型的状态...

    效果超棒的Webgl模型-人体肺

    在这个人体肺模型中,开发者可能使用了复杂的着色技术,如光照模型、纹理贴图和法线映射,来增加模型的真实感和细节表现。 为了构建这个模型,开发者首先需要对人体肺部的解剖学有深入理解,然后使用建模软件(如...

    webgl载入模型webgl载入模型webgl载入模型

    总的来说,WebGL加载模型涉及模型格式转换、选择合适的加载库、管理模型数据、设置光照和材质,以及实现交互和性能优化。通过理解这些概念和实践,你可以创建出交互式的3D网页应用,展示引人入胜的3D内容。

    纯原生webgl制作地球模型

    在地球模型中,我们可能需要编写自定义着色器来实现光照效果,使地球看起来更加真实。 纹理是3D模型表面的图像,用于增加细节和真实感。在我们的地球模型中,可以使用一个地球纹理贴图,该贴图通常包含地表的颜色、...

    效果超棒的Webgl模型-人物铜像

    7. **光照(Lighting)**:模拟真实世界的光源,包括点光源、方向光和聚光灯,以及不同的光照模型,如环境光、漫射光和镜面光。 8. **缓冲区对象(Buffer Objects)**:用于存储顶点数据,提高渲染性能。 9. **...

    效果超棒的Webgl模型-装甲车

    3. **光照和阴影**:WebGL支持多种光照模型,如环境光、点光源、方向光等,以及阴影的计算,这些都会影响模型最终的渲染效果。装甲车模型可能会有精心设计的光照设置,以增强其立体感和真实感。 4. **动画和交互**...

    效果超棒的Webgl模型-一堆石头

    在这个“一堆石头”的模型中,每个石头可能都是一个独立的3D对象,由多边形(通常是三角形)组成。建模过程包括创建基础形状、细节雕刻、纹理贴图以及添加光照和阴影等步骤。常用的3D建模软件有Blender、Maya、3ds ...

    效果超棒的Webgl模型-单层大户型

    4. **家具与装饰**:模型中可能包含各种家具和装饰品,它们的形状、颜色和位置都会影响整体效果。 5. **实时渲染**:由于WebGL是实时渲染,用户可以即时看到设计更改的效果,这对于在线设计和展示非常有用。 6. **...

    效果超棒的Webgl模型-两层小公寓2

    WebGL支持光照模型,这在创建真实感的场景中至关重要。在这个两层公寓的模型中,可能应用了不同的光源,如环境光、点光源或聚光灯,来模拟自然和人造光源的效果。此外,阴影投射也可以增强深度感知,使场景更具立体...

    效果超棒的Webgl模型-两层小公寓3

    5. **用户交互**:用户可以通过鼠标或触摸设备与3D模型进行交互,如旋转、平移、缩放视图,甚至与模型中的对象进行互动,如开关灯、移动家具等。 6. **性能优化**:为了确保在不同设备上流畅运行,WebGL模型需要...

    效果超棒的Webgl模型-手表

    WebGL支持各种光照模型,如环境光、点光源、聚光灯等,可以模拟不同光源对物体表面的影响,如阴影、高光和反射。 3. **纹理映射**:手表的表面可能有金属光泽、皮革质感或者玻璃镜面,这需要应用纹理映射技术。...

    效果超棒的Webgl模型-帆船

    此外,WebGL支持各种光照模型,如Phong模型,它可以模拟环境光、漫反射光和镜面高光,使3D模型看起来更生动。 在“效果超棒的Webgl模型-帆船”中,帆船的动态效果可能涉及到动画和交互性。WebGL允许开发者创建时间...

    效果超棒的Webgl模型-单间公寓

    3. **光照和阴影**:WebGL支持光照模型,可以模拟不同光源对物体的影响,包括环境光、漫射光和镜面光。阴影的计算则可能采用了阴影贴图或阴影体积技术。 4. **着色器编程**:在WebGL中,开发者使用着色语言GLSL编写...

    效果超棒的Webgl模型-汉堡

    WebGL支持多种光照模型,如环境光、漫反射光和镜面高光,这可以模拟不同光源对物体的影响,让汉堡模型在不同光线条件下呈现出逼真的阴影和反射效果。 此外,交互性也是WebGL模型的一大亮点。用户可能能够通过鼠标或...

    效果超棒的Webgl模型-老式汽车

    光照是3D模型中不可或缺的部分,WebGL支持多种光照模型,如环境光、点光源、平行光等,这些都可以用来增强模型的立体感和真实感。描述中的“效果超棒”可能意味着模型不仅有精确的形状,还可能运用了复杂的光照效果...

    效果超棒的Webgl模型-55战斗机

    光照是影响3D模型视觉效果的关键因素,WebGL支持多种光照模型,如环境光、点光源、方向光等,通过调整这些光源参数可以实现不同的阴影和反射效果。 此外,为了使模型可交互,还需要实现用户输入事件的监听,例如...

    WEBGL_gis_webgl_

    5. **光照和材质**:如何通过WebGL实现光照模型,增强3D场景的真实感,以及设置物体材质,如颜色、纹理、透明度等。 6. **性能优化**:处理大量GIS数据时,如何通过LOD(Level of Detail)层次细节、批处理渲染、...

    效果超棒的Webgl模型-尤达大师

    "效果超棒的Webgl模型-尤达大师"这个主题,显然涉及到的是利用WebGL技术创建的高质量3D模型,尤达大师是源自《星球大战》中的虚构角色,具有很高的辨识度,因此这个模型可能是粉丝或专业设计师为了展示WebGL技术潜力...

    效果超棒的Webgl模型-老式照相机

    3. **光照与阴影**:WebGL支持多种光照模型,如环境光、点光源、方向光等。通过调整光照参数,可以模拟不同光线条件下相机的外观,增强其立体感和真实感。 4. **摄像机控制**:为了提供交互性,用户需要能够从不同...

    效果超棒的Webgl模型-老式战斗机

    而光照模型则负责模拟环境光和光源对物体的影响,以产生逼真的阴影和反射。 WebGL的工作原理是通过JavaScript与GPU(图形处理单元)通信,利用硬件加速来处理复杂的3D图形计算。开发者可以通过编程控制模型的旋转、...

Global site tag (gtag.js) - Google Analytics