所以我通過實現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