使用OpenGL在太空中渲染星星的可能技术?

使用OpenGL在太空中渲染星星的可能技术?,opengl,Opengl,我有大量的恒星(粒子),它们几乎不分散在广阔的空间中。我需要以某种方式想象这个空间,包括其中的导航。显然,我不能只向OpenGL提供我粒子的所有真实空间坐标,看起来我需要执行严格的处理,并想出一些易于渲染的东西,比如纹理或带有OpenGL友好坐标的少量点。 所以,问题是,有没有解决这项任务的通用技术,如果没有,你会怎么做?你可以使用分层天空立方体的方法,在上面渲染星星和物体。如果距离较近,您可以在“matroyshka”立方体排列上使用视差滚动方法。您可以使用分层天空立方体的方法,在其上渲染星星

我有大量的恒星(粒子),它们几乎不分散在广阔的空间中。我需要以某种方式想象这个空间,包括其中的导航。显然,我不能只向OpenGL提供我粒子的所有真实空间坐标,看起来我需要执行严格的处理,并想出一些易于渲染的东西,比如纹理或带有OpenGL友好坐标的少量点。
所以,问题是,有没有解决这项任务的通用技术,如果没有,你会怎么做?

你可以使用分层天空立方体的方法,在上面渲染星星和物体。如果距离较近,您可以在“matroyshka”立方体排列上使用视差滚动方法。

您可以使用分层天空立方体的方法,在其上渲染星星和对象。如果距离较近,您可以在“matroyshka”立方体排列上使用视差滚动方法。

您可以相当轻松地绕过深度缓冲精度限制。你只需要把所有的星星分成不同的距离。我不确定是否有名字,我只是在一些地方看到过对它的描述

假设你的深度缓冲区/投影矩阵在你出现精度问题之前可以达到10000,但你的恒星远达27000颗。你可以根据星星的距离来分类。0到10000颗星星进入第一个箱子,10000到20000颗星星进入第二个箱子,以此类推。然后开始绘制它们:

  • 清晰的颜色和深度缓冲区
  • 将投影矩阵设置为近=20000和远=30000
  • 画出20000到30000之间的所有星星
  • 仅清除深度缓冲区
  • 将投影矩阵设置为近=10000,远=20000
  • 画出10000到20000之间的所有星星
  • 仅清除深度缓冲区
  • 将投影矩阵设置为近=0和远=10000
  • 绘制0到10000之间的所有星星

  • 由于您知道10-20仓中的所有星星都在20-30仓中所有星星的前面,因此您可以安全地清除深度缓冲区,从而绕过深度缓冲区的精度限制,并尽可能远地绘制对象

    您可以相当容易地绕过深度缓冲区精度限制。你只需要把所有的星星分成不同的距离。我不确定是否有名字,我只是在一些地方看到过对它的描述

    假设你的深度缓冲区/投影矩阵在你出现精度问题之前可以达到10000,但你的恒星远达27000颗。你可以根据星星的距离来分类。0到10000颗星星进入第一个箱子,10000到20000颗星星进入第二个箱子,以此类推。然后开始绘制它们:

  • 清晰的颜色和深度缓冲区
  • 将投影矩阵设置为近=20000和远=30000
  • 画出20000到30000之间的所有星星
  • 仅清除深度缓冲区
  • 将投影矩阵设置为近=10000,远=20000
  • 画出10000到20000之间的所有星星
  • 仅清除深度缓冲区
  • 将投影矩阵设置为近=0和远=10000
  • 绘制0到10000之间的所有星星

  • 由于您知道10-20仓中的所有星星都在20-30仓中所有星星的前面,因此您可以安全地清除深度缓冲区,从而绕过深度缓冲区的精度限制,并将东西画得尽可能远,空间有多大?@zacaj:假设在1立方光年的空间里有10000个(立方体有10^15米长,我想保留mertic坐标或其分数/倍数)。当然,大部分时间只有一小部分空间是可见的。我希望我能画出所有的点,OpenGL将负责适当的可视化,但现在我发现至少GL不能处理这种深度的场景。速度好吗(忽略深度问题)?从opengl中获得无限深度的方法包括按深度分层绘制场景,并在每次绘制之后清除深度缓冲区。很多人在制作大型太空探索游戏时都必须使用它们。@zacaj:刚刚做了一个快速而肮脏的测试,到目前为止性能非常好。不过,我想我不明白你的意思。我对OpenGL的了解仅限于绘图点,请详细说明。这项技术有名字吗?很简单——实验性的。我们在谈论多少颗恒星,空间有多大?@zacaj:假设在1立方光年的空间里有10000颗(立方体有10^15米长,我想保留mertic坐标或其分数/倍数)。当然,大部分时间只有一小部分空间是可见的。我希望我能画出所有的点,OpenGL将负责适当的可视化,但现在我发现至少GL不能处理这种深度的场景。速度好吗(忽略深度问题)?从opengl中获得无限深度的方法包括按深度分层绘制场景,并在每次绘制之后清除深度缓冲区。很多人在制作大型太空探索游戏时都必须使用它们。@zacaj:刚刚做了一个快速而肮脏的测试,到目前为止性能非常好。不过,我想我不明白你的意思。我对OpenGL的了解仅限于绘图点,请详细说明。这项技术有名字吗?很简单-实验性的。谢谢!现在我明白了。一个离题但相关的问题:我了解到屏幕的各个角落(在XY平面中)严格对应于坐标为(-1.0,-1.0)到(1.0,1.0)的点。如何设置/更改此项?这是否意味着我做了一些错误的事情,比如设置透视错误或其他事情(我使用gluperspective和gluLookAt,如果我理解正确的话,这应该会改变可见区域的坐标)?你到底是如何确定的