所以我通过实现Prim的算法成功创建了我的迷宫。结果存储在单元格的二维数组中,其中每个单元格都有一个北,南,东,西(代表4个不同的墙)。在opengl中渲染迷宫
我真正挣扎的部分是使用立方体渲染3D。每个立方体代表一堵墙,如果墙壁在那里,我只想渲染立方体。下面是我目前的代码,但它不能正常工作(导致太多的立方体被绘制/不存在的迷宫)。
任何帮助,将不胜感激。如果需要更多信息,请让我知道,我会尽快发布。
void Maze::drawMaze(vector<vector<Cell> > maze) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (maze[i][j].south == 1) {
glColor4f(0, .2, 0, 0);
glPushMatrix();
glTranslatef(j * 2 - 2, 0, i * 2);
glutSolidCube(2);
glPopMatrix();
}
if (maze[i][j].north == 1) {
glColor4f(0, .2, 0, 0);
glPushMatrix();
glTranslatef(j * 2 + 2, 0, i * 2);
glutSolidCube(2);
glPopMatrix();
}
if (maze[i][j].east == 1) {
glColor4f(0, .2, 0, 0);
glPushMatrix();
glTranslatef(j * 2, 0, i * 2 + 2);
glutSolidCube(2);
glPopMatrix();
}
if (maze[i][j].west == 1) {
glColor4f(0, .2, 0, 0);
glPushMatrix();
glTranslatef(j * 2, 0, i * 2 - 2);
glutSolidCube(2);
glPopMatrix();
}
}
}
}
这里是我表现出正确的迷宫,只是无法弄清楚如何将其转化为正确的OpenGL的打印方法。
void Maze::PrintMaze(){
for(int i = 0; i < 2*10; ++i){
cout << "_";
}
cout << endl;
for (int i = 0; i < 10; ++i){
cout << "|";
for (int j = 0; j < 10; ++j){
Cell c = maze[i][j];
cout << (c.south == 0 ? " " : "_");
if (c.east == 0)
cout << " ";
else cout << "|";
}
cout << endl;
}
}
____________________
| | | |_ | | | _ |
| _|_ _ _ | |_|
| _|_ |_ | |
| |_| | |_ _ |_|_ _|
| | _ _ |_ _| _|
|_|_| _| |_| _| _|
|_ _ _ | |_ | |
| |_| | | _ _ _ |
| _|_| _| |
|_|_|_ _|_ _|_|_|_ _|
除了北,南,东,西有任何“标志” '墙'或'NO_wall'? – 2013-05-07 17:47:37
否。如果n,s,e,w是1,那么有一堵墙。如果它是0,那么没有墙。 – Kinru 2013-05-07 17:48:01
从我所了解的你正在绘制立方体,就好像你处于中心位置一样,你不必画出它,就好像你在实际的迷宫中一样? (j * 2 + 2,0,i * 2);' 'glTranslatef(j * 2 + 2,0,i * 2);' north'glTranslatef(j * 2 + 4,0,i * 2);' east'glTranslatef(j * 2 + 0,i * 2 + 2);' west'glTranslatef(j * 2 + 2,0,i * 2 - 2);' – 2013-05-07 18:01:32