2016-05-17 129 views
0

我正在处理流程可视化任务,需要以某种方式分析数据。可视化文件由其他人编写,并期望包含数据的GLFloat向量。不过,我更愿意拥有像下面这样的类结构。有没有办法实现这一点,而不需要复制数据(比如联合)?具有相同数据但不同类型的两个向量

struct Vertex 
{ 
    math::vec3 pos; 
    float time; 
    float velocity; 
}; 

class Pathline 
{ 
    std::vector<Vertex> points; 
}; 

//these have the same data 
std::vector<Pathline> lines; 
std::vector<GLfloat> lineData; 

感谢

+1

数据似乎有一个非常不同的结构。不,如果你关心可移植性,你不能使用联合。 – user2079303

+0

数据需要以何种确切格式存在?如果它期望连续五次浮动,那么最有可能从矢量内部得到的就是这些。但是如果矢量内有矢量则不行。 –

+0

如何从lineData中检测pathlines的数量?你是否将这个信息保存在某个地方? –

回答

0

从你的例子,有几个问题,我想起:

  • GLfloat可与浮动兼容不是必需的。
  • 你不知道你有多少Pathlines,所以你可以有3个2个顶点的路径或者6个1个顶点的路径,或者任何其他组合。
  • std :: vector不保证5个GLfloat的倍数,所以你的转换继承了这个语义约束。
  • 类/结构通常由编译器对齐,这意味着您的顶点可能比预期的要多。

也许你可以改写你的结构是这样的:

struct Vertex 
{ 
    GLfloat[3] pos; 
    GLfloat time; 
    GLFloat velocity; 
}; 

std::vector<Vertex> lineVertexData; 
std::vector<GLfloat> lineData; 

如果您有其他外部数据来定义迹线,你可以走一步。

所有取决于你想要做多远“哲学正确”的C++代码。有时用OpenGL很难实现。

只要你的2个结构是等价的,你可以在它们之间施放你的指针/引用。但是这种对等并不容易。

回答你的问题:

  • 这可能吗?没有与您当前的代码。
  • 是否可以做出一些更改?是的,即使不推荐。
相关问题