具有相同数据但类型不同的两个向量
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。但这种等价并不容易。
回答您的问题:
- 可能吗?没有你当前的代码。
- 是否可以进行一些更改?是的,即使不推荐。
我正在处理流程可视化任务,我需要以某种方式分析数据。可视化是由其他人编写的,需要一个包含数据的 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。但这种等价并不容易。
回答您的问题:
- 可能吗?没有你当前的代码。
- 是否可以进行一些更改?是的,即使不推荐。