fortran66のブログ

fortran について書きます。

サンプル集の確認

  • 必要なライブラリのインストール

http://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/51670/

    • f90gl 本家

http://math.nist.gov/f90gl/

  • リンカーのオプション

glut32.lib f90gl.lib f90glu.lib f90glut.lib


  • 例題

ここの g95 + f03gl 用の Green Book サンプルを IVF + f90gl でw
http://www.dolfyn.net/dolfyn/f03gl_en.html

    • 気をつけるべき点

f03gl では RESHAPE 関数の引数が value 属性の値渡しになっているけれども、f90gl では普通の参照渡しになっているなど、微妙なインターフェースの差。

一部のポインタ定義なども変わっている。

!  type(C_PTR) :: ptr = c_null_ptr 
 TYPE (GLUQuadricObj), POINTER :: ptr

 ptr => gluNewQuadric() 

  • fgl01
module callbacks
  
  contains
  
  subroutine display() 

  use opengl_gl

  call glClear( GL_COLOR_BUFFER_BIT )
  
  call glColor3f( 1.0, 0.0, 0.0)
  call glBegin( GL_LINES )
  
  call glVertex2i( 180, 20)
  call glVertex2i(  20, 80)
  
  call glEnd()
  
  call glFlush()

  end subroutine display
end module callbacks
program fgl01

  use opengl_gl
  use opengl_glu
  use opengl_glut

  use callbacks
  
  integer(kind=GLint) :: iwin
  real(kind=GLdouble) :: window(4) = (/ 0.0, 200.0, 0.0, 100.0 /)
  
  call glutInit
  call glutInitDisplayMode(GLUT_SINGLE + GLUT_RGB )
  call glutInitWindowPosition( 50, 100)
  call glutInitWindowSize( 200, 100)
  iwin = glutCreateWindow("fgl01"//char(0))
  
  call glClearColor( 1.0, 1.0, 1.0, 0.0)
  call glMatrixMode( GL_PROJECTION )
  call gluOrtho2D( window(1), window(2), window(3), window(4) )
  
  call glutdisplayfunc( display )
  
  call glutMainLoop()
  
end program fgl01