我有一个天框,发现在里面移动是不可能的(只是旋转,不靠近里面的人,这不是缩放,正是移动),正如本教程中所写的https://learnopengl.com/#!Advanced-OpenGL/Cubemaps。一旦我为相机启用翻译,天窗变得相当丑陋,角落和四周可见,所以移动相机和同时移动天窗的想法并不是很好。什么是适当的解决办法?我认为这是一个相当明显的问题,但我在任何地方都找不到任何解决办法。或者我需要用另一个建筑,而不是天窗。
这里有两种状态--我在启用翻译时得到的第一种状态。我想在第二张图片中靠近山。
发布于 2017-12-08 10:27:18
尽管这个问题已经存在了几年,但是这个问题的解决方案是,您必须在之后设置视图矩阵,然后“使用”您的着色器作为天框。您不能仅仅在循环中设置视图矩阵,并期望与所有具有视图统一的着色器一起工作。
因此,问题是OP基于主循环中的教程有类似的内容:
glm::mat4 view = mCamera.GetViewMatrix();
glDepthFunc(GL_LEQUAL);
mSkyboxShader.Use();
mSkyboxShader.SetMat4("view", view);
mSkyboxShader.SetMat4("projection", projection);
mSkybox.Render(mSkyboxTexture);
glDepthFunc(GL_LESS);
不管代码如何,这都像处理任何其他可以移动到的对象一样对待skybox。解决方案是:
glm::mat4 view = mCamera.GetViewMatrix();
glDepthFunc(GL_LEQUAL);
mSkyboxShader.Use();
view = mCamera.GetViewMatrix(); <----Solution
mSkyboxShader.SetMat4("view", view);
...
您必须在激活着色器后更新视图,然后将其应用于每个需要视图矩阵的着色器程序的制服上。
https://stackoverflow.com/questions/43339247
复制相似问题