【发布时间】:2018-09-29 10:55:40
【问题描述】:
我正在尝试优化四边形的绘制(目前使用glBegin 和glEnd),我读到VBO 是一种更好的方法。我的问题是我没有带有索引数组的GLuint 基本数组,而是自定义类来保存值:
Location.hpp:保存 x、y 和 z 信息
class Location {
public:
Location(int x_, int y_, int z_);
~Location();
int x;
int y;
int z;
};
Face.hpp:持有 4 个标记角的 Location*s
class Face {
public:
Face(Location* bl_, Location* br_, Location* tr_, Location* tl_); // Using point
Face(int bl_[3], int br_[3], int tr_[3], int tl_[3]); // Using {x, y, z} int array
~Face();
Location* bl = NULL; // Bottom Left
Location* br = NULL; // Bottom Right
Location* tr = NULL; // Top Right
Location* tl = NULL; // Top Left
};
我的问题是,我想在屏幕上显示一个人脸向量 (std::vector<Face*> facesToRender;)。
现在我有一个循环来执行此操作:
信息:
Chunk 类创建了一个facesToRender,我相信这是我可以放置vboId 的地方
chunks 是Chunk*s 的数组
glPushMatrix();
for (int i = 0; i < chunks.size(); i++) {
Chunk* chunk = chunks[i];
for (int j = 0; j < chunk->facesToRender.size(); j++) {
Face* f = chunk->facesToRender[j];
srand(i); // Create a color per chunk
glColor3ub(rand()%255, rand()%255, rand()%255);
glBegin(GL_QUADS);
glVertex3i(f->bl->x, f->bl->y, f->bl->z);
glVertex3i(f->br->x, f->br->y, f->br->z);
glVertex3i(f->tr->x, f->tr->y, f->tr->z);
glVertex3i(f->tl->x, f->tl->y, f->tl->z);
glEnd();
}
}
glPopMatrix();
我的问题是如何将这个 facesToRender 向量处理成 VBO 以使其显示。我是 OpenGL 和 C++ 的初学者(虽然我知道其他语言,如果我在课程中犯了一些大错误,请见谅)。
如果需要任何其他信息,请发表评论!
【问题讨论】: