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
|