具有相同数据但类型不同的两个向量

Two vectors with same data but different types

我正在处理流程可视化任务,我需要以某种方式分析数据。可视化是由其他人编写的,需要一个包含数据的 GLFloat 向量。但是,我更希望有一个如下所示的 class 结构。有什么方法可以在不复制数据的情况下实现这一点(比如联合)?

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;

谢谢

从你的例子中,我想到了几个问题:

  • GLfloat 不需要与 float 兼容。
  • 您不知道您有多少条路径线,因此您可以有 2 个顶点的 3 条路径线,或 1 个顶点的 6 条路径线,或任何其他组合。
  • std::vector 不确保 GLfloat 是 5 的倍数,因此您的转换依赖于此语义约束。
  • Class/structs 通常由编译器对齐,这意味着您的 Vertex 可能超出预期。

也许您可以将您的结构改写为:

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

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

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

一切都取决于你想做多远"philosophically correct" C++ 代码。有时很难用 OpenGL 实现。

只要您的 2 个结构相同,您就可以在两者之间转换 pointer/reference。但这种等价并不容易。

回答您的问题:

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