OpenGL создать цилиндр помощи в Ханое

Привет, я пытаюсь создать приложение Towers of Hanoi OpenGL. Я использую расширение перенасыщения, чтобы сделать окно, и клей, чтобы создать цилиндр. У меня проблема в том, что цилиндр нарисован подобно кольцу, но я хочу, чтобы он стоял вертикально, может кто-нибудь объяснить мне, почему мой цилиндр нарисован таким образом, и указать мне, как я могу его починить?

#include <gl/glut.h>

GLfloat pos[] = { -2, 4, 5, 1 }, amb[] = { .3, .3, .3, 1 };
GLfloat front_amb_diff[] = { .7, .5, .1, 1 };
GLfloat back_amb_diff[] = { .4, .7, .1, 1 };
GLfloat spe[] = { .25, .25, .25, 1 };

void display(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//trying to create cylinder here
glPushMatrix();
GLUquadricObj *qobj = gluNewQuadric();
qobj = gluNewQuadric();
gluQuadricDrawStyle(qobj, GLU_FILL);
gluCylinder(qobj, .1, .3, 2, 40, 40);
glRotated(90, 1, 0,0 );
glPopMatrix();

//create first torus
glPushMatrix();
glTranslated(1.5, 0, 0);
glRotated(90, 1, 0, 0);
glutSolidTorus(.1, .3, 100, 100);
glPopMatrix();

//create more next to it
for (int i = 1; i < 4; i++){
glPushMatrix();
glTranslated(1.5, 0, 0);
glTranslated(i/-1, 0, 0);
//glRotated(theta, axes[axis][0], axes[axis][1], axes[axis][2]);
glRotated(90, 1, 0, 0);
glutSolidTorus(.1, .3, 100, 100);
glPopMatrix();
}

glutSwapBuffers();

}int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(200, 100);
glutCreateWindow("GLUT");
glClearColor(0, 0, 0, 0);
glEnable(GL_DEPTH_TEST);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2,2,-2,2, 2, 8);

glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, front_amb_diff);
glMaterialfv(GL_BACK, GL_AMBIENT_AND_DIFFUSE, back_amb_diff);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spe);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 75);

glLightfv(GL_LIGHT0, GL_AMBIENT, amb);

glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslated(0, 0, -5);
glLightfv(GL_LIGHT0, GL_POSITION, pos);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);glutDisplayFunc(display);
glutMainLoop();
return 0;

}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]