为什么在for循环中创建的值在循环体内不起作用?

问题描述

关于我为什么在if(!insideTriangle(x,y,tv)中为什么我不断收到错误消息说x和y没有在computeBarycentri2d(x,y,tv)赋值的问题上有几个问题))的值被分配为一个int值。我不断收到的每个值的错误是“未定义标识符x”

我遇到的另一个问题是if(zp> = depth_buf [y * width + x])中的continue语句将无法工作,并给我一个错误:“ continue语句只能在循环中使用”。

非常感谢您提供有关如何解决这些错误的任何帮助

void rst::rasterizer::rasterize_triangle(const Triangle& t,const std::array<Eigen::Vector3f,3>& view_pos) 
    {
        std::array v = t.toVector4();
        float trix[3] = {t.v[0][0],t.v[1][0],t.v[2][0] };
        float triy[3] = {t.v[0][1],t.v[1][1],t.v[2][1] };
    
        std::pair<float*,float*> xrange = std::minmax_element(trix,trix + 3);
        std::pair<float*,float*> yrange = std::minmax_element(triy,triy + 3);
        for (int x = std::floor(*xrange.first); x < std::ceil(*xrange.second); ++x)
            for(int y = std::floor(*yrange.first); y < std::ceil(*yrange.second); ++y)
                if(!insideTriangle(x,y,t.v)) continue;
    
                auto[alpha,beta,gamma] = computeBarycentric2D(x,t.v);
                float Z = 1.0 / (alpha / v[0].w() + beta / v[1].w() + gamma / v[2].w());
                float zp = alpha * v[0].z() / v[0].w() + beta * v[1].z() / v[1].w() + gamma * v[2].z() / v[2].w();
                zp *= Z;
    
                if(zp >= depth_buf[y * width + x]) continue;
                depth_buf[y * width + x] = zp;
}

解决方法

因此,在@ 1201ProgramAlarm的帮助下,我发现我需要做的就是在每个for循环中添加方括号,从而消除了我所有的错误!

以下是更新的代码:

URL GOTO=https://docs.google.com/spreadsheets/d/fileID
SET !VAR1 {{!LOOP}}
ADD !VAR1 {{!LOOP}}
TAG POS={{!VAR1}} TYPE=A ATTR=HREF:http://www.linkedin.com/company/*
TAB T=2
TAG POS=23 TYPE=SVG ATTR=TXT:
TAG POS=1 TYPE=A ATTR=ID:ember417
TAB T=3
TAG POS=1 TYPE=BUTTON ATTR=ID:ember96
TAG POS=1 TYPE=DIV ATTR=TXT:Blacklist:<SP>it<SP>companies
TAB T=1
TAB CLOSEALLOTHERS