#16605 Score: 0
CheapMeow
Participant

在 main 函数中,一开始定义了 pos 和 ind,然后 load 之后得到 pos_id 和 ind_id

之后的循环之中没有更改 pos_id 和 ind_id,那么显然,一开始得到的 pos_id 和 ind_id 就是三角形的 pos 和 ind

再看具体是怎么用这个 pos_id 和 ind_id 的,他是在光栅化器的 draw 函数中用的,用在 pos_buf 和 ind_buf


    auto& buf = pos_buf[pos_buffer.pos_id];
    auto& ind = ind_buf[ind_buffer.ind_id];

然后之后的功能都是根据这个取出来的 buf 和 ind

那么再看位置缓冲和顶点缓冲的定义:


    std::map<int, std::vector<Eigen::Vector3f>> pos_buf;
    std::map<int, std::vector<Eigen::Vector3i>> ind_buf;

map 里面一个 id 对应一个 vector

对于 pos_buf 是一个 id 对应一个 std::vector<Eigen::Vector3f>,根据常识以及之前 main 函数中的初始化写法可以知道,这里就是给了三个点的坐标的值,坐标用 Eigen::Vector3f 表示

对于 ind_buf 同理,就是一个 id 对应三个顶点的序号

这就很容易理解了。对于只有一个三角形的情况,这里取出来的 buf 和 ind 就是第一个三角形三个点的坐标的值,三个顶点的序号