Q80:平坦着色(Flat Shading)和平滑着色(Smooth Shading)——“Q79:怎么用三角形网格(Triangle Mesh)细分曲面”(补充)
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)细分曲面”(补充)相关推荐
- Q82:三角形网格[Triangle Mesh]图形的平滑着色[Smooth Shading]
三角形网格[Triangle Mesh]图形的平滑着色[Smooth Shading],主要分三步: 1,计算单个三角形的法向量.根据三角形的三个顶点来求. 2,计算单个顶点处的法向量.根据共该顶点的 ...
- OpenGL 4.0的Tessellation Shader(细分曲面着色器)
细分曲面着色器(Tessellation Shader)处于顶点着色器阶段的下一个阶段,我们可以看以下链接的OpenGL渲染流水线的图:Rendering Pipeline Overview - Op ...
- Tessellation Shader(细分曲面着色器)
Tessellation Shader)是OpenGLES4.0引入的,处于顶点着色器阶段的下一个阶段,它是由ATI在2001年率先设计出来的. 细分曲面着色器 直到这个阶段,对于操作几何图元而言,只 ...
- 计算机图形学笔记七:Shading 2(着色频率,图形(实时渲染)管线)
着色频率,图形(实时渲染)管线 1.着色频率(方法)(Shading Frequencies) 1.1平面着色(Flat shading) 1.2高洛德着色(Gouraud shading) 1.3冯 ...
- Learn OpenGL 笔记6.9 Deferred Shading(延迟着色)
到目前为止,我们进行照明的方式称为forward rendering前向渲染或forward shading前向着色.我们渲染对象,根据场景中的所有光源对其进行照明.我们为场景中的每个对象分别为每个对 ...
- 入门图形学:平直着色和平滑着色
真是在老家关得有点郁闷了,不晓得这疫情什么时候结束.虽然我个人非常喜欢放假,因为有更多时间学习.玩游戏和搞自己的事情.不过这次疫情时间掐得太准了,刚好是放年假回老家拜年的时间,直接把我关在老家四十天, ...
- C4D模型工具—断开平滑着色(Phong)
1:创建对象-球体: 2:将球体转为可编辑对象: 3:在线模式下,选中边: 4:右键属性-断开平滑着色(Phong): 5:效果:选中的边显示出硬边的效果: 6:此功能可用于建模时对模型硬边处理
- C4D模型工具—选择平滑着色(Phong)断开边
< 选择平滑着色(Phong)断开边工具 >是选择工具的一种,会选择操作了< 断开平滑着色(Phong)>的边. 1:创建对象-球体: 2:将球体转为可编辑对象: 3:在线模式 ...
- Metal之Shading Language Specification(着色语言规范)
Metal简述 Metal着色器语言是用来编写 3D图形渲染逻辑.并行Metal计算核心逻辑 的一门编程语言,当你使用Metal框架来完成APP的实现时则需要使用Metal编程语言. Metal语言使 ...
最新文章
- linux out of memory分析(OOM)
- 7 项目人力资源管理
- C/C++与Matlab混合编程初探
- 次梯度(subgradient)
- datatables 增、删、查、改
- python简介pdf_Python以及QuTip包简介.PDF
- 【高级内部资料】.NET数据批量写入性能分析 第一篇
- opencv使用trackbar调控美颜程度
- 文本文档怎样改格式为html格式,文本文档格式怎么更改【图解】
- 基于springboot的暖暖午托管理系统
- java heapdump 分析工具_Java Heap dump文件分析工具jhat简介
- Android开发:申请小米开发者账号步骤
- 文本检测算法:CTPN
- 中信银行c语言笔试题库,中信银行笔试IT类复习题参考资料带答案解析.doc
- java导出带图片excel
- 高德地图可视化3D地图区域上添加棱柱
- poi 启用保护后取消_保护模式禁用怎么解除
- mark:Kafka
- 关闭您的磁盘几乎已满提示-Mac OS
- python读音有道-Python 20行简单实现有道在线翻译的详解
热门文章
- 也用C#做个视频监控客户端来玩玩
- java读properties的通用类,兼容linux和windows
- 减小iOS应用程序的大小
- wmaster0接口的简单介绍
- 程序员面试金典——18.12最大和子矩阵
- 判别式模型和生成式模型的区别(discriminative model and generative model)
- grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won’t be
- 2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础
- MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual..........
- InvalidClassException