【问题标题】:How would I go about applying a skybox to the world, openGL C++我将如何将天空盒应用于世界,openGL C++
【发布时间】:2015-04-20 18:02:36
【问题描述】:

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

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

我设法为一种立方体贴图,它可能接近天空盒,但只能从外面看到。一旦你进入立方体,你就无法从里面看到它。也许如果我可以反转立方体的面,当我在立方体内时它会显示出来,我可以把它变大?

从立方体外面看着它 从内向外看

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

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

    1. 在您的查看器周围创建一个相对于您的相机移动的边界球

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

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

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

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

    查看this file 中的第 286 行以查看 Skybox 是如何渲染的,然后还访问 SkyBox implementation file 以查看它是如何构造的,并查看 SkyShader implementation file 以查看纹理是如何映射到球体的, shader文件中主要关注的方法是SetShaderParameters()

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

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

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

    【讨论】:

    • 感谢您的解释,我认为我不需要太深入,它只是针对一个小项目。我正计划制作像你最初所说的那样的东西,比如一个可以像相机一样移动的边界球体/盒子,但为了做到这一点,我需要能够从里面而不是外面看到盒子。关于这方面的任何提示,所以我不必重新编写整个实现?编辑:这只是翻转立方体顶点的情况吗?
    • 反转面绝对可以让您看到内部的纹理,然后您需要做的就是相对于相机移动天空盒 - 为此,将天空盒 WVP 乘以相机WVP,并确保您的相机原点在应用程序启动时位于合理的位置(确保您的相机最初位于立方体中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2023-03-11
    • 2016-10-19
    • 1970-01-01
    • 2020-02-29
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多