gpt4 book ai didi

c++ - 我将如何着手将天空盒应用于世界,openGL C++

转载 作者:行者123 更新时间:2023-11-30 02:39:32 25 4
gpt4 key购买 nike

我正在尝试向世界/相机/游戏中添加一个天空盒,但我不知道该怎么做。如果有人能给我一些关于如何应用它的指导,我将不胜感激。

我已经加载了天空盒,我只是不知道如何正确绘制它以便它在移动时适合相机。

我设法制作了一种立方体的纹理,它可能靠近天空盒,但只能从外面看到。一旦进入立方体,就无法从内部看到它。也许如果我可以反转立方体的面,当我在立方体内部时它会显示出来并且我可以把它变大?

从立方体外面看 enter image description here从里面往外看 enter image description here

最佳答案

几周前我遇到了类似的问题,如果您正在寻找一些伪代码,我想我可以提供帮助。首先,在渲染时使用立方体并不是最好的主意,因为您的盒子看起来不自然,将其映射到球体以获得平滑效果。

  1. 围绕您的观察者创建一个相对于您的相机移动的边界球体

  2. 在那个球体上应用纹理,这会给人一种天空相对于你移动的印象

  3. 绘制时,禁用 z-buffer 和 frustum(假设您正在使用任何剔除算法)这将允许绘制天空盒,但会确保在天空盒顶部绘制地形当 OpenGL 执行深度排序算法时。

注意:绘制天空盒后不要忘记重新启用 z-buffer,否则您的地形元素将出现在球体之外,这意味着您只会看到天空盒子。

我最近在 DirectX 中编写了一个基本的地形引擎,但原理非常相似,如果您想查看存储库,可以 find it here

查看 this file 中的第 286 行要查看天空盒是如何渲染的,请访问 SkyBox implementation file看看它是如何构造的,以及 SkyShader implementation file要查看纹理如何映射到球体,着色器文件中要关注的主要方法是 SetShaderParameters()

就相对于相机移动天空盒而言,只需将天空盒的 WVP 矩阵设置为相机的 WVP 矩阵,然后根据自己的喜好调整天空盒的 x、y、z 平面。

额外 如果您要实现多人游戏方面,只需禁用球体的背面渲染,那么每个玩家都可以看到他们的天空盒,但对手不能。或者,您可以在世界各地创建一个大球体

希望对您有所帮助 - 如果您需要更多帮助,请直接询问,我知道一开始这些东西可能相当密集:)

关于c++ - 我将如何着手将天空盒应用于世界,openGL C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29755145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com