一.Gouraud明暗处理的问题

1.曲面分隔可能产生错误效果

2.高光的丢失

3.马赫带效应(即光亮度变化率不连续的边界处呈现亮带或黑带)

二.Phong明暗处理

1.Phong明暗处理的思想:

不是插值光亮度颜色,而是插值法向量。故而也称为”法向量插值明暗处理“

2.对多边形顶点处法向量做双线性插值,将插值计算得到的多边形内各片元的法向量代入光亮度计算公式,得到各片元的光亮度

step1:计算出多边形各顶点的法向;

step2:多边形中的某个片元,双线性插值计算其法向;

step3:计算出多边形内该片元的光亮度。

三.不同明暗处理效果比较

Phong明暗处理的缺点是计算量大。以往图形硬件中不常采用。

Phong明暗处理是为每一个片元点都计算光照明方程

四.Phong shading计算发生在哪里?

Step1:计算出多边形各顶点的法向;

——CPU

Step2: 对多边形中的某个片元,双线性插值计算其法向;

——Rasterization

Step3:计算出多边形内该片元的光亮度。

——Fragment operation

五.三种明暗处理方法

1.常数明暗处理

2.Gouraud明暗处理

3.Phong明暗处理

(1)三种方法效果越来越好

(2)但计算机量也越来越大

(3)前两者是顶点级别的光照计算;而Phong Shading则是像素级别的光照计算。

/问题:还有别的明暗处理方法吗?/

六.凹凸纹理映射

七.OpenGL中的相关函数

glShadeModel(GLenum mode)

GL_FLAT 即常数明暗处理

GL_SMOOTH 即采用Gouraud明暗处理

扩展链接:https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/

《图形编程技术学习》(三十五)Phong明暗处理相关推荐

  1. 机器学习实现计算不规则图形面积_《图形编程技术学习》(五十八)用VS实现逐顶点的光照计算...

    这个系列接近尾声了,自己也着急想早点弄完,最近忙着项目的事情,一连几天没有更新, 更新的时候遇到疑点也没有时间细细研究,大抵是囫囵吞枣,这种习惯很不好, 来得容易忘得也容易,到底是纸上得来终觉浅;想着 ...

  2. opengl实现经纹理映射的旋转立方体_《图形编程技术学习》(五十三)环境映射...

    一.环境映射(Environment Mapping) 1.具有光滑表面的物体会反射形成周围环境的影像 2.属于环境光效果 二.如何实现这种效果 1.光线跟踪(全局光照技术)可以实现这种效果,但效率太 ...

  3. Linux的冒号和波浪号用法,shell 学习三十五天---波浪号展开与通配符

    shell 学习三十五天---波浪号展开与通配符 shell 中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定 ...

  4. 《图形编程技术学习》(一)计算机图形学与图形流水线

    这个系列是学习北京林业大学杨刚教授的课程时的学习笔记,课程简洁易懂又含以重要知识,谨以此分享出来.欢迎勘误~ 一.计算机图形学的概念及主要研究内容  计算机图形学是作什么的 计算机图形学(Comput ...

  5. opencv学习(三十五)之仿射变换warpAffine

    1.仿射变换介绍 仿射变换是指在向量空间中进行一次线性变换(乘以一个矩阵)并加上一个平移(加上一个向量),变换为另一个向量空间的过程.在有限维的情况下,每个仿射变换可以由一个矩阵A和一个向量b给出,它 ...

  6. Java多线程学习三十五: CyclicBarrier 和 CountDownLatch 有什么不同

    CyclicBarrier 和 CountDownLatch 有什么不同? CyclicBarrier作用 CyclicBarrier 和 CountDownLatch 确实有一定的相似性,它们都能阻 ...

  7. Tensorflow实战学习(三十五)【实现基于LSTM语言模型】

    神经结构进步.GPU深度学习训练效率突破.RNN,时间序列数据有效,每个神经元通过内部组件保存输入信息. 卷积神经网络,图像分类,无法对视频每帧图像发生事情关联分析,无法利用前帧图像信息.RNN最大特 ...

  8. shell学习三十五天----波浪号展开与通配符

    波浪号展开与通配符 shell中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定(例如PATH或CDPATH变量 ...

  9. Java学习笔记(三十五)

    在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度.现在将跟着视频做的笔记进行整理.本篇博客是整理Java知识点的第三十五 ...

  10. Slicer学习笔记(三十五)slicer学习链接

    Slicer学习笔记(三十五)slicer学习链接 使用方面: 坐标系:https://www.slicer.org/wiki/Coordinate_systems 模块:https://slicer ...

最新文章

  1. MVC 自定义IModelBinder实现json参数转Dictionarystring, string
  2. react-redux中的持久化数据存储redux-persist
  3. 聚集索引和非聚集索引的区别有哪些
  4. 你知道K8S暴露服务的方式有哪些吗?
  5. Linux编程(10)_进程通信
  6. 关于AIR 应用程序沙箱
  7. Spark常用API(五)
  8. oracle 启动_oracle实验--通过gdb工具研究数据库启动过程
  9. 在C#中使用消息队列RabbitMQ
  10. 一文读懂最新 Google 开发者大会上的 ARCore!
  11. bzoj 4011: [HNOI2015]落忆枫音
  12. 总以为猜对了结局,但烧脑推理电影却总是让我扭伤腰
  13. Arduino UNO驱动DS1307数字实时时钟RTC
  14. 史上超级详细:银行外包java面试题目
  15. 程序员:迟到1分钟罚300,加班却视而不见,月底工资让人寒心
  16. 【目标检测】目标检测的评价指标(七个)
  17. 输入数字的汉语拼音,每个拼音的首字母大写。输出该数字的阿拉伯数字。
  18. 傻子安装cobbler
  19. 谈一谈我心中的世界杯
  20. AIfloki——碾压AIdoge,开启链游新时代

热门文章

  1. 去除xp桌面图标阴影
  2. 邮箱哪个好用又安全?什么邮箱比较安全好用?
  3. 编译liteos(ubuntu)
  4. Python 在问答频道中刷题积累到的小技巧(二)
  5. Windows桌面共享中一些常见的抓屏技术
  6. chorme的性能优化工具
  7. RMAN-06091 no channel allocated for maintenance
  8. 博途PLC如何通过FB285实现V90 PN的速度控制
  9. 电脑能正常上网,但登不上 QQ
  10. 代码自动删除QQ空间里的说说