Reader3ds versions history
New in version 9.1
- Improved support for reading broken 3ds files - invalid positions that are not used in TriangleIndices are fixed. This prevents creating too big bounds value that is usually used to position the camera after the model is loaded.
New in version 9.0
- Added Materials3ds dictionary that contains all the raw material data and maps (textures) that are defined in 3ds file - event properties and textures (for example bump map) that are not used in WPF.
- Added GetKeyFramesData method that returns raw key frames data that are read from 3ds file.
- Added GetOptimizedMeshGeometry3D that returns the OptimizedMeshGeometry3D struct for the specified model name. OptimizedMeshGeometry3D contains Normals, Positions, TextureCoordinates and TriangleIndices lists that can be used to get quick access to mesh data (access to data is much faster than when using MeshGeometry3D).
- Prevented "cross thread access" exception when the Reader3ds instance is created on another thread the Read method is called.
- Improved animating objects in some cased when the animation does not start at first frame.
New in version 8.5
- Small fix for a problem that can occure when one object has multiple materials assigned.
- Improved reading broken files - no exception is thrown when the animation data for camera is broken.
New in version 8.4
- Fixed exporting XAML when object name contains unsupported characters.
New in version 8.3
- Change build target framework from .Net 3.0 to 3.5 Client Profile.
- Added CreateTextureCallback delegate to Reader3ds - it can be used to customize the process of creating the texture images.
- Fixed reading 3ds files that define material with names longer than 17 characters (the 3ds documentation defines max length of material name to be 17 characters - but it looks that in reality the material names can be longer).
New in version 8.2
- Improved reading broken 3ds files.
- Added TryReadBrokenFiles and IsBroken properties to Reader3ds. If TryReadBrokenFiles is set to true (by default it is false) reading broken 3ds file does not throw exception but read as many 3D objects are possible.
New in version 8.1
- Improved reading textures in Model3ds and Viewport3ds. Added TexturesPath property to both controls - it can be used to specify custom textures path. If TexturesPath is not specified, the path of the 3ds file is used.
- Added support for cameras that are children of helper objects (for example when camera is linked to a helper object so the camera is transformed as the helper object).
- Fixed setting IsCameraAnimated property - Reader3ds sets this property to true if the 3ds file contains camera animations. Before the property could be set to true in cases when the camera was not animated.
- Added ReadLightRange property to Reader3ds. Before the Range of PointLights and SpotLights was not read. Now it is possible to read the Range with setting ReadLightRange to true. Note that attenuation data are not present in the 3ds file - if they are used they need to be manually set to lights after the 3ds file is read.
- Show evaluation info dialog only once per day (evaluation version only).
- Viewer3ds v3.2: added export of all cameras defined in 3ds file as comments. Also added selected camera description in exported xaml.
New in version 8.0
- Added support for simple transparency sorting that can prevent most of the problems with transparent objects. If the new IsTransparencySortingEnabled property is true (by default) the transparent objects are moved after non-transparent objects. For complex models with many transparent objects use of advanced transparency sorting in Ab3d.PowerToys is needed. Also added TransparentObjectsCount property to Reader3ds (so user can decide if he need to enable transparency sorting or not - with Ab3d.PowerToys).
- Added NameFormatString to BaseXamlWriterSettings - it can be used to customize how the object names are written to XAML (custom prefixes and suffixes can be added to names).
- Added possibility to read tga into BitmapImage with static Read method in a new Ab3d.Common.TgaReader class. Note: The previous versions of Reader3ds already supported reading tga files. But it was not possible to read tga files in your applications. This is now possible and enabled you to convert tga images to common files (for example png) that can be used with xaml created from 3ds file). This feature is available onyl in pro version.
- Fixed reading some of the objects with object matrix that has negative determinant.
- Fixed using ForceTwoSidedMaterials property for models that does not have material defined and where the default material is used.
- Fixed objects without material set (default material is used) and with object matrix that has negative determinant.
- Fixed when object with negative determinant is broken into sub objects for different materials - the parent's negative determinant was not used before.
- Fixed reading 3ds file where definition of two sided material is written outside material chunk.
- Fixed reading some partially broken 3ds file (objects with invalid triangle indices are not shaded).
- Skipped importing 3D objects that does not have triangle indices set (have only positions set).
- Fixed security exception in partially trusted WPF Browser applications - before the multi treading code was not able to get the number of processors on the system.
- Improved commercial licensing code to prevent delay caused in RSACryptoServiceProvider under some circumstances.
- Added Ab3d.Licensing.PowerToys.EmbeddedLicenseAssembly property to speed-up looking for embedded license key in commercial version.
New in version 7.1
- Fixed reading some tga files. Also does not stop loading 3ds file when an exception is thrown while a texture image is creating.
- Fixed licensing code for WPF Browser applications (partially trusted) - before licensing did not work when both Ab3d.Reader3ds and Ab3d.PowerToys were used (defined in license.licx file).
New in version 7.0
- Improved reading performance by up to 80% by optimizing the code and adding multi-threaded
3D objects processing.
- Added ProgressChanged event to get progress reports when reading 3ds file.
- Added GetXaml method to Reader3ds class.
- Added Lights collection to Reader3ds to easily access all the read lights.
- Improved reading FieldOfView from 3ds file and added support for animating FieldOfView.
- Improved reading specular materials - now the SpecularMaterial's Color is adjusted
to get better results based on SpecularLevel read from 3ds file.
- Improved support for running in partially trusted environment - for example in WPF
- Added support for reading tga image files (with internal tga file reader).
- The ReadFile method now throws FileFormatException if file format is not supported
or file is broken (instead of some BinaryReader or OutOfMemory exception).
- Added IsCameraAnimated property on Reader3ds - specifies if the 3ds file defined
- Fixed setting camera's UpDirection - before it was always (0,1,0) - now it is correctly
calculated from the LookDirection.
- Fixed calling AfterReading3dsFile event in Viewport3ds control.
- Separate commercial and evaluation version.
- Marked ThrowMissingTextureException as obsolete.
- Added ResolveTextureFileCallback and ResolveAllTextureFiles properties to Ab3d.Reader3ds.
Improved reading and resolving texture files:
Supported use cases:
1) texture file is supported image and exist on disk - use the file.
2) texture file is NOT supported image:
a) check if file with the same name but with "gif"
or "jpg" extention exist - use it
b) if file extention is "tga" read the tga with internal
3) if file does not exist check if file name was truncated to 8 characters - try
to find a image file whose name begins with the defined 8 characters
4) support files from web or resources
Call ResolveTextureFileCallback if the texture file is not found or if ResolveAllTextureFiles
property is true.
New in version 6.0
- Added Viewport3ds - a control that shows 3D models from 3ds
- Added Model3ds that can be used in XAML to show 3D models from 3ds
- Derived Reader3ds from DependencyObject so it can be now used in XAML as Resource
and in data binding
- Added CurrentFrameNumber property to Reader3ds
- Fixed reading objects that were mirrored or have pivot point defined in left-handed
- Added support for textures in tif format
- Fixed object reference not set exception when reading some 3ds files
- Fixed texture mapping in some files (added DisableTextureOffset property - by default
it is true to fix the problems)
New in version 5.3
- Added support for Basic / Pro versions.
- Fixed licensing problems on 64-bit OS.
New in version 5.2
- Added support for using Ab3d.Reader3ds in WPF Browser applications (partially trusted).
(NOTE: license.licx file must be included into the application's project and its
build action must be set to Embedded resource - see readme.txt for more info)
- Fixed problems with evaluation version with SmoothingGroups - sometimes "Index was
out of range. Must be non-negative and less than the size of the collection." was
- Fixed reading some 3ds files with animation - sometimes "System.OutOfMemoryException"
New in version 5.1
- Fixed bug when reading spot lights.
- Fixed Null reference exception when setting Default Material.
- When applying smoothing groups or smooth shading, the texture coordinates are also
remapped (before textures were not applied correctly).
- Using new licensing model with improved evaluation. The new version has no fixed
expiration date - instead library can be installed for a 60 days evaluation.
New in version 5.0
- Integrated licensing system - first commercial version.
New in version 4.3
- Fixed bug where camera name or light name is longer than 8 characters (ArgumentOutOfRangeException:
Length cannot be less than zero.).
- Added public static get ExpirationDate - so it is possible to get expiration date
without actually creating an instance of Reader3ds (this can already throw expired
- Fixed exception when reading 3ds file without any animation keyframe.
New in version 4.2
Changes and fixes in Transformer3ds:
- Support for smoothing groups - also automatically support flat and shaded models.
This greatly improves rendering quality (see the image below).
- Added Shading property to define None, Flat, Smooth or SmoothingGroups shading.
Default value is SmoothingGroups that uses the Smoothing Groups values stored in
3ds file to define which edges are smooth and which are flat. This option produces
the results as in the 3d model designer. However if you wish to force the flat or
smooth looking objects choose either Flat or Smooth (before reading the 3ds file).
Also if performance is much more important than rendering quality choose None.
- GetFrame can now get a frameNo as double to render the models between frames (for
- Fixed bug when reading from reasource and 3ds file contains texture files (exception
- Also now it is possible to set TexturesPath property to url of the textures (http://...)
or to the application resources ("pack://application:,,,/XAMLBrowserApplication1;component/models")
- Added GetCameraForFrame method that gets the camera for the desired frame number
- this enables creating animated cameras
- Fixed reading material colors for some older 3ds files (in previous version reading
crashed with "Non-negative number required." exception)
- The previous version has wrongly convert position from 3ds coordinate system to
wpf coordinate system. The difference is that the x axis now points to the right
instead of the left and the z axis points to the viewer and not away from it. This
version by default uses new coordinate system, but if your application depends on
the old one, you can simple set this property to true. But note that this can only
be a temporary solution. Set UseOldCoordinateAxis property to true to use old coordinate
- Added Materials property - Dictionary that can be used to access all the materials
defined in 3ds by their name.
- Added support for animated lights (PointLight - positin, color; SpotLights - position,
- Added GetExpirationDate method
- Added TargetViewport - gets the viewport that was used in ReadFile
- Added Animator3ds - helper class to simplify playing animations stored in 3ds file
- Fixed isAditive parameter for Scale and Translate transform
- ObjectName can be now also Model3DGroup and not only Model3DGeometry
- RotateObjects can now be called with RotateTransform3D - this enables setting custom
center of rotation (instead of center of object)
- Added methods without object name - to translate, rotate and scale all the objects
and lights (as using constant Ab3d.Reader3ds.RootModelGroupName for objectName).
- Added Transformer property to Reader3ds - this simplifies transforming the read
Sample R2D2 model rendered without using smoothing groups (left) and with using
them (right - new in v4.2) - some edges are sharp and some are smooth. See Shading
sample for more info (included in download)
New in version 4.1
- Reader3ds can now properly import the objects hierarchy. For example if we have
a robot arm (see image below) and we rotate the base than all the child joints and
arms are rotated accordingly.
- There is a new method DumpNamedObjects that can be called in immediate window (after
the debugger is stopped and the 3ds file is already read with Reader3ds) to get
all the available named objects and a hierarchy of the objects.
- Transformer3ds is a new class in Ab3d namespace that can greatly simplify transforming
and animating objects read with Reader3ds. The class contains many methods - for
more info see RobotArm sample and help.
Back to Reader3ds