【问题标题】:How to create a starry background in 3D solar system in OpenGL?如何在 OpenGL 中创建 3D 太阳系中的星空背景?
【发布时间】: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? ...

标签: c++ opengl glut


【解决方案1】:

你快到了!

  1. 您需要为球体禁用照明,这样即使没有照明,您也可以看到纹理。
  2. 此外,您还需要启用自发光,以便星星发出自己的光。

您可能还想了解 天空盒,这是 3D 场景中非几何环境的标准方式。

【讨论】:

  • 我使用glDisable(GL_LIGHTING)(然后启用它)然后绘制它,但我仍然看不到球体。可能是纹理本身拉伸太多了吗?有没有办法让纹理保持相同大小,但多次粘贴到球体上以覆盖它?
  • 其实我刚刚发现球体的内部实际上并没有被看到。所以问题不在于它太暗,而是球体内部没有纹理。可能是常识,但对我来说是新闻。有什么方法可以让内部纹理化,还是我应该不用这种方法?
  • 好的 nvm。所以我只是 glScalef(-1,-1,-1) 并将它放在场景的中心。对我来说已经足够了
  • 您的球体没有被渲染可能有多种原因。第一个是照明(如果它离灯光太远,它会很暗 - 100% 阴影)。它也可能离相机太远(远剪辑平面)。渲染后,您必须检查拉伸纹理的映射坐标,因此您必须找到正确的设置将纹理映射到球体(您可能希望切换到立方体并使用适当的天空盒纹理)
猜你喜欢
  • 2018-08-19
  • 2013-04-19
  • 2020-07-04
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多