我正在尝试在屏幕上显示一个三角形并使用键盘+鼠标移动,但是物体离屏幕边缘越近,它就越伸展。 这是相关的代码:
fieldOfView = 45;
x += mouseSpeed * deltaTime * deltaMouseX
y += mouseSpeed * deltaTime * deltaMouseY
position = glm::vec3(0,0,5);
forward = glm::vec3(cos(y) * sin (x),
sin(y),
cos(y) * cos(x));
right = glm::vec3(sin(x - 3.14f/2.0f),
0,
cos(x - 3.14f/2.0f));
up = glm::cross(right,forward);
projectionMatrix = glm::perspective(fieldOfView, 4.0f / 3.0f, 0.1f, 100.0f);
viewMatrix = glm::lookAt(position,position + forward, up);
每帧更新一次。在我的顶点着色器中:
gl_Position = projection * view * model * vec4(vert,1)
其中vert是我的对象坐标,投影是我的projectionMatrix,视图是我的viewMatrix。我有一种感觉问题出在我的viewmatrx上,但我发现它没有任何问题。如果您需要更多代码,请与我们联系。
答案 0 :(得分:1)
projectionMatrix = glm::perspective(fieldOfView, 4.0f / 3.0f, 0.1f, 100.0f);
fieldofView指定视角的视角,以度为单位,在y方向(描述由相机拍摄的给定场景的角度范围)。对于给定的相机 - 拍摄对象距离,更长的镜头(小视场)更多地放大主题。对于给定的被摄体放大率(以及因此不同的摄像机 - 被摄体距离),较长的透镜(较小的FOV)似乎压缩距离;更宽的镜头(更多FOV)似乎可以扩大物体之间的距离。
使用广角镜头的另一个结果是,当相机未垂直于物体对准时,明显的透视失真:平行线以与普通镜头相同的速率会聚,但由于更宽的总场,会聚更多。例如,当摄像机从地面向上指向时,建筑物看起来比使用距离主体相同距离的普通镜头拍摄时更严重地倒退,因为更多的主体建筑物在宽阔的地方可见角度射击。所以,你拥有的fov越宽,你发现的失真就越大。
你们如何初始化?
正常FOV角度为45°。