OGL 4 + / GLSL / C ++ - 尾随行星轨道

时间:2014-09-19 23:09:24

标签: c++ opengl glsl vbo

我正在研究太阳系模拟器,我现在正在尝试弄清楚如何在C ++ / OpenGL / GLSL中进行尾随轨道看起来像这样:

Reference

问题是我没有静态轨道,行星的位置每帧都会更新。

所有行星都来自一个类。我知道如何做到这一点,但不确定它在技术上是否可行。

请告知(这是为了改善我的想法或更好的东西)。

概念

  1. 让一个VBO具有特定的顶点数据集,例如8个椎体
  2. 创建描述每个连续点之间联系的IBO
  3. 这个想法是拥有一个顶点的“跑步机”,第一个与地球一起移动:

    IBO : [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ]
    

    --------------- ^ make glsl只更新vbo中的第一个元素,这意味着在vbo中:

    VBO : [ v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 ]
    

    --------------- ^为每个rendercall更新当前顶点

    1. 然后作为星球& v1从v2移动设定距离D
    2. 将最后一个顶点位置设置为下一个轨道位置,即在链中向前移动:

      IBO : [ 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 ]
      

      --------------- ^要更新的当前索引,这意味着在vbo中:

      VBO : [ v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 ]
      

      ----------------------------------------------- -------------------------- ^为每个rendercall更新当前顶点

      这有什么意义吗?我真的很喜欢重复使用椎体的想法,给它们一辈子(褪色)然后......做那个重新连接?甚至可以在GPU级别操作索引缓冲区吗?

      也许我的思绪只是徘徊在一条愚蠢的巷子里,也许有人在这里有更好的主意?

1 个答案:

答案 0 :(得分:0)

我真的不明白你要用这个代码做什么,但据我所知,当你改变IBO时,你实际上改变了构成几何的三角形的顺序,如果你有动画的问题行星的位置然后解决方案非常前进,

for each planet
{
glUniformMatrix4fv(matLocation, 1, GL_FALSE/*Or GL_TRUE depends on you implementation*/, planet.getModelMatrix());
planet.Render();
}

并且顶点着色器看起来像:

...
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projMatrix;
...

void main() {
...
gl_Position = projMatrix*viewMatrix*modelMatrix*in_vertexPosition;
...
}

如果这不是你想要的,那么请详细说明一点!