我工作的一个太阳能系统模拟器,我试图马上弄清楚怎么办尾随轨道在C++/OpenGL的/ GLSL看上去类似这样:OGL 4 +/GLSL/C++ - 尾随行星轨道
问题是我没有静态轨道,行星的位置每帧更新一次。
所有行星都来自一个类的实例。我有一个想法如何做到这一点,但不知道它的技术可行性。
请指教(是否改善我的想法或更好的东西)。
概念:
- 有一个VBO与特定的一组顶点数据,比方说8个vertecies如实施例
- 创建IBO描述每个连续点
这个想法是有一个vertess的“跑步机”,其中第一个与行星一起移动:
IBO : [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ]
--------------- ^使GLSL更新在VBO只有第一元件,这意味着在VBO:
VBO : [ v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 ]
------ --------- ^当前顶点更新每个rendercall
- 然后,随着行星& V1从移动一设定距离d V2
设置最后的顶点位置,下一个轨道位置,即向前推进连锁:
IBO : [ 8 | 1 | 2 | 3 | 4 | 5 | 6 | 7 ]
--------------- ^当前索引进行更新,这意味着vbo:
VBO : [ v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 ]
----------------------------------------- -------------------------------- ^为每个rendercall更新当前顶点
这是否使任何意义?我真的很喜欢重复使用vertecies的想法,给他们一辈子(对于褪色),然后..做这个relink?是否有可能在GPU级别操作索引缓冲区?也许我的脑海里只是徘徊到一个愚蠢的小巷子里,也许这里有人有一个更好的主意?
您过度优化。传递十几个顶点组成一个“尾随轨道线”是事物的宏观计划中的一小部分数据,因此每帧将整个缓冲区从CPU传递到GPU不会减慢渲染速度(假设你是渲染,10或100行星,而不是数百万)。是的,你可以用这种方式实现一个循环缓冲区,但增加的复杂性不值得任何性能增益。 – Jherico 2014-09-20 05:19:21
我同意,我转移到preallocating一个圈子,现在试图找出如何更新每个位置......这证明是相当困难...... – mike 2014-09-23 21:16:41