(0018,0088) field must not be used for determining position of image slices. DICOM specifies position and orientation of each image slice. If all slices are parallel and spaced equally then you can simply load the voxel array and set that spacing value. If slice normals are not orthogonal to slice offset vector (not uncommon), spacing is varying (rare) or slices are not parallel (very rare) then there is no prescribed spacing but you need to reconstruct the image using vtkImageReslice, with any spacing that you choose.
You need to at least read all position and orientation values, sort them, analyze if they are all oarael, equally spaces, orthogonal, and if they are then use the spacing that you computed from them. As far as I know @dgobbi’s vtkDICOM library does all this, but VTK’s built-in DICOM reader does not.
If you need to be able to read any kind of 3D or 4D DICOM image geometry then I would recommend to use 3D Slicer or dcm2niix.
My spacing is (0.83, 0.83, 0), and the reason is that the spacing is varying or slices are not parallel? If so, how VTK deal with this problem? Can vtkImageReslice handle this problem? If the spacing is varying, how can vtkImageData record it?
I can understand the slice normals, but I don’t know what’s the slice offset vector. Could you please give me more details about the slice offset vector?