0

我正在尝试在屏幕上显示一个三角形并用键盘+鼠标四处移动,但是对象越靠近屏幕边缘,它就越伸展。以下是相关代码:

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 是我的对象坐标,projection 是我的 projectionMatrix,view 是我的 viewMatrix。我感觉问题出在我的 viewmatrx 上,但我找不到任何问题。如果您需要更多代码,请告诉我。

4

1 回答 1

2
projectionMatrix = glm::perspective(fieldOfView, 4.0f / 3.0f, 0.1f, 100.0f);

fieldofView 指定在 y 方向上的视场角,以度为单位(描述由相机成像的给定场景的角度范围)。对于给定的相机 - 主体距离,较长的镜头(小 FOV)放大主体更多的。对于给定的主体放大倍率(因此不同的相机-主体距离),较长的镜头(较小的 FOV)似乎会压缩距离;更宽的镜头(更大的 FOV)似乎扩大了物体之间的距离。

使用广角镜头的另一个结果是,当相机未与拍摄对象垂直对齐时,透视失真会更大:平行线会聚的速度与普通镜头相同,但由于总视场更广,会聚得更多。例如,当相机从地面向上指向时,建筑物向后倒塌的情况比使用普通镜头在与主体相同距离处拍摄时的情况要严重得多,因为在广角范围内可以看到更多主体建筑物。角度拍摄。因此,您拥有的视野越宽,您检测到的失真就越大。

你的怎么初始化的?

正常的 FOV 角度为 45。

于 2013-05-26T00:55:49.493 回答