首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >phong阴影法插补的算法是什么?

phong阴影法插补的算法是什么?
EN

Computer Graphics用户
提问于 2019-09-29 21:48:29
回答 2查看 1.1K关注 0票数 2

假设我们有一个对象,它只由三维点和三角形面组成,每个三角形面都包含这些3d点的子集。我怎样才能插值法向量,得到Phong平滑的阴影呢?实际的算法似乎不可能找到,但每个人都在这样做。

这里有一个帖子,但我仍然不知道如何实现它:Phong阴影的法向插值

而且,在我看来,这个假定的公式只考虑了两个法线,这似乎是错误的。如果你有一个由其他三个三角形包围的三角形呢?那你怎么把法线混在一起?

EN

回答 2

Computer Graphics用户

发布于 2023-02-12 10:26:06

我将假设你对每个点都有法线,并且你的顶点传递不是为你做的。对于每个像素,您将有一个交点p,它存在于由3点p_ip_jp_k定义的最近的三角形曲面上,其中包含相应的法线n_in_jn_k。Phong阴影是归一化内插法线,可通过以下方法找到:

  1. 计算p的重心坐标(查看函数“IntersectTriangle”中的(https://github.com/Jojendersie/gpugi/blob/5d18526c864bbf09baca02bfab6bcec97b7e1210/gpugi/shader/intersectiontests.glsl#L63) )。请注意,这个顺序非常重要,因为您的坐标值uvw与您的点具有相同的顺序。
  2. 插值和归一化:\frac{un_i + vn_j + wn_k}{|| un_i + vn_j + wn_k ||}.
  3. ???
  4. 利润!
票数 0
EN

Computer Graphics用户

发布于 2023-03-14 13:17:53

一种可能的方法是使用双线性插值。假设你知道三角形顶点的法线,当你做光栅扫描转换时,你把三角形投影和水平投影相交,每次都得到两个交点。然后用进一步插值的数据填充它们之间的段。

因此,插值首先在三角形顶点之间进行,然后在交点之间进行,在这两种情况下都可以使用线性插值。无论如何,为了应用Phong模型,结果向量应该归一化为单位范数。

注意,由于第一次插值是在两个顶点之间进行的,法线向量的连续性被隐式地保证在两个面共有的边上。

票数 0
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/9199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档