Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 关于透视和视图投影的疑问,以及自己的整体理解是否正确 Reply To: 关于透视和视图投影的疑问,以及自己的整体理解是否正确

#3000 Score: 0
左趋趋
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