我有以下结构来存储我的顶点数据。
struct Rz3DContourNode {
float x; //pos x
float y; //pos y
float z; //pos z
float nx; //normal x
float ny; //normal y
float nz; //normal z
};
我将顶点列表存储在 STL 向量中,如下所示:
std::vector < Rz3DContourNode > nodes;
当我尝试将其用作 OPEGL 中的顶点数组时,in 不会正确渲染。
glVertexPointer(3, GL_FLOAT, 12, &nodes[0]);
glDrawArrays(GL_POINTS,0,nodes.size());
因此,我尝试使用指针算法(假设这就是 OPENGL 处理数据的方式)来确认这些值,如下所示:
float *ptr=(float*) &nodes[0];
for(int i=0;i<nodes.size();i++)
{
Rz3DContourNode confirmNode=nodes[i];
float x=*ptr;
ptr++;
float y=*ptr;
ptr++;
float z=*ptr;
ptr++;
//Confirm values !!! Do not equal ??
qDebug("x=%4.2f y=%4.2f z=%4.2f | nx=%4.2f ny=%4.2f nz=%4.2f
",confirmNode.x,confirmNode.y,confirmNode.z,x,y,z);
//Skip normal positions
ptr++;
ptr++;
ptr++;
}
如果我直接从结构访问值,则值不相等。
这是否意味着 struct 不会连续保存值?
[编辑] 我刚刚注意到使用 sizeof() 而不是 12 可以解决以下问题:
glVertexPointer(3, GL_FLOAT, sizeof(Rz3DContourNode), &nodes[0]);
但是我仍然很困惑为什么我的 hack 没有在内存中正确遍历?(为什么 qDebug 不打印相同的值?)