gpt4 book ai didi

c++ - OpenGL 渲染不同的对象

转载 作者:行者123 更新时间:2023-11-28 05:48:47 24 4
gpt4 key购买 nike

我在渲染我的太阳系时遇到了一些问题。

我有小物体和大物体,大物体的距离是小物体的 10e9 倍。我如何渲染所有这些? (当我围绕我的小物体时,我想看到太阳)

glm::perspective(m_fInitialFoV, 4.0f / 3.0f, near, far);

如果远/近太大,所有物体都在闪烁。

最佳答案

最好的方法是按比例对对象进行分组并分别渲染它们。例如,太阳系可以使用地球的尺度作为单位,即半径为 6378.1 km,距离太阳的距离为 147.09x10^6 km

围绕地球半径对这些进行归一化,我们得到:

Earth's Radius: 1.0 unit
Distance from sun: 23061.72 units

相同的归一化原则适用于其他太阳系天体:

Venus' Radius: 0.9488405638 units
Distance from sun: 16851.41 units

Pluto's Radius: 0.186105580 units
Distance from sun: 695633.4 units

您还应该设置深度以包含这些数字。只要物体之间有很大的空间,就不会出现错误和 z 冲突。所以:

  1. 首先渲染“大”组。 (大深度范围)
  2. 然后只清除屏幕的深度。
  3. 然后渲染小的和靠近相机的物体,比如小行星、宇宙飞船等。不需要那么大的东西数字。 (这里使用小得多的深度范围)
  4. 大功告成。

如您所见,您可以根据比例和多个级别对场景进行分组。例如,您可以获取本地恒星群的坐标列表,首先将它们渲染为点,清除深度,然后渲染您所在系统的主体,再次清除深度,并渲染本地对象你的职位。您还应该考虑到,从地球上几乎看不到像冥王星这样的行星,因此您可以简单地使用更小的深度范围进行绘制。

关于c++ - OpenGL 渲染不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35700648/

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