如何在 OpenGL 中创建 3D 太阳系中的星空背景?
Posted
技术标签:
【中文标题】如何在 OpenGL 中创建 3D 太阳系中的星空背景?【英文标题】:How to create a starry background in 3D solar system in OpenGL? 【发布时间】:2018-05-21 06:21:08 【问题描述】:我有一个简单的太阳系模拟,其中行星围绕太阳运行。但我想创建一个星空背景,它不一定是准确的表示。
我尝试下载一张星空图片,然后将其作为纹理映射到一个大球体。然后放置球体,使其包含整个场景,但无论图片如何,它们都非常暗淡。至少,我认为。我什至看不到星星。当我将球体缩小时,我可以看到它实际上是在对其进行纹理处理,但它一点也不亮。
还有其他方法可以做到这一点吗?谢谢
【问题讨论】:
您是否尝试过禁用球体的照明? 使用立方体贴图纹理。并记住在不照亮它的情况下绘制它(仅纹理)。 你正在尝试的是一个天空穹顶。要么增加天空位图的分辨率,要么减小天空穹顶的大小。禁用默认照明。 你正在尝试的是一个天空穹顶。要么增加天空位图的分辨率,要么减小天空穹顶的大小。禁用默认照明。 没有代码,纹理和截图我们只能问。问题可能在任何地方(错误的颜色、照明、分辨率等)。有关混合方法,请参阅 swift sphere combine star data,有关其他想法和内容,请参阅 Is it possible to make realistic n-body solar system simulation in matter of size and mass? ... 【参考方案1】:你快到了!
-
您需要为球体禁用照明,这样即使没有照明,您也可以看到纹理。
此外,您还需要启用自发光,以便星星发出自己的光。
您可能还想了解 天空盒,这是 3D 场景中非几何环境的标准方式。
【讨论】:
我使用glDisable(GL_LIGHTING)
(然后启用它)然后绘制它,但我仍然看不到球体。可能是纹理本身拉伸太多了吗?有没有办法让纹理保持相同大小,但多次粘贴到球体上以覆盖它?
其实我刚刚发现球体的内部实际上并没有被看到。所以问题不在于它太暗,而是球体内部没有纹理。可能是常识,但对我来说是新闻。有什么方法可以让内部纹理化,还是我应该不用这种方法?
好的 nvm。所以我只是 glScalef(-1,-1,-1)
并将它放在场景的中心。对我来说已经足够了
您的球体没有被渲染可能有多种原因。第一个是照明(如果它离灯光太远,它会很暗 - 100% 阴影)。它也可能离相机太远(远剪辑平面)。渲染后,您必须检查拉伸纹理的映射坐标,因此您必须找到正确的设置将纹理映射到球体(您可能希望切换到立方体并使用适当的天空盒纹理) 以上是关于如何在 OpenGL 中创建 3D 太阳系中的星空背景?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 c++ 和 opengl 在 mac 中创建窗口?