我正在为我的应用开发一个 .obj 加载器,为此,我设置了一个索引数组和一个顶点数组,并在运行时初始化它们。
结构是这样定义的:
typedef struct {
float Position[3];
float Color[4];
float TexCoord[2];
} Vertex;
typedef struct {
GLuint v1;
GLuint v2;
GLuint v3;
} Face3D;
数组在 .h 文件中是这样的:
Vertex* VerticesArr;
Face3D* Faces;
但是当我初始化它们时,我在屏幕上看不到任何东西,而不是使用这种方式:
const Vertex Vertices[] = {
{{1, -1, 0}, {1, 0, 0, 1},{0,0}},
{{1, 1, 0}, {0, 1, 0, 1},{0,0}},
{{-1, 1, 0}, {0, 0, 1, 1},{0,0}},
{{-1, -1, 0}, {0, 0, 0, 1},{0,0}}
};
const GLubyte Indices[] = {
0, 1, 2,
2, 3, 0
};
通过使用这些常量数组,我可以在屏幕上绘制图形。
我的问题是,是否可以像我一样使用索引和顶点数组? 我相信它是,它似乎是错误的。
这就是我在前面介绍的两种方式上设置我的 VBO 的方式:
- (void)setupVBOs {
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(VerticesArr), VerticesArr, GL_STATIC_DRAW);
GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Faces), Faces, GL_STATIC_DRAW);
}
以及我使用绘制元素的方式:
glDrawElements(GL_POINTS, sizeof(Faces)/sizeof(Faces[0]), GL_UNSIGNED_INT, 0);
我确实检查了两个数组是否都按照它们应该的方式进行了初始化,并且确实如此。
这是我为他们分配空间的方式:
// Allocate space for the Vertices array
NSLog(@"Size of vertice is: %lu",sizeof(Vertex));
VerticesArr = (Vertex*)(malloc(sizeof(Vertex) * vertexCombinations.count));
// Allocate space for the Faces
NSLog(@"Size of face is: %lu",sizeof(Face3D));
Faces = (Face3D*)(malloc(sizeof(Face3D)*faceCount));
最佳答案
我看到的第一个问题是在这部分代码中:
- (void)setupVBOs {
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(VerticesArr), VerticesArr, GL_STATIC_DRAW);
GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Faces), Faces, GL_STATIC_DRAW);
}
当您创建常量数组时,sizeof(Faces)
将返回数组的大小,但是当您动态分配它们时,sizeof(Faces)
将返回数组的大小一个指针(通常是 4 个字节)。我看到的第二个问题是,在静态分配期间,您的索引是 GLUByte
,但在 Face3D
中,它们是 GLUInt
。不确定这是否是一个问题,但看起来可能是。
关于ios - 设置索引和顶点数组 openGL ES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869127/