OpenGLによる3次元CGプログラミング
作者: 林武文, 加藤清敬
出版社/メーカー: コロナ社
MODULE m_callback USE opengl_gl USE opengl_glu USE opengl_glut IMPLICIT NONE INTEGER(GLCINT), PARAMETER :: KEY_ESC = 27 CONTAINS !--------------------------- SUBROUTINE display() IMPLICIT NONE CALL glClear( GL_COLOR_BUFFER_BIT ) CALL glPushMatrix() CALL glTranslatef( 0.0_glfloat, 0.0_glfloat, -3.0_glfloat ) !CALL glTranslatef( 0.2_glfloat, 0.1_glfloat, 0.2_glfloat ) !CALL glRotatef( 30.0_glfloat, 0.0_glfloat, 1.0_glfloat, 0.0_glfloat ) CALL glScalef( 2.0_glfloat, 0.5_glfloat, 1.0_glfloat ) CALL glBegin( GL_POLYGON ) CALL glColor3f ( 1.0_glfloat, 1.0_glfloat, 1.0_glfloat ) CALL glVertex3f( 0.5_glfloat, 0.5_glfloat, 0.0_glfloat ) CALL glColor3f ( 1.0_glfloat, 0.0_glfloat, 0.0_glfloat ) CALL glVertex3f( -0.5_glfloat, 0.5_glfloat, 0.0_glfloat ) CALL glColor3f ( 0.0_glfloat, 1.0_glfloat, 0.0_glfloat ) CALL glVertex3f( -0.5_glfloat, -0.5_glfloat, 0.0_glfloat ) CALL glColor3f ( 0.0_glfloat, 0.0_glfloat, 1.0_glfloat ) CALL glVertex3f( 0.5_glfloat, -0.5_glfloat, 0.0_glfloat ) CALL glEnd() CALL glPopMatrix() CALL glFlush() RETURN END SUBROUTINE display !--------------------------- SUBROUTINE myKbd(key, ix, iy) IMPLICIT NONE INTEGER(GLCINT), INTENT(IN OUT) :: key, ix, iy IF (key == KEY_ESC) STOP RETURN END SUBROUTINE myKbd !--------------------------- END MODULE m_callback !========================================================= MODULE m_subs USE m_callback IMPLICIT NONE CONTAINS !--------------------------- SUBROUTINE myInit(progname) IMPLICIT NONE CHARACTER(LEN = *), INTENT(IN) :: progname INTEGER(GLCINT) :: iwidth = 500, iheight = 500 INTEGER(GLCINT) :: iwin REAL(GLDOUBLE) :: aspect aspect = REAL(iwidth, glfloat) / REAL(iheight, glfloat) CALL glutInitWindowPosition( 0_glfloat, 0_glfloat ) CALL glutInitWindowSize( iwidth, iheight ) CALL glutInitDisplayMode( GLUT_RGBA ) iwin = glutCreateWindow( progname ) ! CALL glClearColor( 0.0_glfloat, 0.0_glfloat, 0.0_glfloat, 1.0_glfloat ) CALL glutKeyboardFunc( myKbd ) ! CALL glMatrixMode( GL_PROJECTION ) CALL glLoadIdentity() CALL gluPerspective(45.0_gldouble, aspect, 1.0_gldouble, 7.0_gldouble ) CALL glMatrixMode( GL_MODELVIEW ) RETURN END SUBROUTINE myInit !--------------------------- END MODULE m_subs !========================================================= PROGRAM GLUT2 USE m_subs IMPLICIT NONE CALL glutInit() CALL myInit("GLUT2") CALL glutDisplayFunc( display ) CALL glutMainLoop() STOP END PROGRAM GLUT2