左趋趋

Forum Replies Created

Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • in reply to: 作业三Blinn-Phong的问题 #4456 Score: 0
    左趋趋
    Participant
    4 pts

    你可以检查一下是不是算了两遍ambient

    理论上ambient给了全局强度,算一遍就好了。

    in reply to: 提高部分测试问题 #3308 Score: 0
    左趋趋
    Participant
    4 pts

    那你这不就是超采了吗,理论上是最完美的,但是这样还是AA么?

    in reply to: 提高部分测试问题 #3307 Score: 0
    左趋趋
    Participant
    4 pts
    in reply to: 提高部分测试问题 #3282 Score: 0
    左趋趋
    Participant
    4 pts

    你说的这一步已经有了,和我提出的这个问题没有关系。。。

    in reply to: 提高部分测试问题 #3280 Score: 0
    左趋趋
    Participant
    4 pts

    我仔细思考了一下,似乎按我的做法并没有完全去除这个黑色。不知道我做的方法对不对,感觉即使使用了细化深度检测,也只能接近更好,而不能消除残留。

    null

    in reply to: 作业2绘图舍入的bug #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;
    }
    
    in reply to: 作业2绘图舍入的bug #3262 Score: 0
    左趋趋
    Participant
    4 pts

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

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

    in reply to: 提高部分测试问题 #3244 Score: 0
    左趋趋
    Participant
    4 pts

    我想了想,觉得你说的很有道理,你已经把黑边的问题讲的很明白了~
    👍

    in reply to: 关于作业2判断三角形的问题 #3243 Score: 0
    左趋趋
    Participant
    4 pts

    没问题,还有可能同时小于0。

    等于零的时候,也有很多细节性的规定。

    in reply to: 提高部分测试问题 #3125 Score: 0
    左趋趋
    Participant
    4 pts

    为什么code的字体这么小呢?

    in reply to: 提高部分测试问题 #3124 Score: 0
    左趋趋
    Participant
    4 pts

    我写了一个新的命令行parser部分,测起来就比较方便了。

    
        while (parsePos < argc)
        {
            std::string arg = std::string(argv[parsePos]);
            if (arg == "-r")
            {
                if (parsePos + 1 >= argc)
                {
                    std::cerr << "-r option error" << std::endl;
                    std::cerr << "Usage: " << argv[0] << " -r angle [-a axisX axisy axisZ] [filename.png]" << std::endl;
                    exit(-1);
                }
                angle = std::stof(argv[parsePos + 1]);
                parsePos += 2;
            }
            else if (arg == "-a")
            {
                if (parsePos + 3 >= argc)
                {
                    std::cerr << "-a option error" << std::endl;
                    std::cerr << "Usage: " << argv[0] << " -r angle [-a axisX axisy axisZ] [filename.png]" << std::endl;
                    exit(-1);
                }
                raxis.x() = std::stof(argv[parsePos + 1]);
                raxis.y() = std::stof(argv[parsePos + 2]);
                raxis.z() = std::stof(argv[parsePos + 3]);
                parsePos += 4;
            }
            else if (arg.rfind(".png") == arg.size() - 4)
            {
                command_line = true;
                filename = arg;
                parsePos += 1;
            }
            else
            {
                std::cerr << "Invalid option or filename: " << arg << std::endl;
                std::cerr << "Usage: " << argv[0] << " -r angle [-a axisX axisy axisZ] [filename.png]" << std::endl;
                exit(-1);
            }
        }
    
    in reply to: 作业1代码框架有一处crash bug #3042 Score: 0
    左趋趋
    Participant
    4 pts

    没什么困扰,倒是让我好好看了看代码,修的很快,给力!

    左趋趋
    Participant
    4 pts

    兄弟我来回答你一下吧,虽然我不是助教。

    1. 你说的是frustum的远近平面还是说的标准化设备坐标(NDC)的?OpenGL的NDC是从[-1,-1,-1]~[1,1,1], DirectX的NDC是xy从[-1,-1]~[1,1],z是0到1. 而frustum的远近值是你自己设定的,比如说渲染多远,一般是看机器性能来设置的,一般游戏里也有一个条让你拉,选择渲染距离,往往就是调整这个frustum的far plane的值的。

    2. 是的,lookat一共有7个自由度,首先是摄像机的坐标,然后是观察点的坐标,然后是摄像机旋转的方向。输入这7个值(一般是给出摄像机坐标,观察点,以及一个上参考矢量)。 比如OpenGL是这样创建的。

    glm::mat4 view;
    view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), 
      		   glm::vec3(0.0f, 0.0f, 0.0f), 
      		   glm::vec3(0.0f, 1.0f, 0.0f));

    3. 你对model的理解不是很正确,model矩阵是什么呢,比如有一个箱子,它的坐标有一个local坐标,8个点,大概长这个样子:(点集A)

    [0,0,0]
    [0,1,0]
    [1,0,0]
    [1,1,0]
    [0,0,1]
    [0,1,1]
    [1,0,1]
    [1,1,1]

    但是你这样的坐标是针对这个model内部来说,local的,你把它放在一个大的world里,比如不旋转,只是把箱子平移了[2,2,0], 那么你的箱子的这8个点在world里就变成了:(点集B)

    [2,2,0]
    [2,3,0]
    [3,2,0]
    [3,3,0]
    [2,2,1]
    [2,3,1]
    [3,2,1]
    [3,3,1]

    这个从点集A到点集B的变换就是model矩阵。

    至于你说的model上加上一些颜色值,最终显示出来,这本质上也没错,就像以下图片的第五步一样,非常的简单。
    draw  hourse

Viewing 13 posts - 1 through 13 (of 13 total)