首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >阴影和阴影

阴影和阴影
EN

Stack Overflow用户
提问于 2012-10-30 01:00:53
回答 2查看 210关注 0票数 1

我在网上读过很多光线追踪算法。但是,我对阴影和阴影没有清晰的理解。根据我的理解,下面的伪代码是正确的吗?

代码语言:javascript
运行
复制
for each primitive 
    check for intersection
    if there is one 
         do color be half of the background color
         Ishadow = true
         break

for each ambient light in environment        
    calculate light contribution to the color

if ( Ishadow == false ) 
   for each point light 
     calculate diffuse shading
     calculate reflection direction
     calculate specular light


trace for reflection ray // (i)  
add color returned from i after multiplied by some coefficient

trace for refraction ray // (ii)
add color returned from ii after multiplied by some coefficient

return color value calculated until this point
EN

回答 2

Stack Overflow用户

发布于 2012-10-30 01:27:44

您应该将阴影与正常的光线跟踪路径集成:对于每个屏幕像素,您通过场景发送光线,并最终确定最近的对象交叉点:在最近的对象交叉点,您将首先读出像素颜色(该点上对象的纹理),除了计算反射向量等(使用法线向量),您现在可以另外投射光线从该交叉点到场景中的每个光源:如果这些光线在击中光源之前与其他对象相交,则交叉点在阴影中,您可以相应地调整该点的最终颜色。

票数 0
EN

Stack Overflow用户

发布于 2012-10-30 01:31:58

伪代码的问题是,很容易得到足够的“伪”,以至于它变成了我们试图通过远离自然语言来避免的歧义井。“颜色是背景颜色的一半吗?”这条线出现在你迭代通过你的光源之前,这是令人困惑的。如何在迭代光源之前设置Ishadow?

也许更好的描述应该是:

代码语言:javascript
运行
复制
given a ray in space
    find nearest object with which ray intersects
    for each point light
        if normal at surface of intersected object points toward light (use dot product for this)
            cast a ray into space from the surface toward the light
                if ray intersection is closer than light* light is shadowed at this point

*如果你在你的阴影中看到奇怪的伪影,那么每个程序员在编写他们的第一个光线跟踪器时都会犯一个错误。浮点(或双精度)数学是不精确的,并且在进行阴影跟踪时,您将经常(大约一半的时间)重新相交。没有图表很难描述这个解释,但让我看看我能做些什么。

如果球面上有一个交点,在大多数情况下,该点在浮点寄存器中的表示在数学上是不精确的。它要么稍微在球体内部,要么稍微在球体外部。如果它位于球体内部,并且您尝试对光源运行交点测试,则最近的交点将是球体本身。相交距离将非常小,因此您可以简单地拒绝任何比.000001单位更近的阴影光线相交。如果您的几何体都是凸面的,并且不能合理地对自身进行阴影,那么在进行阴影测试时,您可以简单地跳过对球体的测试。

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

https://stackoverflow.com/questions/13126252

复制
相关文章

相似问题

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