#opengl #graphics #glut #cube #glu
#opengl #графика #перенасыщение #куб #glu
Вопрос:
Следующий код рисует лабиринт или лабиринт в OpenGL, в результате получается 2D лабиринт, что мне нужно сделать сейчас, это нарисовать кубы вместо этих квадрациклов, как я могу это сделать?
function drawmaze() {
int x,y,dl;
glNewList(dl=glGenLists(1),GL_COMPILE);
glPushAttrib(GL_TEXTURE_BIT | GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glColor3f(1.0f,1.0f,1.0f);
glBegin(GL_QUADS);
// glPushMatrix();
float i = 0;
for(y=0;y < mazedata.size();y ) {
for(x=0;x < mazedata[y].size();x ) {
bool dibujar = false;
if(wall(x,y)) {
glColor3ub(46,151,208);
drawable = true;
}
else
if (entry(x,y)) {
glColor3f(0.0f,0.184f,0.792f);
drawable = true;
}
else
if (mazexit(x,y)) {
glColor3f(0.811f,0.188f,0.176f);
drawable = true;
}
else
if (thing(x,y)) {
glColor3ub( 151, 204, 0 );
drawable = true;
}
else
if (visited(x,y)) {
glColor3ub( 66, 66, 66 );
drawable = true;
}
if (drawable) {
//glPushMatrix();
/*
This is a try
glTranslatef(1.0,0., 0.0f );
glutSolidCube(0.5);*/
//glPopMatrix();
glVertex3f(x 0.0f ,y 0.0f ,0.0f );
glVertex3f(x 0.0f ,y 1.0f ,0.0f );
glVertex3f(x 1.0f ,y 1.0f ,0.0f );
glVertex3f(x 1.0f ,y 0.0f ,0.0f );
// topside:
glVertex3f(x 0.0f ,y 0.0f ,1.0f );
glVertex3f(x 1.0f ,y 0.0f ,1.0f );
glVertex3f(x 1.0f ,y 1.0f ,1.0f );
glVertex3f(x 0.0f ,y 1.0f ,1.0f );
}
}
i ;
}
glEnd();
// glPopMatrix();
glPopAttrib();
glEndList();
return(dl);
}
Комментарии:
1. Хм? Не знаю. Попробуйте шесть квадратов по 6 вместо 1 и посмотрите, что получится.
Ответ №1:
glBegin(GL_QUADS);
// front
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
// back
glVertex3f(0.0f, 0.0f, -1.0f);
glVertex3f(1.0f, 0.0f, -1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(0.0f, 1.0f, -1.0f);
// right
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, -1.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
// left
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, -1.0f);
glVertex3f(0.0f, 1.0f, -1.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
// top
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, -1.0f);
glVertex3f(0.0f, 1.0f, -1.0f);
// bottom
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, -1.0f);
glVertex3f(0.0f, 0.0f, -1.0f);
glEnd();
Ответ №2:
Не существует собственного метода opengl, который будет рисовать куб.
Итак, вам нужно будет нарисовать 6 квадрациклов, чтобы нарисовать куб.