Two vectors with same data but different types

时间:2016-05-17 11:17:11

标签: c++ opengl stdvector unions

I'm working on a flow visualization task where I need to analyze the data in some way. The visualization iswritten by someone else and expects a vector of GLFloat containing the data. However, I would much prefer to have a class structure like below. Is there any way to achieve this without copying the data (like a union)?

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;

Thanks

1 个答案:

答案 0 :(得分:0)

从您的示例中,我想到了几个问题:

  • GLfloat不需要与float兼容。
  • 您不知道您有多少个路径,因此您可以拥有3个2个顶点的路径,或1个顶点的6个路径,或任何其他组合。
  • std :: vector不能确保5个GLfloat的数字倍数,所以你的转换中继就这个语义约束。
  • 类/结构通常由编译器对齐,这意味着您的顶点可能超出预期。

可能你可以将你的结构改为:

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

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

如果您有其他外部数据来定义路径,您可以更进一步。

一切都取决于你想做多远?#34;哲学上正确&#34; C ++代码。有些时候难以用OpenGL实现。

只要您的2个结构相同,您就可以在它们之间投射指针/引用。但这种等价并不容易。

回答您的问题:

  • 有可能吗?不用你当前的代码。
  • 是否可以进行一些更改?是的,即使不推荐。