我刚刚开始实现天空盒,我正在使用OpenGL / GLSL和GLM作为我的数学库。我认为问题与矩阵有关,我无法找到利用GLM库的实现:
天空盒的模型加载得很好,然而相机会像在第三人称相机中围绕它一样旋转它。
对于我的天空盒矩阵,每次我的相机更新时我都会更新它。因为我使用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);
我知道天空盒不应用翻译,只考虑轮换,所以我不确定是什么问题。有更简单的方法吗?
视觉辅助工具:
直接没有任何动静
旋转相机时:
我的问题是:如何使用glm设置正确的矩阵来渲染天空盒:lookAt?
答案 0 :(得分:2)
Esthete是对的skybox / skydome只是对象意味着你不改变投影矩阵!!!
你的渲染应该是这样的:
当然你可以暂时将你的相机位置(投影矩阵)设置为(0,0,0)并保留带有标识的modelview矩阵,有时候会更加精确,但不要忘记在天空盒绘制后将相机位置设置回来
希望它有所帮助。