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

山东大学计算机图形学期末复习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

暂时略

http://www.xdnf.cn/news/6428.html

相关文章:

  • 文档多模态识别工具对比:MinerU、PaddleOCR、Marker
  • 2089. 找出数组排序后的目标下标——O(n)做法!
  • OpenCV CUDA模块中逐元素操作------数学函数
  • 原生微信小程序 textarea组件placeholder无法换行的问题解决办法
  • Secs/Gem第五讲(基于secs4net项目的ChatGpt介绍)
  • window 显示驱动开发-命令和 DMA 缓冲区简介
  • VBA编程时如何加密数据库连接的账号密码?
  • Ubuntu 编译SRS和ZLMediaKit用于视频推拉流
  • 高效管理多后端服务:Nginx 配置与实践指南
  • 《Python星球日记》 第78天:CV 基础与图像处理
  • 二程运输的干散货船路径优化
  • 图片、音频、视频都能转?简鹿格式工厂了解一下
  • ollama 升级换源
  • Buildroot 移植MiniGUI
  • 牛客网NC21994:分钟计算
  • 【匹配】Needleman–Wunsch
  • 深入理解 Cortex-M 的中断输入和挂起行为
  • RedHat7 如何更换yum镜像源
  • SAM微调fine-tune/PEFT系列论文整理
  • vue-quill-editor富文本编辑器
  • PYTHON训练营DAY26
  • 开发技术.前端开发相关问题
  • RiDoc:高效文档扫描与图像处理工具,助力高效办公
  • 语音识别——通过PyAudio录入音频
  • Secs/Gem第六讲(基于secs4net项目的ChatGpt介绍)
  • gRPC为什么高性能
  • 图神经网络如何模拟人类“理解场景”的过程?
  • 连接指定数据库时提示not currently accepting connections
  • 从代码学习深度学习 - 实战 Kaggle 比赛:图像分类 (CIFAR-10 PyTorch版)
  • Docker构建Nginx、PHP、MySQL及WordPress部署及解释