zoukankan      html  css  js  c++  java
  • Lecture07_着色 1(光照、着色和图形管线)_GAMES101 课堂笔记

         今日学习内容概览:

    第一部分:光栅化

    一、画家算法(Painter’s Algorithm)

    画家算法的操作是从远至进一层一层画,最终将画像完整。
    但是,缺点是如果画像没有很明显的逻辑层次,画家算法将不适用。例如下图:

    为了解决这个矛盾,于是进行改进发明了 ”Z-Buffer“ 算法。

    二、Z-Buffer算法

    (一)定义

    (二)操作步骤

    简单来说,步骤:

    1. 通过离相机最近的一点进行深度插值,知道每一个三角形的深度值。
    2. 利用for循环,计算每个采样点的深度值。(注:不是对每一个像素求Z-Buffer,是对每一个采样点。)
    3. 一个一个采样点的深度值叠加进行光栅化,只保留当前最小值(最近才可以被看见,远了就被挡住,因此被近的覆盖。)

    效果图:

    由于需要对采样点进行挨个比较,但是只保留最小值,因此其时间复杂度为(O(n))。并且至于采样点(三角形)叠加的顺序并不会影响光栅化效果(因为只保留最小值)。

    第二部分:着色(Shading)

    目前我们涉及的采样过程:

    但是为了一个物体变得更加真实一些,还需要对其进行着色(shading).

    一、着色(Shading)

    (一) 定义

    英文词典解释:通过变暗或变亮对其进行着色。

    图形学概念:物体应用不同的材质表现着色过程。

    (二)应用举例

    • 高光(Specular highlights):亮度极高,在镜面反射附近方向反射。

    • 漫反射(Diffuse reflection):亮度有变化,光线会反射到四面八方。

    • 环境光照(Ambient lighting):

      这属于间接光照,如下图第3个箭头所示,其实点光源并不会射到环境光照所指的位置。

      但是由于光源发出的光线到其他物体表面(例如墙壁、桌面),这些表面的漫反射光线会映射到该位置(通俗理解:可看见其他物体的影子。)

    (三)着色是局部的

    对相关的光照方向等参数定义:

    由于着色不考虑其他物体影响,因此没有阴影生成,即着色 ≠ 阴影。例如下图,只考虑着色的情况:

    二、漫反射(Diffuse Reflection)

    漫反射到每个方向上是均匀的:

    计算被吸收的能量:

    光线发射:

    光线传播距离越远,光能量越少。能量与距离平方成反比。计算公式:

    漫反射计算公式:

  • 相关阅读:
    VC++:创建,调用Win32静态链接库
    VC++:创建,调用Win32动态链接库
    C++生成和解析XML文件
    C++实现16进制字符串转换成int整形值
    一个好隐蔽的C/C++代码bug
    【C++札记】标准模板库string
    Rabbitmq C++客户端 Rabbitmq Client
    C++:标准模板库map
    C++:标准模板库vector
    C++:标准模板库(STL)
  • 原文地址:https://www.cnblogs.com/somedayLi/p/12423388.html
Copyright © 2011-2022 走看看