[英]OpenGL/GLSL/GLM - Skybox rotates as if in 3rd person
我刚开始实现天空盒,并且使用OpenGL / GLSL和GLM作为我的数学库来实现。 我认为问题与矩阵有关,并且我无法找到利用GLM库的实现:
天空盒的模型可以很好地加载,但是相机会对其进行环绕,就像它在3d第三人称相机中围绕它旋转一样。
对于我的Skybox矩阵,每次相机更新时都会对其进行更新。 因为我使用glm :: lookAt,所以它的创建方式与我的视图矩阵基本相同,除了我将0、0、0用作方向。
这是我的视图矩阵创建。 它可以很好地渲染对象和几何体:
direction = glm::vec3(cos(anglePitch) * sin(angleYaw), sin(anglePitch), cos(anglePitch) * cos(angleYaw));
right = glm::vec3(sin(angleYaw - 3.14f/2.0f), 0, cos(angleYaw - 3.14f/2.0f));
up = glm::cross(right, direction);
glm::mat4 viewMatrix = glm::lookAt(position, position+direction, up);
类似地,我的天空矩阵是通过相同的方式创建的,只有一个更改:
glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f);
glm::mat4 skyView = glm::lookAt(position, position + direction, up);
我知道Skybox不会应用翻译,而只会考虑旋转,因此我不确定问题出在哪里。 有没有更简单的方法可以做到这一点?
视觉辅助:
继续前进,没有任何动静
当我旋转相机时:
我的问题是:如何使用glm:lookAt设置正确的矩阵以渲染天空盒?
Esthete是正确的skybox / skydome是仅表示不更改投影矩阵的对象!
您的渲染应该是这样的:
当然,您可以将摄像机位置(投影矩阵)临时设置为(0,0,0)并保留具有相同标识的modelview矩阵,这有时是更精确的方法,但不要忘记在绘制天窗之后重新设置摄像机位置。
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.