【问题标题】:OpenGL visualisation of stars in celestial sphere天球中恒星的OpenGL可视化
【发布时间】:2016-09-15 19:05:18
【问题描述】:

我对 iOS 上的 OpenGL ES 还很陌生,并且有一个宠物项目,最好的描述是试图在 iOS 上创建一个更原始版本的精彩 Stellarium

我正在设法加载大约。 9000 个顶点(每个顶点代表一颗星星在夜空中可见的当前位置),通过将正确的模型旋转矩阵传递给顶点着色器,它们根据一天中的时间和用户的位置实时移动。换句话说,数学不是问题,EAGLView 的基本设置、各种缓冲区和着色器编译等也不是问题,我基本上遵循 Ray Wenderlich 的 this 教程。

计算顶点位置,使其全部位于位置 (0,0,0) 周围任意半径的不可见球体的表面上,模拟夜空。

最终,我希望能够实现基本的拖动/捏合手势来移动观察者的视点(位于位置 0,0,0)并“缩放”更接近球体以查看更多细节,例如作为星名。

我挣扎的部分如下

1) 投影矩阵:在给定上述场景的情况下,关于选择哪种投影的专家建议?我正在努力理解截锥体,但认为这是要走的路。我将如何实现“缩放”更近?

2) 每颗星的形状:目前,这是一个在屏幕上产生一个点的单个顶点。应用星形纹理的最佳方法是什么?

3) 我的顶点数组中最终会有一些顶点保持不动,例如天体网格,显示方位角和高度,即它们不应该像星星一样旋转。如何将旋转矩阵应用于某些顶点,而不是其他顶点?这可以通过将glDrawElements() 拆分成几个部分来实现吗?

【问题讨论】:

    标签: ios objective-c iphone opengl-es


    【解决方案1】:
    1. 投影矩阵经常使用辅助函数来计算。例如,gluPerspective。如果您想实现缩放,您可以调整 FOV(较小/较大的值将放大/缩小)。通常,缩放也是通过修改视图矩阵来实现的(同样,通常使用辅助函数计算),这取决于您使用哪种方法(或组合)。

    2. 1234563 ')。您还可以编写一个几何着色器,它将点转换为四边形,并编写一个“标准”片段着色器——尽管这可能需要更多的工作。
    3. 将使用不同统一数据(例如模型/视图/投影矩阵)处理的几何图形拆分为单独的绘制调用可能更容易。这通常是大多数游戏引擎渲染对象的方式,除非预期的绘制调用数量变大,然后它们经常实现某种批量绘制。但是,如果您只有两套,那应该不是什么大问题。

    【讨论】:

      猜你喜欢
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多