Angus

Forum Replies Created

Viewing 17 posts - 61 through 77 (of 77 total)
  • Author
    Posts
  • in reply to: 作业1中透视投影矩阵是否需要Mviewport矩阵 #3206 Score: -1
    Angus
    Participant
    23 pts

    Ortho 参考ppt4 page24
    Pers->Ortho 参考ppt4 page33 & 36

    This post has received 1 vote down.
    in reply to: 作业1中透视投影矩阵是否需要Mviewport矩阵 #3205 Score: -1
    Angus
    Participant
    23 pts

    Pers->Ortho 用到了 zNear 和 zFar 这两个参数
    Ortho 用到了t,b,l,r,zNear,zFar全部六个参数

    This post has received 1 vote down.
    in reply to: 作业1中透视投影矩阵是否需要Mviewport矩阵 #3188 Score: -1
    Angus
    Participant
    23 pts

    viewport transformation 代码中已经写好了,它不属于透视投影的一部分。

    This post has received 1 vote down.
    in reply to: 关于第四次课件与作业一的一些疑惑 #3175 Score: 2
    Angus
    Participant
    23 pts

    其实在我的测试中,如果完全按照PPT中老师推理的矩阵来写代码的话,只需注意一下求t时要对zNear取绝对值,不需要针对zNear和zFar的正值负值对代码有任何特别调整。输入的zNear和zFar改为负值后,三角形就是顶点朝上的。因此老师的推导我认为是正确的,但确如如你所说,如果把zNear和zFar的定义误解的话,是会对老师的推导过程产生怀疑。

    另外,当三角形顶点朝上后,按D键是绕z轴顺时针渲染(-10°),按A键是绕z轴逆时针渲染(+10°),也是符合认知的。
    我当时没有仔细看其他部分的代码,不过这让我有些怀疑是否zNear和zFar为负值,才是正确的。原来二者为正值的写法是bug呢?

    当zNear和zFar为正值时,按照老师的推导,Frustum是没有包含三角形的,且此时三角形在摄像机的“后面”。但是如果没有做z方向上的裁切,也就是没有depth Clamp,我们还是看得见摄像机“后面”的三角形的。这一点可以从提高部分的「绕x轴旋转」看出,无论如何绕x轴旋转该三角形,它始终都在我们的视野之内。

    This post has received 2 votes up.
    in reply to: 关于第四次课件与作业一的一些疑惑 #3173 Score: 0
    Angus
    Participant
    23 pts

    我认为老师的推导是没错的,是代码与老师的推导不太一致。
    n和z是同符号的,它们本身是正是负无所谓,n/z一定是一个非负数。
    而且,在老师的设定中,n为负数,这可以从ppt5 page6t的t的求法中推理出,即t=tan(fov/2)*|n|
    至于你说的三角形朝下问题,可以参考

    关于光栅化后显示的x-axis和y-axis的朝向问题

    在程序中,n和f都设定为了正值,这与老师的推导是不一致的。
    如果按照老师的推导来做,要输入负值的n和f,这时的三角形是正确朝上的。

    in reply to: 关于光栅化后显示的x-axis和y-axis的朝向问题 #3172 Score: 0
    Angus
    Participant
    23 pts

    您是不是打错了,最后一句应该是「改成负数试试」吧

    in reply to: 作业一结果一条直线 #3160 Score: 0
    Angus
    Participant
    23 pts

    如果我没看错的话,你的fov并没有转成弧度制

    in reply to: Ubuntu登录显示需要密码,用户名为cs180 #3134 Score: 0
    Angus
    Participant
    23 pts

    密码:Ilovegraphics

    in reply to: 平移矩阵的负号怎么来的? #3130 Score: 0
    Angus
    Participant
    23 pts

    你根据n,f,l,r,t,b算一下这个cuboid的中心点,然后算一下怎么把这个中心点移动到原点(原点-中心点)就明白了。其实老师视频里说过一句这个,读弹幕问题的时候。

    in reply to: C/C++插件安装问题 #3120 Score: 0
    Angus
    Participant
    23 pts

    不需要安装这个也可以完成实验哒~

    in reply to: 关于View旋转矩阵的逆矩阵是怎么算出的? #3115 Score: 0
    Angus
    Participant
    23 pts

    第四节课1:27开始老师给了证明过程。

    in reply to: 这里的xyw和后面的x/w,y/w,1是相等的么? #3114 Score: 0
    Angus
    Participant
    23 pts

    表示的是同一个点

    in reply to: 透视投影中的正交投影矩阵如何求? #3093 Score: 0
    Angus
    Participant
    23 pts

    已知n,f
    参考Lecture5 page5~6,可求出l,r,t,b

    in reply to: 作业1get_view_matrix函数可能没理解到位 #3057 Score: 0
    Angus
    Participant
    23 pts

    我觉得这里是预留的功能,这次作业中没有特别设置相机角度,所以不需要rotate相机,只需要translate。
    在之后有rotate之后,这里会改为 view=rotate*translate

    Angus
    Participant
    23 pts

    是的。听闫老师那么一解释,我觉得这就其实是一个「先有鸡还是先有蛋」的问题:当约定好一种挤压方式后,远近平面的值是不变的。同时也可以说当约定好远近平面的z值不变后,挤压方式也就剩了一种。

    in reply to: 请问View Transformation为什么要旋转g x t? #3010 Score: 1
    Angus
    Participant
    23 pts

    我觉得这里也可以简单的从「结果论」去思考。View Transformation 的结果是z轴与-g轴重合,y轴与t轴重合,x轴与g×t轴重合。所以你会看到Rview的转置矩阵的写法是:(先不看齐次坐标)第一列是g×t轴的坐标,第二列是t轴坐标,第三列是-g轴坐标,代表着把x,y,z三轴“转”到g×t,t,-g三轴的位置。Rview则是倒过来。

    你可以试一下,如果只考虑z轴与-g轴重合,y轴与t轴重合,Rview的转置矩阵你第一列(代表x轴的基向量怎么变)要写什么呢?

    可以看一下3B1B的《线性代数的本质》系列视频,会对线性变化有个比较直观的理解,再思考这个问题就简单了。

    This post has received 1 vote up.
    Angus
    Participant
    23 pts

    不是助教,人在宿舍,刚下床铺

    问题1:推荐同学再听一遍老师的推导。你迷惑的这里是求透视投影的第一步,即把frustum挤压成为cuboid。挤压的具体操作是将远平面四个点在x-y平面内移动来形成一个cuboid,在这个过程中显然近平面和远平面的z值是不变的,我觉得应该不需要去约定。

    问题2.1:这个好处具体是什么我还真说不上来,等助教大佬来解答吧。只是如果相机不这样假设,后续的视口变换等我推导起来会感觉有点费劲。

    问题2.2:Camera 一开始确实可以不在原点,可以随意设置,闫老师的讲解角度与OpenGL等并不冲突,你可以再看一下相应的那几页PPT。【第一步】就像 lookat() 函数一样,根据你的喜好设置 Camera 位置,角度等。【第二步】把 Camera 和 Objects 看作一个整体(整个世界),计算如何把 Camera 移动到origin,up at y,look at -z(即求 View Transformation 矩阵),再把这个矩阵应用到这个整体上。我相信OpenGL 背后应该也是在做这样的工作,如果我理解错了,还请助教同学指正一下。

    问题3:我觉得你整体理解的是不错的,就是 View Transformation 那里感觉有些不太熟悉,看看我问题2.1的解答,且最好还是多看两遍老师的讲解。

Viewing 17 posts - 61 through 77 (of 77 total)