我正在创建一个粒子系统渲染器,问题是我所有的粒子位置都被封装到类中,这些类会随着时间的推移将它们整合起来并做一些其他的事情。我没有将值复制到单独的数组中来渲染每一帧,而是创建了一个像这样的点结构,我可以用它来指向所有值一次:
typedef struct
{
float *x, *y, *z;
} point;
然后我 malloc 一个与我的粒子数组大小相同的数组。
顶部声明:
point *points;
马洛克:
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 position 函数只返回一个向量结构 (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);
我认为这也是错误的,但找不到有关如何将指针传递到 VBO 的任何信息。