1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
require 'opengl'
include Gl,Glu,Glut
begin
require "RMagick"
rescue Exception
print "This sample needs RMagick Module.\n"
exit
end
WIDTH = 500
HEIGHT = 500
display = Proc.new do
glClear(GL_COLOR_BUFFER_BIT)
glBegin(GL_LINES)
glVertex(0.5, 0.5)
glVertex(-0.5, -0.5)
glEnd
glFlush()
pixels = glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_SHORT)
image = Magick::Image.new(WIDTH, HEIGHT)
image.import_pixels(0, 0, WIDTH, HEIGHT, "RGBA", pixels,Magick::ShortPixel)
image.flip!
image.write("opengl_window.gif")
end
reshape = Proc.new do |w, h|
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
if (w <= h)
gluOrtho2D(-1.0, 1.0, -h.to_f/w.to_f, h.to_f/w.to_f)
else
gluOrtho2D(w.to_f/h.to_f, w.to_f/h.to_f, -1.0, 1.0)
end
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
end
keyboard = Proc.new do |key, x, y|
case (key)
when ?\e
exit(0);
end
end
# Main Loop
# Open window with initial window size, title bar,
# color index display mode, and handle input events.
glutInit
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_ALPHA)
glutInitWindowSize(WIDTH, HEIGHT)
glutInitWindowPosition(100, 100)
glutCreateWindow($0)
glutReshapeFunc(reshape)
glutDisplayFunc(display)
glutKeyboardFunc(keyboard)
glutMainLoop
|