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) は、オブジェクト間の距離を拡大するように見えます。

広角レンズを使用するもう 1 つの結果は、カメラが被写体に対して垂直に配置されていない場合に、より大きな遠近歪みが見られることです。平行線は通常のレンズと同じ速度で収束しますが、全視野が広いため、より収束します。たとえば、カメラを地上から上に向けると、被写体から同じ距離で通常のレンズを使用して撮影した場合よりも建物がより激しく後方に倒れて見えます。角度ショット。したがって、視野が広いほど、検出される歪みが最も大きくなります。

あなたのものはどのように初期化されていますか?

通常の FOV 角度は 45 です。

于 2013-05-26T00:55:49.493 に答える