Je veux dessiner un cylindre lorsque j'appuie sur la touche de barre d'espace.Comment dessiner une forme à l'aide de la touche à l'aide de GLUT?
Voici un extrait du code que j'ai en ce moment:
void draw_cylinder(GLfloat radius,
GLfloat height,
GLubyte R,
GLubyte G,
GLubyte B)
{
GLfloat x = 0.0;
GLfloat y = 0.0;
GLfloat angle = 0.0;
GLfloat angle_stepsize = 0.1;
/** Draw the tube */
glColor3ub(R - 40, G - 40, B - 40);
glBegin(GL_QUAD_STRIP);
angle = 0.0;
while (angle < 2 * 3.141) {
x = radius * cos(angle);
y = radius * sin(angle);
glVertex3f(x, y, height);
glVertex3f(x, y, 0.0);
angle = angle + angle_stepsize;
}
glVertex3f(radius, 0.0, height);
glVertex3f(radius, 0.0, 0.0);
glEnd();
/** Draw the circle on top of cylinder */
glColor3ub(R, G, B);
glBegin(GL_POLYGON);
angle = 0.0;
while (angle < 2 * 3.141) {
x = radius * cos(angle);
y = radius * sin(angle);
glVertex3f(x, y, height);
angle = angle + angle_stepsize;
}
glVertex3f(radius, 0.0, height);
glEnd();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
}
void reshape(GLsizei width, GLsizei height) {
if (height == 0) height = 1;
GLfloat aspect = (GLfloat)width/(GLfloat)height;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(35.0f, aspect, 0.1f, 100.0f);
}
void processKeys(unsigned char key, int x, int y) {
if (key == 32) { // space key
glLoadIdentity();
glTranslatef(0.0, -0.4, -5.0);
glRotatef(-90, 0.4, 0.0, 0.0);
draw_cylinder(0.3, 1.0, 255, 160, 100);
}
glutPostRedisplay();
}
int main(int argc, char** argv) {
glutInit(&argc, argv); // Initialize GLUT
glutInitDisplayMode(GLUT_DOUBLE); // Enable double buffered mode
glutInitWindowSize(640, 480); // Set the window's initial width & height
glutInitWindowPosition(50, 50); // Position the window's initial top-left corner
glutCreateWindow(title); // Create window with the given title
glutKeyboardFunc(processKeys);
glutDisplayFunc(display); // Register callback handler for window re-paint event
glutReshapeFunc(reshape); // Register callback handler for window re-size event
initGL(); // Our own OpenGL initialization
glutMainLoop(); // Enter the infinite event-processing loop
return 0;
}
Cependant, quand je presse la barre d'espace, le cylindre est pas dessiné. Je ne suis pas sûr de ce qu'il faut faire. Lorsque je copie le code que j'ai dans la méthode processKeys et le coller dans la méthode d'affichage , cela fonctionne très bien. Comment suis-je censé le faire?
Je ne pense pas que vous êtes autorisé à tirer de partout, mais la fonction d'affichage. – HolyBlackCat