2016-05-17 144 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個結構是等價的,你可以在它們之間施放你的指針/引用。但是這種對等並不容易。

回答你的問題:

  • 這可能嗎?沒有與您當前的代碼。
  • 是否可以做出一些更改?是的,即使不推薦。
相關問題