gpt4 book ai didi

c++ - 旋转对象 OpenGL 时出现严重失真

转载 作者:行者123 更新时间:2023-11-28 04:09:00 25 4
gpt4 key购买 nike

我一直在尝试通过制作 View 矩阵和模型矩阵来旋转四边形。我正在使用 GLM 来执行此操作。

下面是制作矩阵的代码:

glm::mat4 view = glm::translate(glm::mat4(1.0f), position);
view = view * glm::rotate(glm::radians(pitch), glm::vec3(1.0f, 0.0f, 0.0f));

glm::mat4 model = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, 0.0f));

这是顶点着色器:

#version 330 core
layout (location = 0) in vec3 aPos;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main()
{
gl_Position = projection * view * model * vec4(aPos, 1.0);
}

所以这段代码正在旋转对象,但是它们在旋转时非常扭曲,并且在屏幕的顶部和底部旋转得更慢。我试图查找另一种方法来执行此操作,但屏幕上根本没有显示任何其他内容。

编辑:这是失真的链接:https://imgur.com/a/HzUNJAe

img

最佳答案

对于透视图来说,形状扭曲是很常见的。您的情况如下所示:

overview

x 轴穿过你的 QUAD 中心,所以当你围绕 x 旋转时,你的四边形的一半离相机更近,另一半离相机更远......正如你所看到的,更近的部分可以比未旋转的尺寸大得多四边形。

不成比例的失真可能是由两件事引起的:

  1. 鱼眼

    你离相机太近尝试将你的四边形从相机移得更远,例如 10.0 或 z 轴上的更多单位。你离 znear 越近,QUAD 的较近部分和较远部分之间的比例失调就越大

    鱼眼受相机的 znear 和 FOV 影响很大,因此改变它们也可能有帮助......(更大的 znear,更小的 FOV)

    我看到鱼眼是这样的:

    fisheye

    如果你的物体离相机太近,那么未旋转的 QUAD 实际上比旋转后的小,因为它在相机观察方向(-z 轴)的焦点和 ZY 平面中的物体边缘之间的视角较小。一旦相机或 QUAD 远离彼此,就不会发生这种情况。

  2. 错误的纵横比校正

    当您设置透视图时,请检查您是否提供了正确的宽高比(而不是倒置的)。如果 x 轴和 y 轴上的比例在视觉上不相同,那么当您的 QUAD 直接面对相机时,它不是正方形的……并且在旋转时它可能会产生奇怪的外观行为。

关于c++ - 旋转对象 OpenGL 时出现严重失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com