80.1 概述

前面用三角形网格细分球面时,对单个三角形的着色方式采样的是“Flat Shading”。即:

通过三角形三顶点的坐标计算出整个三角形的法向量。

这样就导致相邻两个三角形的法向量差别很大,所以就能看到明显的三角形的边。

而“Smooth Shading”则是:先计算三角形三顶点处的法向量,然后将这三个法向量线性插值的结果作为整个三角形的法向量。

这样相邻两个三角形的法向量差别就会小很多(因为相邻两个三角形只有一个顶点不同)。

线性差值的方式,我们可以直接使用“判断点是否在三角形内的那些系数”。线性插值公式:

其中的β、γ即是“判断点是否在三角形内的那些系数”。这些系数可以通过三角形的顶点坐标求得。

这样一来,平坦着色是由“Triangle”类完成的(即普通三角形的画法)。

所以,为了实现平滑着色,我们需要定一个画三角形的方式(法向量的求解方式不同了),我们定义新的三角形类“SmoothTriangle”。“SmoothTriangle”和“Triangle”的唯一区别就是“法向量的求解方式”。

80.2 SmoothTriangle的实现

其中参数beta、gamma对应着hit()函数中的那些系数;n0、n1、n2这三个法向量则需要从外面传进来(因为不同曲面求法向量的方式不一样,所以只有将法向量在外面计算好之后再传进来)

关于beta、gamma:

关于n0、n1、n2:

非特殊曲面上某点处法向量的求法:

(这张图是从网上找的,不知道是从什么书上截下来的???)

80.3 测试图形

tessellate_smooth_sphere(8,4)

tessellate_flat_sphere(8,4)

(前一个图形为Smooth Shading,后一个图形为Flat Shading)

  

tessellate_smooth_sphere(16,8)

tessellate_flat_sphere(16,8)

(前一个图形为Smooth Shading,后一个图形为Flat Shading)

  

tessellate_smooth_sphere(160,80)

tessellate_flat_sphere(160,80)

(前一个图形为Smooth Shading,后一个图形为Flat Shading)

  

tessellate_smooth_sphere(1600,800)

tessellate_flat_sphere(1600,800)

(前一个图形为Smooth Shading,后一个图形为Flat Shading)

  

80.4 其他说明

完整的代码,参考:http://download.csdn.net/detail/libing_zeng/9772259

Referrance

[1]. Kevin Suffern, Ray Tracing from theGround Up, A K Peters Ltd, 2007.

Q80:平坦着色(Flat Shading)和平滑着色(Smooth Shading)——“Q79:怎么用三角形网格(Triangle Mesh)细分曲面”(补充)相关推荐

  1. Q82:三角形网格[Triangle Mesh]图形的平滑着色[Smooth Shading]

    三角形网格[Triangle Mesh]图形的平滑着色[Smooth Shading],主要分三步: 1,计算单个三角形的法向量.根据三角形的三个顶点来求. 2,计算单个顶点处的法向量.根据共该顶点的 ...

  2. OpenGL 4.0的Tessellation Shader(细分曲面着色器)

    细分曲面着色器(Tessellation Shader)处于顶点着色器阶段的下一个阶段,我们可以看以下链接的OpenGL渲染流水线的图:Rendering Pipeline Overview - Op ...

  3. Tessellation Shader(细分曲面着色器)

    Tessellation Shader)是OpenGLES4.0引入的,处于顶点着色器阶段的下一个阶段,它是由ATI在2001年率先设计出来的. 细分曲面着色器 直到这个阶段,对于操作几何图元而言,只 ...

  4. 计算机图形学笔记七:Shading 2(着色频率,图形(实时渲染)管线)

    着色频率,图形(实时渲染)管线 1.着色频率(方法)(Shading Frequencies) 1.1平面着色(Flat shading) 1.2高洛德着色(Gouraud shading) 1.3冯 ...

  5. Learn OpenGL 笔记6.9 Deferred Shading(延迟着色)

    到目前为止,我们进行照明的方式称为forward rendering前向渲染或forward shading前向着色.我们渲染对象,根据场景中的所有光源对其进行照明.我们为场景中的每个对象分别为每个对 ...

  6. 入门图形学:平直着色和平滑着色

    真是在老家关得有点郁闷了,不晓得这疫情什么时候结束.虽然我个人非常喜欢放假,因为有更多时间学习.玩游戏和搞自己的事情.不过这次疫情时间掐得太准了,刚好是放年假回老家拜年的时间,直接把我关在老家四十天, ...

  7. C4D模型工具—断开平滑着色(Phong)

    1:创建对象-球体: 2:将球体转为可编辑对象: 3:在线模式下,选中边: 4:右键属性-断开平滑着色(Phong): 5:效果:选中的边显示出硬边的效果: 6:此功能可用于建模时对模型硬边处理

  8. C4D模型工具—选择平滑着色(Phong)断开边

    < 选择平滑着色(Phong)断开边工具 >是选择工具的一种,会选择操作了< 断开平滑着色(Phong)>的边. 1:创建对象-球体: 2:将球体转为可编辑对象: 3:在线模式 ...

  9. Metal之Shading Language Specification(着色语言规范)

    Metal简述 Metal着色器语言是用来编写 3D图形渲染逻辑.并行Metal计算核心逻辑 的一门编程语言,当你使用Metal框架来完成APP的实现时则需要使用Metal编程语言. Metal语言使 ...

最新文章

  1. linux out of memory分析(OOM)
  2. 7 项目人力资源管理
  3. C/C++与Matlab混合编程初探
  4. 次梯度(subgradient)
  5. datatables 增、删、查、改
  6. python简介pdf_Python以及QuTip包简介.PDF
  7. 【高级内部资料】.NET数据批量写入性能分析 第一篇
  8. opencv使用trackbar调控美颜程度
  9. 文本文档怎样改格式为html格式,文本文档格式怎么更改【图解】
  10. 基于springboot的暖暖午托管理系统
  11. java heapdump 分析工具_Java Heap dump文件分析工具jhat简介
  12. Android开发:申请小米开发者账号步骤
  13. 文本检测算法:CTPN
  14. 中信银行c语言笔试题库,中信银行笔试IT类复习题参考资料带答案解析.doc
  15. java导出带图片excel
  16. 高德地图可视化3D地图区域上添加棱柱
  17. poi 启用保护后取消_保护模式禁用怎么解除
  18. mark:Kafka
  19. 关闭您的磁盘几乎已满提示-Mac OS
  20. python读音有道-Python 20行简单实现有道在线翻译的详解

热门文章

  1. 也用C#做个视频监控客户端来玩玩
  2. java读properties的通用类,兼容linux和windows
  3. 减小iOS应用程序的大小
  4. wmaster0接口的简单介绍
  5. 程序员面试金典——18.12最大和子矩阵
  6. 判别式模型和生成式模型的区别(discriminative model and generative model)
  7. grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won’t be
  8. 2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础
  9. MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual..........
  10. InvalidClassException