我創建一個粒子系統的渲染器,問題是,我所有的粒子位置被封裝到集成它們隨着時間的推移,並做一些其他的東西類。相反的值複製到一個單獨的陣列以使各幀的,我創建的點結構這樣,我可以使用到指向所有值一次:傳遞浮動指針數組VBO
typedef struct
{
float *x, *y, *z;
} point;
然後我MALLOC這些相同的尺寸的陣列作爲我的一系列粒子。
宣言在頂部:
point *points;
malloc的:
points = malloc(sizeof(point) * [particles count]);
我然後循環通過所有的顆粒,並且每個位置的地址複製到對應的指針,以便:
for (int i = 0; i < [particles count]; ++i)
{
points[i].x = &[[particles objectAtIndex:i] getPosition].x;
points[i].y = &[[particles objectAtIndex:i] getPosition].y;
points[i].z = &[[particles objectAtIndex:i] getPosition].z;
}
我的get位置函數只返回一個向量struct(float x,y,z)。
我與此遇到的第一個問題是,當我顯示像這樣的值:
NSLog(@"%f", *points[0].x);
相反的值(比如:0.5)的讀數,它顯示它倒圓和否定(以便: - 1.0)。
然後我得到的數據爲我的VBO是這樣的:
glBufferData(GL_ARRAY_BUFFER, sizeof(point) * [particles count], &points[0], GL_DYNAMIC_DRAW);
我想這也是錯誤的,但無法找到如何指針傳遞到維也納組織的任何信息。
的爲getPosition返回值的結構不是指針,我一直在它的類中的每個粒子的位置。 – user22817
好吧,我編輯了這個答案。一定要了解如何通過價值傳遞在C中工作,這是一個重要的事實。 –
那麼,當我創建一個簡單的獨立指針指向類值時,如果我改變了類的值,它是否也會改變? – user22817