c – OpenGLGLSLGLM – Skybox像第三人一样旋转

c – OpenGLGLSLGLM – Skybox像第三人一样旋转,第1张

概述我刚刚开始实现天空盒,我正在使用OpenGL / GLSL和GLM作为我的数学库.我假设问题是矩阵相关的,我无法找到利用GLM库的实现: 天空盒的模型加载得很好,然而相机在3d第三人称相机中围绕它旋转就好了. 对于我的天空盒矩阵,每次我的相机更新时我都会更新它.因为我使用glm :: lookAt,它基本上以与我的视图矩阵相同的方式创建,除了我使用0,0,0作为方向. 这是我的视图矩阵创建.它在渲 我刚刚开始实现天空盒,我正在使用OpenGL / GLSL和GLM作为我的数学库.我假设问题是矩阵相关的,我无法找到利用GLM库的实现:

天空盒的模型加载得很好,然而相机在3d第三人称相机中围绕它旋转就好了.

对于我的天空盒矩阵,每次我的相机更新时我都会更新它.因为我使用glm :: lookAt,它基本上以与我的视图矩阵相同的方式创建,除了我使用0,0作为方向.

这是我的视图矩阵创建.它在渲染对象和几何体时工作正常:

direction = glm::vec3(cos(anglePitch) * sin(angleYaw),sin(anglePitch),cos(anglePitch) * cos(angleYaw));right = glm::vec3(sin(angleYaw - 3.14f/2.0f),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设置正确的矩阵来渲染天空盒?

解决方法 Esthete是正确的skyBox / skydome只是对象意味着你不改变投影矩阵!

你的渲染应该是这样的:

>清除屏幕/缓冲区
>设置相机
>将modelvIEw设置为IDentity,然后将其转换为相机的位置,您可以直接从投影矩阵获取位置(如果我的存储器在数组位置12,13,14处服务)以获得矩阵,请参阅此https://stackoverflow.com/a/18039707/2521214
>绘制skyBox / skydome(不要越过z_far平面,或禁用深度测试)
> optionaly清除Z缓冲区或重新启用深度测试
>绘制场景stuf ….(不要忘记为每个绘制的模型设置模型视图矩阵)

当然你可以临时将你的相机位置(投影矩阵)设置为(0,0)并保留带有标识的模型视图矩阵,有时候更精确的方法但不要忘记在天空盒绘制后设置相机位置.

希望能帮助到你.

总结

以上是内存溢出为你收集整理的c – OpenGL / GLSL / GLM – Skybox像第三人一样旋转全部内容,希望文章能够帮你解决c – OpenGL / GLSL / GLM – Skybox像第三人一样旋转所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存