Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 作业1代码main.cpp中ind{ {0, 1, 2} }的作用

Viewing 2 reply threads
  • Author
    Posts
    • #16463 Score: 0
      niukaifang
      Participant

      请教下各位,在main函数中看到了 ind 这个向量,它是在 rasterizer类中的draw函数中使用,看代码,没看出来这个变量所代表的含义,还请各位指点下,多谢了。

    • #16465 Score: 0
      Valkierja
      Participant

      我也是初学者, 但是我问了一下chatGPT, 他告诉我这三个值代表了pos向量中三个点的”名字”
      他们分别被称作顶点0, 顶点1, 顶点2
      以下是chatgpt原文

      变量ind表示索引数组,其中存储了构成模型三角形面片的顶点的索引。在这段代码中,ind中只包含单个三角形面片,由顶点0、1、2组成。

      • #16474 Score: 0
        niukaifang
        Participant

        好,多谢,我顺着这个思路再去读下代码

    • #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 就是第一个三角形三个点的坐标的值,三个顶点的序号

Viewing 2 reply threads
  • You must be logged in to reply to this topic.