#!/usr/bin/env perl use strict; use warnings; use OpenGL::Simple qw( :all ); use OpenGL::Simple::GLUT qw( :all ); use Time::HiRes qw( usleep ); use UnitCube; my $rotate_angle_z = 0; my $rotate_angle_y = 0; glutInit(@ARGV); glutInitWindowSize(500, 500); glutInitWindowPosition(100, 100); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("3D OpenGL Cube with Lighting"); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); my @light_position0 = ( 0, 0, -1, 0 ); glLight(GL_LIGHT0, GL_POSITION, @light_position0); my @light_model_ambient = ( 0.17, 0.17, 0.17, 1.0 ); glLightModel(GL_LIGHT_MODEL_AMBIENT, @light_model_ambient); glutDisplayFunc(\&draw_screen); glutMainLoop(); sub draw_screen { glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); $rotate_angle_z += 0.65; $rotate_angle_y += 1.15; glLoadIdentity(); glRotate($rotate_angle_y, 0, 1, 0); glRotate($rotate_angle_z, 0, 0, 1); UnitCube::unit_cube(); glutSwapBuffers(); usleep(1000000/60); glutPostRedisplay(); }