具有相同数据但不同类型的两个向量
问题描述:
我正在处理流程可视化任务,需要以某种方式分析数据。可视化文件由其他人编写,并期望包含数据的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;
感谢
答
从你的例子,有几个问题,我想起:
- 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个结构是等价的,你可以在它们之间施放你的指针/引用。但是这种对等并不容易。
回答你的问题:
- 这可能吗?没有与您当前的代码。
- 是否可以做出一些更改?是的,即使不推荐。
数据似乎有一个非常不同的结构。不,如果你关心可移植性,你不能使用联合。 – user2079303
数据需要以何种确切格式存在?如果它期望连续五次浮动,那么最有可能从矢量内部得到的就是这些。但是如果矢量内有矢量则不行。 –
如何从lineData中检测pathlines的数量?你是否将这个信息保存在某个地方? –