首页 > 编程知识 正文

空间构成模型作业,透视式和费歇尔投影式的转化

时间:2023-05-03 23:57:02 阅读:47191 作者:4

知识总结:变换的流程

(1)模型) Model )变换,在pa中模型只绕z轴旋转

)视图变换用于调整摄影机的位置

)3)投影变换,pa要求为透视投影,透视投影可视为挤出正交变换

)4)将视口(视口)转换、投影转换得到的(-1,1 )转换为屏幕空间

代码分析:

(1)获得视图变换矩阵(main.cpp )

视图变换的作用通过移动照相机,可以看作物体的相反方向的运动

eigen :3360 matrix4fget _ view _ matrix (eigen :3360 vector3FP /; eye _ pos (eigen :3360 matrix 4f view=eigen :3360 matrix 4f :3360 identity ); //4*4单位矩阵eigen :3360矩阵4 ftranslate; translate 1,0,0,-eye_pos[0],0,1,0,0,1,-eye_pos[2],0,0,0,0,0,1 //得到与照相机的移动方向相反的效果的矩阵view=translate * view; 返回视图; (2)模型变换矩阵具有使模型以z轴为中心旋转的效果

eigen :3360矩阵4 fget _ model _ matrix (浮动旋转_ angle (eigen 33603360矩阵4f model=eigen 33603360矩阵4f model ) todo : implementthisfunction//createthemodelmatrixforrotatingthetrianglearoundthezaxis.//thenreturnit.eigen 33666 rcon sin ) rotation_angle ),0,0,sin ) rotation_angle ),cos ) rotation_angle ),0,0 return r; 返回模型; (3)构建透视投影矩阵

光看课程还有很多细节,不太清楚的get_projection_matrix这个函数的参数是什么意思,pdf也没有说明…因为图形学的初学者已经过时了,主要是大人物

参照报道

也就是说,透视投影可以视为挤出正交投影(平移变焦)

难度集中在构建挤压矩阵persp2ortho上,需要注意。

1、近平面上的点都是x、y、z不变2,远平面上的点z不变

其馀点遵循相似三角形原理,求解方程组可得到矩阵

eigen :3360 matrix4fget _ projection _ matrix (float eye _ FOV,float aspect_ratio,float zNear,float zFar ) { eigen persp2ortho zNear,0,0,0,0,zNear,0,0,0,0,0,zNear zFar,-zNear * zFar,0,0,1,0; doublehalfeyeradian=eye _ FOV * my _ pi/2/180.0; doubletop=z near * tan (halfeyeradian; 双底=-顶; 双光线=top * aspect _ ratio; 双左=-右; eigen :3360矩阵4 forth oscale=eigen :3360矩阵4f 33603360 identity (; orthoscale2/(右左),0,0,0,0,2/(顶底),0,0,0,2/(z near-zfar ),0,0,0,eigen 330 ortho trans 1,0,0,--(右左)/2,0,1,0,--(顶底),0,0,1,--)-(zNear zFar )/2,0,--- (z near projection=matrix ortho * persp2ortho; 返回项目; }效果:

具体过程还不清楚详细……

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。