我创建一个粒子系统的渲染器,问题是,我所有的粒子位置被封装到集成它们随着时间的推移,并做一些其他的东西类。相反的值复制到一个单独的阵列以使各帧的,我创建的点结构这样,我可以使用到指向所有值一次:传递浮动指针数组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