1

我有一个名为Point(恰好是 Python 扩展)的结构,如下所示:

struct Point {
    PyObject_HEAD    // Macro that expands to include a few more members
    double x;
    double y;
};

我还有另一个结构,它将在两个数组中保存一堆这些:

struct Polygon {
    int length;
    Point **vertex_points;
    Point **texcrd_points;
}

我想用这些来映射多边形的顶点和纹理坐标与顶点数组。问题是顶点数组需要以下格式的数组:

[x, y, x, y, x, y, etc]

有没有办法可以用and调用glVertexPointerand ,或者我必须构造与 gl*Pointer 期望的匹配的新数组?glTexCoordPointerPolygon->vertex_pointsPolygon->texcrd_points

4

2 回答 2

2

您可以glVertexPointer使用顶点数组glTexCoordPointer的基数和纹理坐标数组的基数进行调用。只要这些数组中的事物数量与正确(相同)的顶点数对齐,这应该可以正常工作。

OpenGL 不能显式访问结构的成员。成员将在内存中并排排列(请参阅下面的警告)。如果多个 Point 结构在内存中是一系列的,那么实际上你有一个大的双精度列表。OpenGL 不知道结构,它只需要一个大列表(在这种情况下为双)值。但是您可以构建一系列点,然后将指向第一个点的指针交给 OpenGL,如果内存中的布局没有错误或填充,它们将是等价的。

如果您对 C 太陌生,无法在概念上掌握这一点(以及内存布局警告),那么您应该在调用 GL.

我确实质疑了几件事:也许这里缺少代码,但是看起来Point**不是Point*很可疑,因为glVertexPointeretc 会在这里期望一个平坦的值数组。出于同样的原因,虽然它可能已经很好地对齐了,但理论上这些结构的数组可能不会在内存中刷新打包在一起。您可以根据编译器显式执行此操作,或者您可以使用strideGL 调用中的参数来显式了解每个顶点之间的内存距离。

于 2010-07-18T00:31:05.000 回答
0

http://www.opengl.org/sdk/docs/man/xhtml/glVertexPointer.xml

http://www.opengl.org/sdk/docs/man/xhtml/glTexCoordPointer.xml

两个函数中的参数 'size' 可能是您需要的(并且您需要 2 个顶点 - 结构点和 'type'=GL_DOUBLE)

于 2010-07-18T00:29:16.707 回答