汤包喵喵喵

Forum Replies Created

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • in reply to: 作业3 interpolated_shadingcoords #7067 Score: 0
    汤包喵喵喵
    Participant
    2 pts

    是这样的!这个过程很重要,但是如果光看老师的课的话挺难想明白的。。。
    英文教材里11章Texture Mapping里也提到了这个矫正,看到头秃。

    in reply to: 作业3 interpolated_shadingcoords #7066 Score: 2
    汤包喵喵喵
    Participant
    2 pts

    刚写完作业3来答一发!
    (一开始也完全不明白,因为老师讲课的时候其实没有提的很清楚。是看了程序框架然后猜出来的。。)
    以下是我的理解:

    首先在rasterizer.cpp里可以看到,interpolated_shadingcoords计算出来以后,直接赋给了payload.view_pos。
    然后在main.cpp中,可以找到payload.view_pos的最终用途是phong_shader用来做shading的那个三维空间坐标点,也就是shading2里面讲的blinn-phong光照模型的光线作用点。知道了这个点,就可以用来计算光线相关的参数了,比如:1.跟光源的距离R;2.跟视点之间的向量,然后计算出半程向量h。这一切都发生在哪个空间呢?答案是view space。

    这里有一个地方一定要搞懂。。。那就是光线作用是在哪一步进行。我的理解是在view space进行。
    经过了MV变换(model变换+viewpoint变换)的空间就是view space,这时所有空间点之间的相对位置都还是正常的,所以我们要在这个view_space来做shading,来计算光的入射和空间点的作用,这样才是正常的。
    经过了MVP变换的空间还是三维空间,但已经是被透视变换distorted的三维空间,因为Z被压缩了,所以不能用这个空间来做光线作用;
    经过了MVP变换+viewport变换的空间叫做screen space,已经是二维空间点了,准备好成为像素了。

    从rasterizer.cpp中的draw()函数中可以看到,viewspace_pos是只经过了MV变换的,是view space坐标,然后被传递给rasterize_triangle()。在每一个像素上插值后,成为interpolated_shadingcoords,传递给shader去做光线作用了。来龙去脉就是这样。

    This post has received 2 votes up.
    in reply to: 作业3:UV坐标取值范围 #7063 Score: 0
    汤包喵喵喵
    Participant
    2 pts

    emmmm我自己也发现了,模型里给的uv有很少的情况小于0或者大于1,但是超出不多。然后如果用负值uv调用getColor(),就会导致opencv报错。
    我觉得因为超出值很小,大部分值还是落在[0,1]之间,这应该是类似存储误差的问题。。?所以我现在的处理办法是如果小于0,就取0。也能显示奶牛。

    Attachments:
    You must be logged in to view attached files.
    in reply to: 作业3:UV坐标取值范围 #7058 Score: 0
    汤包喵喵喵
    Participant
    2 pts

    UV坐标不能为负。11章Texture Mapping里提到了,UV的区间是[0,1]²

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