簡體   English   中英

奇怪的陰影立方體raytracing

[英]Weird shadows cube raytracing

這是我在這個光線追蹤事情中的第三個問題,但是有了進步:P所以,我正在為面向對象的編程類實現一個C ++光線跟蹤器,到目前為止,我已經實現了單色球體和平面,支持反射和鏡面反射陰影。 這是我做過的事情的一個例子:

那漂亮又有光澤

現在我正在嘗試實現一般多面體。 我正在使用此算法的修改版本來計算與nFaces()面的任意多面體的交點 ,每個面由Vec Polyhedron :: point(int face)Vec Polyhedron :: normal(int 定義的平面包含臉)

Vec Polyhedron::intersect(Vec o, Vec d)
{
    int face = nFaces();
    Vec ni(0,0,0), pi(0,0,0);
    unit te = -1;
    unit tl = -1;
    unit t = 0;
    unit N, D;
    Vec v = d.normal();
    int facein, faceout;
    for(int i = 0; i < face; i++)
    {
        ni = normal(i);
        pi = point(i);
        N = ((pi - o)*ni);
        D = v*ni;
        if(D == 0 && N < 0)
            return o;
        if(D != 0)
        {
            t = N/D;
            if(t > 0)
            {
                if(N < 0)
                {
                    if(t > te){
                        te = t;
                        facein = i;
                    }
                }else{
                    if((tl == -1) || (t < tl)){
                        tl = t;
                        faceout = i;
                    }
                }
                if((tl != -1) && (tl < te))
                    return o;
            }
        }
    }
    if(tl != -1)
    {
        if(te != -1)
        {
            v = v*te + o;
            return (v + normal(facein)*0.000000000001);
        }
        v = v*tl + o;
        return (v + normal(faceout)*0.000000000001);
    }
    return o;
}

因此,我通過移除球並添加一個紅色立方體(我實施的唯一類型的多面體是Cuboid)來修改場景並運行它。 這是結果:

在此輸入圖像描述

我完全不知道為什么。 有線索嗎?

我是愚蠢的,誤解了算法。 我認為(tl <te)部分會處理Polyhedron臉上的所有東西,但事實並非如此。 傻我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM