Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: blender.f90   Sprache: Fortran

Original von: f90gl©

!  blender renders two spinning icosahedrons (red and green).
!  The blending factors for the two icosahedrons vary sinusoidally
!  and slightly out of phase.  blender also renders two lines of
!  text in a stroke font: one line antialiased, the other not.

module blender_data

use opengl_gl
use opengl_glu
use opengl_glut
implicit none
private
public :: output, display, idle, visible

real(kind=glfloat), dimension(4), savepublic :: light0_ambient = (/0.2, 0.2, 0.2, 1.0/)
real(kind=glfloat), dimension(4), savepublic :: light0_diffuse = (/0.0, 0.0, 0.0, 1.0/)
real(kind=glfloat), dimension(4), savepublic :: light1_diffuse = (/1.0, 0.0, 0.0, 1.0/)
real(kind=glfloat), dimension(4), savepublic :: light1_position = (/1.0, 1.0, 1.0, 0.0/)
real(kind=glfloat), dimension(4), savepublic :: light2_diffuse = (/0.0, 1.0, 0.0, 1.0/)
real(kind=glfloat), dimension(4), savepublic :: light2_position = (/-1.0, -1.0, 1.0, 0.0/)
realsaveprivate :: s = 0.0
real(kind=glfloat), saveprivate :: angle1 = 0.0, angle2 = 0.0

contains

subroutine output(x, y, text)
real(kind=glfloat), intent(in) :: x,y
character(len=*), intent(in) :: text
integer(kind=glcint) :: p,i

  call glpushmatrix()
  call gltranslatef(x, y, 0.0_glfloat)
  do i=1,len(text)
    p = ichar(text(i:i))
    call glutstrokecharacter(GLUT_STROKE_ROMAN, p)
  end do
  call glpopmatrix()
  return
end subroutine output

subroutine display()

  real(kind=glfloat), savedimension(4) :: amb = (/0.4, 0.4, 0.4, 0.0/)
  real(kind=glfloat), savedimension(4) :: dif = (/1.0, 1.0, 1.0, 0.0/)

  call glclear(ior(GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT))
  call glenable(GL_LIGHT1)
  call gldisable(GL_LIGHT2)
  dif(4) = cos(s) / 2.0 + 0.5
  amb(4) = dif(4)
  call glmaterialfv(GL_FRONT, GL_AMBIENT, amb)
  call glmaterialfv(GL_FRONT, GL_DIFFUSE, dif)

  call glpushmatrix()
! let's take a chance that the default integer is the same kind as
! glint, and not bother with the _glint on constants
  call gltranslatef(-0.3, -0.3, 0.0)
  call glrotatef(angle1, 1.0, 5.0, 0.0)
  call glcalllist(1)        ! render ico display list
  call glpopmatrix()

  call glclear(GL_DEPTH_BUFFER_BIT)
  call glenable(GL_LIGHT2)
  call gldisable(GL_LIGHT1)
  dif(4) = 0.5 - cos(s * 0.95) / 2.0
  amb(4) = dif(4)
  call glmaterialfv(GL_FRONT, GL_AMBIENT, amb)
  call glmaterialfv(GL_FRONT, GL_DIFFUSE, dif)

  call glpushmatrix()
  call gltranslatef(0.3, 0.3, 0.0)
  call glrotatef(angle2, 1.0, 0.0, 5.0)
  call glcalllist(1)        ! render ico display list
  call glpopmatrix()

  call glpushattrib(GL_ENABLE_BIT)
  call gldisable(GL_DEPTH_TEST)
  call gldisable(GL_LIGHTING)
  call glmatrixmode(GL_PROJECTION)
  call glpushmatrix()
  call glloadidentity()
  call gluortho2d(0.0_gldouble, 1500.0_gldouble, 0.0_gldouble, 1500.0_gldouble)
  call glmatrixmode(GL_MODELVIEW)
  call glpushmatrix()
  call glloadidentity()
!  Rotate text slightly to help show jaggies.
  call glrotatef(4.0, 0.0, 0.0, 1.0)
  call output(200.0, 225.0, "This is antialiased.")
  call glscalef(0.5,0.5,0.5)
  call gldisable(GL_LINE_SMOOTH)
  call gldisable(GL_BLEND)
  call output(160.0, 100.0, "This text is not.")
  call glpopmatrix()
  call glmatrixmode(GL_PROJECTION)
  call glpopmatrix()
  call glpopattrib()
  call glmatrixmode(GL_MODELVIEW)

  call glutswapbuffers()
  return
end subroutine display

subroutine idle()
  angle1 = modulo(angle1 + 0.8, 360.0)
  angle2 = modulo(angle2 + 1.1, 360.0)
  s = s + 0.05
  call glutpostredisplay()
  return
end subroutine idle

subroutine visible(vis)
integerintent(in out) :: vis

  if (vis == GLUT_VISIBLE) then
    call glutidlefunc(idle)
  else
    call glutidlefunc()
  end if
  return
end subroutine visible

end module blender_data

program main
use blender_data
use opengl_gl
use opengl_glu
use opengl_glut
implicit none
integer(kind=glcint) :: i

  call glutinit()
  call glutinitdisplaymode(ior(ior(GLUT_DOUBLE,GLUT_RGB),GLUT_DEPTH))
  i = glutcreatewindow("blender")
  call glutdisplayfunc(display)
  call glutvisibilityfunc(visible)

  call glnewlist(1, GL_COMPILE)  ! create ico display list
  call glutsolidicosahedron()
  call glendlist()

  call glenable(GL_LIGHTING)
  call glenable(GL_LIGHT0)
  call gllightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient)
  call gllightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse)
  call gllightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse)
  call gllightfv(GL_LIGHT1, GL_POSITION, light1_position)
  call gllightfv(GL_LIGHT2, GL_DIFFUSE, light2_diffuse)
  call gllightfv(GL_LIGHT2, GL_POSITION, light2_position)
  call glenable(GL_DEPTH_TEST)
  call glenable(GL_CULL_FACE)
  call glenable(GL_BLEND)
  call glblendfunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
  call glenable(GL_LINE_SMOOTH)
  call gllinewidth(2.0)

  call glmatrixmode(GL_PROJECTION)
  call gluperspective( 40.0_gldouble, & ! field of view in degree
                           1.0_gldouble, & ! aspect ratio
                           1.0_gldouble, & ! Z near
                          10.0_gldouble)   ! Z far
  call glmatrixmode(GL_MODELVIEW)
  call glulookat( &
     0.0_gldouble, 0.0_gldouble, 5.0_gldouble, & ! eye is at (0,0,5)
     0.0_gldouble, 0.0_gldouble, 0.0_gldouble, & ! center is at (0,0,0)
     0.0_gldouble, 1.0_gldouble, 0.0_gldouble)    ! up is in positive Y direction
  call gltranslatef(0.0, 0.6, -1.0)

  call glutmainloop()
  stop
end program main

¤ Dauer der Verarbeitung: 0.15 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff



                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik