我正在尝试在 OpenGL 中从 Starfox 64 绘制这个免费的机翼模型。我在 Blender 中将 .fbx 文件转换为 .obj,并使用tinyobjloader来加载它(我的大学科目的所有要求)。
我几乎将示例代码(使用现代 API)放入我的程序中,替换了文件名,并抓取了attrib.vertices和attrib.normals向量来绘制机翼。
我可以使用 GL_POINTS 查看顶点:
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, &vertices[0]);
glDrawArrays(GL_POINTS, 0, vertices.size() / 3);
glDisableClientState(GL_VERTEX_ARRAY);
Run Code Online (Sandbox Code Playgroud)
哪个看起来是正确的(我......认为?):
但我不确定如何渲染实体模型。简单地用 GL_TRIANGLES(如图所示)或 GL_QUADS 替换 GL_POINTS 是行不通的:
我正在使用 OpenGL 1.1 w/ GLUT(再次,大学)。我想我只是不知道自己在做什么,真的。帮助?
假设我这样初始化数组和变量:
int arr1d[3] = { 1, 2, 3 };
int* arrptr = arr1d;
int (*ptr1d)[3] = &arr1d;
int arr2d[2][3] = { {1, 2, 3}, {4, 5, 6} };
int (*ptr2d)[3] = arr2d;
Run Code Online (Sandbox Code Playgroud)
所以,arr1d是一个由 3 个整数组成的数组。在底层,arr1d是一个指向数组第一个元素的指针,即&arr1d[0]. 因此,我们可以赋值arr1d给int* arrptr。
ptr1d指向一个由 3 个整数组成的数组。arr1d是int*指向&arr1d[0],但为什么是&arr1d类型int (*)[3]?天真地,我认为写作&arr1d只是给了我们一个地址来分配给指针。这是特定于指向数组的指针吗?
显然,arr2d是类型int (*)[3](我从这篇文章中学到的)。双方ptr2d并*ptr2d具有相同的值,所以这是为什么第二解引用甚至是必要的?我的想法是,这可能是因为ptr2d类型是int (*)[3] …
c++ pointers multidimensional-array memory-address dereference