首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenGL-在天窗内移动摄像机

OpenGL-在天窗内移动摄像机
EN

Stack Overflow用户
提问于 2017-04-11 07:20:58
回答 1查看 1.4K关注 0票数 0

我有一个天框,发现在里面移动是不可能的(只是旋转,不靠近里面的人,这不是缩放,正是移动),正如本教程中所写的https://learnopengl.com/#!Advanced-OpenGL/Cubemaps。一旦我为相机启用翻译,天窗变得相当丑陋,角落和四周可见,所以移动相机和同时移动天窗的想法并不是很好。什么是适当的解决办法?我认为这是一个相当明显的问题,但我在任何地方都找不到任何解决办法。或者我需要用另一个建筑,而不是天窗。

这里有两种状态--我在启用翻译时得到的第一种状态。我想在第二张图片中靠近山。

EN

回答 1

Stack Overflow用户

发布于 2017-12-08 10:27:18

尽管这个问题已经存在了几年,但是这个问题的解决方案是,您必须在之后设置视图矩阵,然后“使用”您的着色器作为天框。您不能仅仅在循环中设置视图矩阵,并期望与所有具有视图统一的着色器一起工作。

因此,问题是OP基于主循环中的教程有类似的内容:

代码语言:javascript
代码运行次数:0
运行
复制
    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。解决方案是:

代码语言:javascript
代码运行次数:0
运行
复制
glm::mat4 view = mCamera.GetViewMatrix(); 

glDepthFunc(GL_LEQUAL);  
mSkyboxShader.Use();
view = mCamera.GetViewMatrix(); <----Solution
mSkyboxShader.SetMat4("view", view);
...

您必须在激活着色器后更新视图,然后将其应用于每个需要视图矩阵的着色器程序的制服上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43339247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档