我一直在尝试通过制作视图矩阵和模型矩阵来旋转四边形。我正在使用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
最佳答案
对于透视图,形状变形是其共同点。您的情况如下:
x轴正穿过QUAD中心,因此当您绕四边形的x旋转时,四边形的一半会更靠近相机,而另一半会更远...如您所见,更近的部分会变得比未旋转的QUAD大得多。
不成比例的失真可能是由两件事引起的:
鱼眼
您距离相机太近,请尝试将四边形移离相机更远,例如在Z轴上移动10.0
或更多单位。您离zz越近,QUAD的近端和远端之间的比例就越大
鱼眼镜头受相机的znear和FOV影响很大,因此更改它们可能也有帮助...(znear较大,FOV较小)
我看到这样的鱼眼:
如果您的物体离相机太近,则未旋转的QUAD实际上会小于旋转的QUAD,因为它在相机观察方向(-z轴)的焦点与ZY平面中的对象边缘之间的视角较小。一旦将摄像机或QUAD移开,则不会发生这种情况。
宽高比校正错误
设置透视图时,请检查您是否提供了正确的宽高比(并且未反转)。如果外壳在x和y轴上的比例在视觉上不相同,那么当QUAD直接面对相机时,它不是方形的,而在旋转时可能会产生怪异的外观。