3D Modelling


This 3D isosurface was created from MRI data, using the following code:

  USE WINTERACTER
  IMPLICIT NONE
  !
  INTEGER, PARAMETER :: NX = 200
  INTEGER, PARAMETER :: NY = 160
  INTEGER, PARAMETER :: NZ = 160
  !
  CHARACTER(LEN=1) :: cVAL
  REAL    :: VOLDATA(NX,NY,NZ)
  REAL    :: RISOVALUE = 128.0
  INTEGER :: NREAD,IHANDLE,NTRI,NVER,NFAC,IX,IY,IZ
  !
  CALL IFileOpen('mri.raw',ReadOnly,IHANDLE)
  IF (IHANDLE == -1) STOP
  DO IZ = 1,NZ
    DO IY = 1,NY
      DO IX = 1,NX
        CALL IFileReadChar(IHANDLE,cVAL,1,NREAD)
        VOLDATA(IX,IY,IZ) = REAL(ICHAR(cVAL))
      END DO
    END DO
  END DO
  CALL IFileClose(IHANDLE)
  CALL WInitialise()
  NTRI = W3dIsosurfaceCount(VOLDATA,RISOVALUE,0.0,1.0, &
                                              0.0,1.0, &
                                              0.0,1.0)
  NFAC = NTRI   ! single sided facets
  NVER = NTRI*3 ! three vertices per facet (probably less, since we use vertex sharing)
  CALL W3dNew(NVER,NFAC)
  CALL W3dIsosurface(VOLDATA,RISOVALUE,0.0,1.0, &
                                       0.0,1.0, &
                                       0.0,1.0, &
                                       Obj3Smooth)
  CALL W3dSave('mri.w3d')
  END