当前位置: 首页 > news >正文

山东大学计算机图形学期末复习8——CG11下

CG11下

多边形近似问题

  • 用多边形近似平滑曲面时,颜色不连续,导致效果不佳。

  • Gouraud着色

    对于多边形模型,Gouraud提出使用网格顶点周围法向量的平均值作为顶点法向量:

    n = n 1 + n 2 + n 3 + n 4 ∣ n 1 + n 2 + n 3 + n 4 ∣ \mathbf{n}=\frac{\mathbf{n}_1+\mathbf{n}_2+\mathbf{n}_3+\mathbf{n}_4}{\left|\mathbf{n}_1+\mathbf{n}_2+\mathbf{n}_3+\mathbf{n}_4\right|} n=n1+n2+n3+n4n1+n2+n3+n4
    在这里插入图片描述

    • 在每个顶点使用Phong光照模型计算RGB颜色。
    • 通过线性插值计算多边形内点的颜色。
    • 插值公式:
    • 对于点 P 1 P_1 P1(在边 AB 上):

    s = ∥ P 1 − B ∥ ∥ A − B ∥ , ( R P 1 , G P 1 , B P 1 ) = s ( R A , G A , B A ) + ( 1 − s ) ( R B , G B , B B ) s=\frac{\left\|P_1-B\right\|}{\|A-B\|}, \quad\left(R_{P_1}, G_{P_1}, B_{P_1}\right)=s\left(R_A, G_A, B_A\right)+(1-s)\left(R_B, G_B, B_B\right) s=ABP1B,(RP1,GP1,BP1)=s(RA,GA,BA)+(1s)(RB,GB,BB)

    • 对于点 P P P(在P1P2之间):

    s = ∥ P − P 2 ∥ ∥ P 1 − P 2 ∥ , ( R P , G P , B P ) = s ( R P 1 , G P 1 , B P 1 ) + ( 1 − s ) ( R P 2 , G P 2 , B P 2 ) s=\frac{\left\|P-P_2\right\|}{\left\|P_1-P_2\right\|}, \quad\left(R_P, G_P, B_P\right)=s\left(R_{P_1}, G_{P_1}, B_{P_1}\right)+(1-s)\left(R_{P_2}, G_{P_2}, B_{P_2}\right) s=P1P2PP2,(RP,GP,BP)=s(RP1,GP1,BP1)+(1s)(RP2,GP2,BP2)
    在这里插入图片描述

Gouraud着色与高光问题

  • Gouraud着色的原理

    • 顶点处的光照计算

      • 顶点法线:Gouraud着色在顶点处进行光照计算。每个顶点都有一个法线向量,这个法线向量用于确定该顶点处的光照反射情况。顶点法线通常是通过对其相邻面的法线进行平均来得到的,这样可以近似模拟曲面的光照效果。
      • 光照模型:在顶点处,使用光照模型(如Phong光照模型)计算光照强度。光照模型考虑了环境光、漫反射光和镜面反射光等因素,通过顶点法线和光源方向等参数来计算每个顶点的颜色值。
    • 在Gouraud着色中,光照计算是在每个顶点处进行的。每个顶点的RGB颜色值是通过光照模型计算得出的。然后,这些颜色值在多边形的面上进行插值,以确定面上每个点的颜色。

  • 高光缺失的原因

    • 当使用Gouraud着色时,如果高光应该出现在多边形面的中心(例如点P),但该面的顶点(如A、B、C)远离高光区域,那么顶点处的光照计算可能不会包含高光。这是因为顶点处的法线方向与高光反射所需的条件不匹配,导致顶点处没有高光。
    • 由于Gouraud着色通过插值顶点颜色来确定面上的颜色,如果顶点处没有高光,那么整个面上的插值结果也不会包含高光。因此,面的内部区域(如点P)将无法正确显示高光。

Phong着色(Phong Shading)是一种用于计算机图形学中光照效果的技术,它与传统的Gouraud着色不同,Phong着色插值的是法向量而非颜色。这使得Phong着色能够精确模拟每个像素的光照,特别是高光和复杂的光照效果,从而提供更细致、真实的图像。

Phong着色算法流程

  1. 计算每个顶点的法向量
    • 每个顶点都有一个法向量。通常,这些法向量是通过计算与相邻多边形的法向量的平均值来得到的。通过这种方式,可以确保法向量在整个模型表面上是平滑过渡的。
  2. 边上插值
    • 对于每个边上的点(如 P 1 P_1 P1, P 2 P_2 P2),根据相邻顶点(例如 A A A, B B B)的法向量,通过线性插值得到这些点的法向量。这个插值过程基于相邻顶点的法向量进行,从而确保边缘的法向量也是平滑过渡的。
  3. 多边形内部插值
    • 对于多边形内部的点(例如点 P P P),法向量由相邻边上的法向量插值得到。具体来说,如果我们有两个边(例如边 P 1 P P_1P P1P 和边 P 2 P P_2P P2P),则点 P P P 的法向量由这两个边上的插值法向量得到。
  4. 计算光照
    • 使用Phong光照模型计算点 P P P 的RGB颜色。具体来说,Phong模型包括三个主要部分:漫反射光、镜面反射光和环境光。
      • 漫反射光:与表面法向量和光源方向的关系有关,遵循Lambert’s Cosine Law。
      • 镜面反射光:模拟高光,通常与观察者视角和反射光线之间的夹角有关。
      • 环境光:提供一个基本的、均匀的照明,模拟从所有方向照射的光。
    • 法向量的插值使得每个像素的光照计算更加精确,特别是在模拟表面高光和复杂的反射效果时。

发现没?gouraud插值的是光照颜色,而phone插值的是法向量值

过程总结

  • 顶点法向量:首先计算每个顶点的法向量。
  • 边法向量插值:在每条边的每个点上,基于顶点的法向量进行插值。
  • 内部法向量插值:在多边形内部的每个点上,基于相邻边的法向量进行插值。
  • 光照计算:利用插值后的法向量,使用Phong光照模型来计算每个点的颜色。

在这里插入图片描述

曲面细分(Subdivision Surface)是计算机图形学中的一种方法,用于将粗糙的多边形网格细化为平滑的曲面。细分算法通过递归地分割网格中的每个多边形,逐步使曲面变得光滑,最终形成一个极限曲面。

Catmull-Clark细分算法

Catmull-Clark细分算法是最著名和广泛应用的细分算法之一。它适用于四边形网格,旨在通过多次细分,将粗糙的网格转变为光滑的曲面。该算法是由Edwin Catmull和Jim Clark于1978年提出的。

Catmull-Clark细分基本概念
  1. 面点(Face Points)
    面点是一个新点,它位于一个四边形面的中心,坐标为四个角点的平均值。即对于一个四边形面(由四个顶点组成),面点坐标 f f f 可以计算为:
    f = 1 n ∑ i = 1 n p i f = \frac{1}{n} \sum_{i=1}^n p_i f=n1i=1npi
    其中, n n n 是四边形的角点数, p i p_i pi 是这些角点的坐标。

  2. 边点(Edge Points)
    边点是位于每个边的中点,坐标是两个端点和相邻面点的平均值。对于一条边(由两个顶点组成)和它相邻的两个面,边点的计算公式为:
    e = p 1 + p 2 + f 1 + f 2 4 e = \frac{p_1 + p_2 + f_1 + f_2}{4} e=4p1+p2+f1+f2
    其中, p 1 p_1 p1 p 2 p_2 p2 是边的两个端点, f 1 f_1 f1 f 2 f_2 f2 是相邻面的面点。

  3. 顶点(Vertex Points)
    顶点的更新更复杂。它是原始顶点位置与相邻面点和边点的加权平均。公式为:
    p ′ = n − 3 n p + 2 n 2 ∑ j e j + 1 n 2 ∑ j f j p' =\frac{n-3}{n} p+\frac{2}{n^2} \sum_j e_j+\frac{1}{n^2} \sum_j f_j p=nn3p+n22jej+n21jfj
    其中:

    • p p p 是原始顶点坐标。
    • n n n 是顶点的度数(即顶点相邻的面数)。

    此外,异常点(degree ≠ 4的顶点)需要特殊处理。

Catmull-Clark细分的几何更新规则

通过递归细分,新的网格逐渐平滑。每次细分后,网格的拓扑结构会发生变化,新顶点和边的生成使得曲面更加光滑。Catmull-Clark算法对于每个细分步骤都会根据上面列出的规则更新顶点、边和面。

Catmull-Clark细分公式
  • 面点公式
    f = 1 n ∑ i = 1 n p i f = \frac{1}{n} \sum_{i=1}^n p_i f=n1i=1npi

  • 顶点更新公式
    p ′ = n − 3 n p + 2 n 2 ∑ j e j + 1 n 2 ∑ j f j p' =\frac{n-3}{n} p+\frac{2}{n^2} \sum_j e_j+\frac{1}{n^2} \sum_j f_j p=nn3p+n22jej+n21jfj

  • 边点公式
    e = p 1 + p 2 + f 1 + f 2 4 e = \frac{p_1 + p_2 + f_1 + f_2}{4} e=4p1+p2+f1+f2

通过这些公式,Catmull-Clark算法在每次细分中更新网格,逐渐平滑曲面。

Catmull-Clark细分与其他细分算法的对比

  1. 线性细分(Linear Subdivision)
    • 规则:简单的边中点细分,顶点坐标为简单的平均值。
    • 效果:生成的网格平滑性较差,可能会保留棱角。
    • 计算成本:低,适用于快速原型或简单场景。
    • 适用场景:不适合复杂曲面,通常用于简单的几何体。
  2. Catmull-Clark细分
    • 规则:复杂的规则,面点、边点和顶点分别进行加权平均,考虑相邻面的影响。
    • 效果:生成的曲面更加平滑,接近B样条曲面。能够处理异常点,生成高质量的光滑曲面。
    • 计算成本:较高,但质量优异,适用于复杂场景。
    • 适用场景:广泛应用于动画、建模软件(如Maya、Blender等),常用于复杂几何体的建模和细化。

Shading in OpenGL

暂时略

相关文章:

  • ElfBoard技术实战|ELF 2开发板本地部署DeepSeek大模型的完整指南
  • C#发送文件到蓝牙设备
  • 【实战篇】低代码报表开发——平台运营日报表的开发实录
  • Spring 框架 JDBC 模板技术详解
  • SQL实战:06交叉日期打折问题求解
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- MCP内幕解析
  • 观QFramework框架底层逻辑有感
  • 经典卷积神经网络
  • Secs/Gem第四讲(基于secs4net项目的ChatGpt介绍)
  • 开源免费iOS或macOS安装虚拟机运行window/Linux系统
  • Qt中控件的Viewport作用
  • 服务器连接多客户端
  • 文章复现|(1)整合scRNA-seq 和空间转录组学揭示了子宫内膜癌中 MDK-NCL 依赖性免疫抑制环境
  • 数据结构中双栈的实现方法分享
  • PH热榜 | 2025-05-15
  • 解码生命语言:深度学习模型TranslationAI揭示RNA翻译新规则
  • Quic如何实现udp可靠传输
  • 缓存的相关内容
  • 该如何了解联排半孔的使用规范?
  • FPGA: UltraScale+ bitslip实现(ISERDESE3)
  • 乌克兰官员与法德英美四国官员举行会谈
  • 巴菲特最新调仓:一季度大幅抛售银行股,再现保密仓位
  • 普京调整俄陆军高层人事任命
  • 把中国声音带向世界,DG和Blue Note落户中国
  • 回望星河深处,唤醒文物记忆——读《发现武王墩》
  • 陕西省安康市汉阴县县长陈永乐已任汉阴县委书记