Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 作业1 绕X轴旋转会数组越界

Viewing 3 reply threads
  • Author
    Posts
    • #16104 Score: 0
      Ashechol
      Participant
      1 pt

      越界
      终止的状态
      绕y,z轴没有越界的问题

    • #16105 Score: 1
      Ashechol
      Participant
      1 pt

      目前的解决办法是,讲rasterizer.cpp中set_pixel函数的判断像素是否在画布上的条件从
      if (point.x() < 0 || point.x() >= width || point.y() < 0 || point.y() >= height) return;
      改成
      if (point.x() <= 0 || point.x() >= width || point.y() <= 0 || point.y() >= height) return;

      因为当计算到 (664, 0) 这个像素时,index的生成公式算出的序号会越界,即 490664

      This post has received 1 vote up.
    • #16209 Score: 0
      waqia
      Participant
      2 pts

      因为作业框架没有考虑到三角形出视锥的情况。以z轴转动是不会出视锥的,其他轴很可能会出视锥,这个时候数组会越界

    • #16598 Score: 0
      CheapMeow
      Participant

      就像楼上说的,出错在 rasterizer.cpp 的 set_pixel

      如果 x 和 y 同时为 0,ind 此时等于 height * width,但是数组范围为 [0, height * width – 1],因此出现了越界

      解决方法是不允许 x 和 y 同时为 0,也就是把小于号改成小于等于号

      
      void rst::rasterizer::set_pixel(const Eigen::Vector3f& point, const Eigen::Vector3f& color)
      {
          //old index: auto ind = point.y() + point.x() * width;
          if (point.x() <= 0 || point.x() >= width ||
              point.y() <= 0 || point.y() >= height) return;
          // if point.x() == 0 and point.y() == 0
          // then get ind == height * width
          // but size of frame_buf == height * width
          // so available index of frame_buf is [0, height * width - 1]
          // so don't allow point.x() == 0 and point.y() == 0
          auto ind = (height-point.y())*width + point.x();
          frame_buf[ind] = color;
      }
      
Viewing 3 reply threads
  • You must be logged in to reply to this topic.