Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 99bfe2aac33fee8b80402fc060c5d1ef > files > 23

ruby-SDL-0.7-1mdk.i586.rpm

require 'sdl'
#require 'opengl'

SDL.init SDL::INIT_VIDEO
SDL.setGLAttr SDL::GL_RED_SIZE,5
SDL.setGLAttr SDL::GL_GREEN_SIZE,5
SDL.setGLAttr SDL::GL_BLUE_SIZE,5
SDL.setGLAttr SDL::GL_DEPTH_SIZE,16
SDL.setGLAttr SDL::GL_DOUBLEBUFFER,1
SDL.setVideoMode 640,400,16,SDL::OPENGL
ObjectSpace.garbage_collect
GL::Viewport( 0, 0, 640, 400 );
GL::MatrixMode( GL::PROJECTION );
GL::LoadIdentity( );

GL::MatrixMode( GL::MODELVIEW );
GL::LoadIdentity( );

GL::Enable(GL::DEPTH_TEST);

GL::DepthFunc(GL::LESS);

GL::ShadeModel(GL::SMOOTH);

event=SDL::Event.new
shadedCube=true

color =
  [[ 1.0,  1.0,  0.0], 
  [ 1.0,  0.0,  0.0],
  [ 0.0,  0.0,  0.0],
  [ 0.0,  1.0,  0.0],
  [ 0.0,  1.0,  1.0],
  [ 1.0,  1.0,  1.0],
  [ 1.0,  0.0,  1.0],
  [ 0.0,  0.0,  1.0]]

cube =
  [[ 0.5,  0.5, -0.5], 
  [ 0.5, -0.5, -0.5],
  [-0.5, -0.5, -0.5],
  [-0.5,  0.5, -0.5],
  [-0.5,  0.5,  0.5],
  [ 0.5,  0.5,  0.5],
  [ 0.5, -0.5,  0.5],
  [-0.5, -0.5,  0.5]]


loop do

  if  event.poll != 0 then
    if event.type==SDL::Event::QUIT then
      break
    end
    if event.type==SDL::Event::KEYDOWN then
      exit
    end
  end

    GL.ClearColor(0.0, 0.0, 0.0, 1.0);
  GL.Clear (GL::COLOR_BUFFER_BIT|GL::DEPTH_BUFFER_BIT);


  GL::Begin(GL::QUADS) 

  if shadedCube then
    GL::Color(color[0]);
    GL::Vertex(cube[0]);
    GL::Color(color[1]);
    GL::Vertex(cube[1]);
    GL::Color(color[2]);
    GL::Vertex(cube[2]);
    GL::Color(color[3]);
    GL::Vertex(cube[3]);
    
    GL::Color(color[3]);
    GL::Vertex(cube[3]);
    GL::Color(color[4]);
    GL::Vertex(cube[4]);
    GL::Color(color[7]);
    GL::Vertex(cube[7]);
    GL::Color(color[2]);
    GL::Vertex(cube[2]);
    
    GL::Color(color[0]);
    GL::Vertex(cube[0]);
    GL::Color(color[5]);
    GL::Vertex(cube[5]);
    GL::Color(color[6]);
    GL::Vertex(cube[6]);
    GL::Color(color[1]);
    GL::Vertex(cube[1]);
    
    GL::Color(color[5]);
    GL::Vertex(cube[5]);
    GL::Color(color[4]);
    GL::Vertex(cube[4]);
    GL::Color(color[7]);
    GL::Vertex(cube[7]);
    GL::Color(color[6]);
    GL::Vertex(cube[6]);
    
    GL::Color(color[5]);
    GL::Vertex(cube[5]);
    GL::Color(color[0]);
    GL::Vertex(cube[0]);
    GL::Color(color[3]);
    GL::Vertex(cube[3]);
    GL::Color(color[4]);
    GL::Vertex(cube[4]);
    
    GL::Color(color[6]);
    GL::Vertex(cube[6]);
    GL::Color(color[1]);
    GL::Vertex(cube[1]);
    GL::Color(color[2]);
    GL::Vertex(cube[2]);
    GL::Color(color[7]);
    GL::Vertex(cube[7]);
    
  else
    GL::Color(1.0, 0.0, 0.0);
    GL::Vertex(cube[0]);
    GL::Vertex(cube[1]);
    GL::Vertex(cube[2]);
    GL::Vertex(cube[3]);
    
    GL::Color(0.0, 1.0, 0.0);
    GL::Vertex(cube[3]);
    GL::Vertex(cube[4]);
    GL::Vertex(cube[7]);
    GL::Vertex(cube[2]);
    
    GL::Color(0.0, 0.0, 1.0);
    GL::Vertex(cube[0]);
    GL::Vertex(cube[5]);
    GL::Vertex(cube[6]);
    GL::Vertex(cube[1]);
    
    GL::Color(0.0, 1.0, 1.0);
    GL::Vertex(cube[5]);
    GL::Vertex(cube[4]);
    GL::Vertex(cube[7]);
    GL::Vertex(cube[6]);
    
    GL::Color(1.0, 1.0, 0.0);
    GL::Vertex(cube[5]);
    GL::Vertex(cube[0]);
    GL::Vertex(cube[3]);
    GL::Vertex(cube[4]);
    
    GL::Color(1.0, 0.0, 1.0);
    GL::Vertex(cube[6]);
    GL::Vertex(cube[1]);
    GL::Vertex(cube[2]);
    GL::Vertex(cube[7]);
    
  end

  GL::End()
  
  GL::MatrixMode(GL::MODELVIEW);
  GL::Rotate(5.0, 1.0, 1.0, 1.0);
  
  SDL.GLSwapBuffers
  ObjectSpace.garbage_collect

end