Forum Replies Created
-
AuthorPosts
-
1.在进行矩阵相乘的时候,计算方法是一致的。但是经过坐标变换后,点变为点,向量变为向量,是不一样的。
3.(1)是的。
(2)不是很清楚双曲线判断法是什么,但是设某点的z坐标为z0,设z0变化后z坐标为z0’,则(z0’-z0)是关于z0的二次函数(在z0=n或f时都为0,其余都小于0),所以都是变远的。你的crossMat是4*4的矩阵吧,但赋值时是按3*3来的。
感谢你的反馈!
1.向量的齐次坐标表示为(x,y,z,0)T,点的齐次坐标表示为(x,y,z,1)T,所以这应该是一个点。
2.对的,因为z和n的符号是相同的,所以n/z一定为正,故这里可以直接用真实坐标(负数)表示。
3.对的。没问题,这样的结果可以了。
ubuntu在命令行下输入密码是不会显示输入内容的,请保证输入正确的密码后按enter即可
先试试make时把-j4去掉。
如果不行,有可能是数组越界,再试试把rasterizer.cpp第234行auto ind = (height-point.y())*width + point.x()改成auto ind = (height-1-point.y())*width + point.x()。试试把rasterizer.cpp第234行auto ind = (height-point.y())*width + point.x()改成auto ind = (height-1-point.y())*width + point.x()。
- This reply was modified 4 years, 9 months ago by Shi YuChen(助教).
一般来说,你想看到一个物体的投影,则投影前选取的长方体区域至少要是该物体的bounding box。
所以可以说,l、r、b、t是根据物体的大小位置来设置的。并不需要修改rasterizer.hpp里的内容,但是需要理解该头文件与.cpp文件内各个函数的作用。
你的图片没有上传成功,应该超过限制大小了,能再传一次吗?
并不是,在闫老师的推导过程中,相机lookat方向是-z,而在main函数中调用get_projection_matrix函数时给的zNear和zFar都是正数,所以关于原点中心对称了。
你可以试着把main函数中两次调用的zNear和zFar改为正数试试。提交发下去的作业框架里那些内容就行,即CMakelists.txt、头文件和cpp文件。
是的
对于这个框架来说,照着闫老师的方法的确是上下颠倒的(其实应该是关于原点对称),这是因为在main函数里调用get_projection_matrix()函数时传入的zNear和zFar都是正数,而相机的lookat方向是-z。
如果lookat变换为+z方向的话,投影之后物体应该是关于原点对称。
另外,左手系和右手系其实就是相当于把z轴方向反向一下,右手系的+z相当于左手系的-z(x, y轴方向相同),所以应该也是关于原点对称的。
嗯,没问题。
我又看了一遍代码框架,发现在main函数中调用get_projection_matrix()函数时传入的zNear和zFar都为正数。但是按闫老师的推导过程,相机的lookat方向是-Z方向,所以呈现的结果相当于关于原点做了一次对称,即导致了三角形为上下颠倒的。所以不用担心,向下的结果是正确的。
这样的确是可行的,因为对于这两个函数,变换矩阵只有一个,所以直接返回是可以的。
但是如果在函数中需要用到复合变换(比方设为先平移后旋转),那么就可以先对transformation矩阵赋值(平移),用model左乘transformation后再对transformation赋值(旋转),最后model再左乘transformation,这样就不需要定义多个变换矩阵,且看起来比较直观。- This reply was modified 4 years, 9 months ago by Shi YuChen(助教).
- This reply was modified 4 years, 9 months ago by Shi YuChen(助教).
可以先将get_model_matrix函数注释掉,然后编写好get_rotation函数。
接着,将main函数中两处r.set_model(get_model_matrix(angle))注释掉,改为r.set_model(get_rotation(axis(自己随意选),angle))即可编译调试。我用你写的代码试过了,是能成功运行的。
就错误信息来看,应该是opencv的库没有配置好,也可能是launch.json的配置有问题,没有把库包含进去,关于配置launch.json具体的操作你可以上网搜搜看。- This reply was modified 4 years, 10 months ago by Shi YuChen(助教).
你看看是不是有什么地方拼写有误,或者你把两处添加矩阵的代码截个图发上来看一下。
这个问题我看了一下,的确是因为我们编写不周与测试不周导致的,给你造成困扰非常抱歉。
同时也要感谢你提出这个问题,我们已经将框架更新并重新上传了。嗯,你说的是正确的,的确else return 0;是多余的。这是我们的工作失误,请见谅。
能发一下问题界面的截图吗?
另外,可以先在命令行里输入
cmake –version(两个短横杠)看看cmake是否已安装- This reply was modified 4 years, 10 months ago by Shi YuChen(助教).
- This reply was modified 4 years, 10 months ago by Shi YuChen(助教).
- This reply was modified 4 years, 10 months ago by Shi YuChen(助教).
这里需要你输入密码(登陆密码),因为这里需要管理员权限。
可以直接将main.cpp与CMakeLists.txt打包提交即可。
嗯,是的。不好意思,我没有表述完整。
- This reply was modified 4 years, 10 months ago by Shi YuChen(助教).
平移就看仿射矩阵的第四列前三行即可。若仿射矩阵的左上角3*3的子矩阵是正交阵,则只有旋转变换。
请问你用的是qq的邮箱吗?qq的邮箱好像被ban了,你可以试着换换别的邮箱。
-
AuthorPosts