《图形编程技术学习》(三十五)Phong明暗处理
一.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明暗处理相关推荐
- 机器学习实现计算不规则图形面积_《图形编程技术学习》(五十八)用VS实现逐顶点的光照计算...
这个系列接近尾声了,自己也着急想早点弄完,最近忙着项目的事情,一连几天没有更新, 更新的时候遇到疑点也没有时间细细研究,大抵是囫囵吞枣,这种习惯很不好, 来得容易忘得也容易,到底是纸上得来终觉浅;想着 ...
- opengl实现经纹理映射的旋转立方体_《图形编程技术学习》(五十三)环境映射...
一.环境映射(Environment Mapping) 1.具有光滑表面的物体会反射形成周围环境的影像 2.属于环境光效果 二.如何实现这种效果 1.光线跟踪(全局光照技术)可以实现这种效果,但效率太 ...
- Linux的冒号和波浪号用法,shell 学习三十五天---波浪号展开与通配符
shell 学习三十五天---波浪号展开与通配符 shell 中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定 ...
- 《图形编程技术学习》(一)计算机图形学与图形流水线
这个系列是学习北京林业大学杨刚教授的课程时的学习笔记,课程简洁易懂又含以重要知识,谨以此分享出来.欢迎勘误~ 一.计算机图形学的概念及主要研究内容 计算机图形学是作什么的 计算机图形学(Comput ...
- opencv学习(三十五)之仿射变换warpAffine
1.仿射变换介绍 仿射变换是指在向量空间中进行一次线性变换(乘以一个矩阵)并加上一个平移(加上一个向量),变换为另一个向量空间的过程.在有限维的情况下,每个仿射变换可以由一个矩阵A和一个向量b给出,它 ...
- Java多线程学习三十五: CyclicBarrier 和 CountDownLatch 有什么不同
CyclicBarrier 和 CountDownLatch 有什么不同? CyclicBarrier作用 CyclicBarrier 和 CountDownLatch 确实有一定的相似性,它们都能阻 ...
- Tensorflow实战学习(三十五)【实现基于LSTM语言模型】
神经结构进步.GPU深度学习训练效率突破.RNN,时间序列数据有效,每个神经元通过内部组件保存输入信息. 卷积神经网络,图像分类,无法对视频每帧图像发生事情关联分析,无法利用前帧图像信息.RNN最大特 ...
- shell学习三十五天----波浪号展开与通配符
波浪号展开与通配符 shell中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定(例如PATH或CDPATH变量 ...
- Java学习笔记(三十五)
在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度.现在将跟着视频做的笔记进行整理.本篇博客是整理Java知识点的第三十五 ...
- Slicer学习笔记(三十五)slicer学习链接
Slicer学习笔记(三十五)slicer学习链接 使用方面: 坐标系:https://www.slicer.org/wiki/Coordinate_systems 模块:https://slicer ...
最新文章
- MVC 自定义IModelBinder实现json参数转Dictionarystring, string
- react-redux中的持久化数据存储redux-persist
- 聚集索引和非聚集索引的区别有哪些
- 你知道K8S暴露服务的方式有哪些吗?
- Linux编程(10)_进程通信
- 关于AIR 应用程序沙箱
- Spark常用API(五)
- oracle 启动_oracle实验--通过gdb工具研究数据库启动过程
- 在C#中使用消息队列RabbitMQ
- 一文读懂最新 Google 开发者大会上的 ARCore!
- bzoj 4011: [HNOI2015]落忆枫音
- 总以为猜对了结局,但烧脑推理电影却总是让我扭伤腰
- Arduino UNO驱动DS1307数字实时时钟RTC
- 史上超级详细:银行外包java面试题目
- 程序员:迟到1分钟罚300,加班却视而不见,月底工资让人寒心
- 【目标检测】目标检测的评价指标(七个)
- 输入数字的汉语拼音,每个拼音的首字母大写。输出该数字的阿拉伯数字。
- 傻子安装cobbler
- 谈一谈我心中的世界杯
- AIfloki——碾压AIdoge,开启链游新时代