Viewing 2 reply threads
  • Author
    Posts
    • #3232 Score: 0
      左趋趋
      Participant
      4 pts
      
      void rst::rasterizer::set_pixel(const Eigen::Vector3f& point, const Eigen::Vector3f& color)
      {
          //old index: auto ind = point.y() + point.x() * width;
          auto ind = (height-1-point.y())*width + point.x();
          frame_buf[ind] = color;
      }
      

      改成

      
      void rst::rasterizer::set_pixel(const Eigen::Vector3f& point, const Eigen::Vector3f& color)
      {
          //old index: auto ind = point.y() + point.x() * width;
          auto ind = (height-1-round(point.y()))*width + point.x();
          frame_buf[ind] = color;
      
      }
      
    • #3256 Score: 0
      Shi YuChen(助教)
      Keymaster
      4 pts

      感谢你的反馈!

    • #3258 Score: 0
      戴皓天
      Participant
      9 pts

      请问一下这里为什么只对y做一个取整,而不对x取整呢。
      因为我自己传的实参就是由整型索引转成float而构成的vector3f向量所以就没在这里考虑取整的问题了

      • #3262 Score: 0
        左趋趋
        Participant
        4 pts

        理论上都应该取整,而且应该做边界判断,你其实可以写一个更准确的版本出来,我随便取一下只是避免了移行问题。

        理论上,就不应该给set_pixel传递浮点值。

        • #3265 Score: 0
          左趋趋
          Participant
          4 pts

          你看这样行不

          void rst::rasterizer::set_pixel(const Eigen::Vector3f &point, const Eigen::Vector3f &color)
          {
              // old index: auto ind = point.y() + point.x() * width;
              int j = round(point.y());
              int i = round(point.x());
              if (j < 0 || j > height - 1)
                  return;
              if (i < 0 || i > width - 1)
                  return;
              // auto ind = (height - 1 - round(point.y())) * width + round(point.x());
              auto ind = (height - 1 - j) * width + i;
              frame_buf[ind] = color;
          }
          
          • #3290 Score: 0
            戴皓天
            Participant
            9 pts

            谢谢!这样写的话就很严谨了

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