gpt4 book ai didi

c - OpenGL 顶点数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:07:25 25 4
gpt4 key购买 nike

我有一个名为 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]

有没有办法用Polygon->vertex_pointsPolygon->texcrd_points 调用glVertexPointerglTexCoordPointer >,或者我是否必须构建与 gl*Pointer 所期望的相匹配的新数组?

最佳答案

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

OpenGL 无法显式访问结构的成员。成员将在内存中彼此相邻排列(请参阅下面的警告)。如果多个 Point 结构在内存中的一个系列中,那么实际上你有一个很大的 double 列表。 OpenGL 不知道结构,它只需要一个大列表(在本例中为双)值。但是您可以构建一系列点并将指向第一个点的指针传递给 OpenGL,如果内存中的布局没有错误或填充,它们将是等效的。

如果您对 C 还太陌生,无法从概念上理解这一点(以及内存布局注意事项),那么您应该在调用 GL 之前将所有 double 复制到一个新数组中。

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

关于c - OpenGL 顶点数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3273799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com