L3DT documentation
Large 3D terrain generator

L3DT release 2.8

Released on the 19th of November, 2009 (see announcement)

Major features

Torque support

  • Added TER importer/exporter via L3DTio_TorqueTER plugin.
    • Included TGEA TER and MegaTerrain exporter (TER and .mis).
    • Included T3D exporter (TER, .mis and materials.cs)
      • Made 'material.cs' exporter merge new materials into existing materials.cs file, rather than overwriting (also stores backup as materials.cs.old, materials.cs.old.2, etc.)
    • Add small offset to TER files to allow for excavation.
    • Update docs and wrote tutorial.
    • Modified Atlas toolbar button to give popup menu for T3D/TGEA/TGE export options.
  • Make key system detect Ignition/Bundysoft keys, and redirect as appropriate (or throw error in case of Ignition key entered into Bundysoft version).


  • Optimised shadow raycast in calc_SH_GenMap (10-20x improvement, see blog post).
  • Added specular highlights to light/texture map.
  • Added colour edit controls for colour balance controls in material editor, land type editor appearance pane, and texture layer editor.
  • Added specular colour button to light map wizard.
  • Added specular checkbox to light map wizard #2.


  • Created ZeoGraph plugin, based on GraphEdt from DirectShow.
  • Included plugins and example graph in Pro installer.

Other features

Mosaic maps

  • Set mosaic maps as the default option in AM/TN/LM/TX wizards for L3DT Pro.
  • Changed wizards UIs to (quietly) force map tiling on maps larger than 8k x 8k. This prevents users from choosing settings that may cause 'insufficient memory' errors (see this thread).
  • Made AM wizard ignore HF mosaic state (if disabled), and use default (on) regardless.

User interface

  • Restore Win2K support by replacing CSysLink control with custom 'ShellLinkCtrl' (see this thread).
  • Added 'Active map' menu.
  • Update manager windows:
    • Add 'scan folder' buttons to all managers (see blog post).
    • Update manager layouts for consistency (resizing, button names, placement, etc.)
  • Updated copy/paste:
    • Modified 'calc.map.CopyArea' and 'calc.map.Resize' to take uint flag for setting progress method (inline / threaded).
    • Updated Copy/Paste dialog box to support different paste alignments.
    • Added 'Paste as new layer' option.
  • Added 'cancel' button option to standard L3DT progress box (Now demonstrated in Spring plugins to cancel lengthy file I/O.)
  • Modified wizards to use DLUs for sizes, so as to be suitable for different font sizes (see this thread).
  • Modified export wizard to explicitly set path if none given (using project path, or otherwise 'USERPROFILE\L3DT\maps').
  • Modified update manager to check update release date against free update period of users' licenses, and warn when update is not supported by key.
  • Updatet tab control:
    • Rewrite tab control using GDI, as opposed to hacky CTabCtrl.
    • Added context menus for tabs.
    • Added « and » arrows, and panning support.
    • Double buffered rendering.

Plugin changes

Plugin API changes

  • Updated to Zeolite v2.7.4.
  • Added ability to add plugin menu items to other menus (e.g. import, export, etc.)
  • Converted extension functions to use hvar instead of map args.
  • Added 'file.xml.Save' and 'file.xml.Load' extension functions.
    • Added plugin API helper c++/h files for XML read/write.

New plugins

Updated plugins

  • Modified both TER plugins (L3DTio_TER and L3DTio_TorqueTER) to detect when loading files from one-another, and throw sensible errors.
  • Modified AMF format/plugin to include the list of climate names in the file, to ensure proper loading of AM when project file is missing climates (e.g. user forgets to hit save after modifying mosaic AM).
  • Updated L3DTio_Atlas2 to add own menu item, and removed corresponding item from L3DT core.
  • Updated 7zWrap to store path settings in local.ini.xml.
  • Updated L3DTio_FI to support 'L3DTio_FI.PeekMapType' extension function.
  • Updated atRainMaker to add 'cancel' button, and bring it up to date with the current plugin API.
  • Modified L3DTio_SMT to automatically disable the SSE version if the non-SSE version is loaded, and vice-versa.
  • Updated L3DTio_PGM.
  • Updated atGeoRef2 to add EPSG projection code field.
  • Updated L3DTio_HFZ to fix saving of EPSG projection code.
  • Updated L3DTio_Spring, L3DTio_SMF and L3DTio_SMT to invert y-axis by default.
  • Updated atFilterAM to work with Zeolite v2.7.4.
  • Updated plugins to use new menu contexts.
    • L3DTio_Spring
    • atExportToTV3D
    • L3DTio_WMPro
    • atTcpSock, zChatClient, atNetClient, atNetServer

Mesh plugin changes

  • Modified L3DTio_OBJ to use vector3fs for vert buffer, like Sapphire.
  • Updated L3DTio_OBJ and L3DTio_B3D plugins to invert Z axis for 'XZ plane, Y up' mode (see this thread).
  • Changed L3DTio_OBJ plugin:
    • Added MTL and texture coordinate export using 'File→Export→Export OBJ and MTL' option.
    • Added x/y offset to centre map plane in Obj exporter.
    • Added support for OBJ face groups in OBJ loader (e.g. for mixed tri / quad models, using same vertex/norm lists)
    • Added support for tex coord and material loading in OBJ loader.
  • Created L3DTio_S3O plugin, to render Spring objects in Sapphire (for tree placement, etc.).

ZeoScript plugin changes

  • Updated ZeoScript to v2.7.4 (see change log).
  • Added <*:> and <&:> opcalls to ZeoScript v2.7.3.0 for pointer operations.
  • Added <type:name> cast syntax to ZeoScript, to be more C-like. Old <cast:type name> syntax is deprecated.
  • Added all 'varlist' functions to ZeoWrap.
  • Added alpha sort to function browser.

Plugin bug fixes

  • Fixed 'preview' button on atMeshDecimator plugin (was broken by change of mesh array types in v2.7a).
  • Fixed SD7 import in Spring/SMF/SMT plugins (was threading/multi-core bug).

L3DT in Linux

  • Modified progress bar to restore Linux/Wine compatibility (see bug report).


  • Added automatic loading of climates, materials and scripts (see blog post).

Bug fixes

  • Reduced incidences of clashes between multiple L3DT sessions over writing to logfile by retrying write for up to 5 seconds.
  • Recompiled atGeoRef2 to support Win2K.
  • Fixed T3D Material Manager, which wasn't allowing edit of 2nd material in list.
  • Checked Win7 rendering problem (see this thread).
  • Fixed calc queue, which was quitting after HF (was error in DesignInflate return values).
  • Modified AM brush to invalidate AM-image when there is a size mismatch (see this thread).
  • Made texture paths relative in MTL exporter (see request).
  • Fixed initialisation to prevent simultaneous, overlapped display of Pro welcome message and walkthrough.
  • Fixed image drape (poorly done unicode→ascii code was ignoring selection and returning only map name of “HF”).
  • Fixed terrace vertical range thresholds to scale by horizontal scale (was not terracing very small horiz scales). — see this thread.
  • Fixed loading of project map mosaics that do not have entries in project formats list (e.g. 'AM-image') — was throwing error that project could not set active format.
  • Modified drag selection handler in L3DT to clip coordinates if selection rectangle exceeds map extents (previously was rejecting selection, which was annoying).
  • Modified progress grid window so that HideView is not called directly by worker thread (it triggered breakpoint in debug mode due to ShowWindow call)
  • Modified log view so that ShowView is not called directly by worker thread (it triggered breakpoint in debug mode due to ShowWindow call)
  • Fixed dodgy header value in greyscale bitmap export (see this thread).
  • Fixed the dreaded crash during shutdown and reset (was caused by calling backup plugin after it's unloaded).
  • Fixed 'CL3DTio_BackupApp::FinaliseEditRecord' error when double-clicking with the design map brush (see this thread).
  • Made buffer class remember item type when copied (previously only remembered item size).
  • Made wizard non-topmost.
  • Removed support for 'global' plugins (see blog post)
  • Fixed pixel alignment to match display buffer in 2D view (look at dots in DM) (see forum thread). — fixed using ClipRgn.
  • Shutdown plugins in reverse order.
  • Fixed bug in 'project.GetMapListH' extension function, which was always returning null.
  • Fixed memory corruption when using design map resizing (thanks Philippe!)
  • Made 'Import HF' option store active format var when imported from a mosaic (inc. when translating mosaic from non-native to native format).
  • Fixed filter in 'File→Import→Heightfield' option, which didn't include MMF and contained a formatting error.
  • Fixed mosaic format behaviour with 'File→Open' (setting active format, and translating non-native to native formats).
  • Fixed startup error message regarding atAttribBrush::ExtIsShownTX (see this thread).
  • Fixed 'CMapGroup::HF_ImportFromImage' format to not set format flags, as this caused a 'please change format' message when saving project.
  • Fixed export in Standard Edition of mosaic texture as a non-mosaic file (was running afoul of overzealous no-mosaic-split-or-combine rule).
  • Updated land type editor, RAM chart and vertical scale dialogs to use DLU-based coordinates for element placement, so as to support non-default fonts.
  • Added sanity check to image drape dialog to prevent user from selecting no project map and pressing OK (was throwing errors downstream).

Sapphire 3D renderer

New features

  • Used OpenGL lighting for heightfield renderer (this adds specular lighting).
  • Added frame timer using GetTickCount
  • Added more toolbar/menu options (skybox button, fog colour menu option).
  • Implemented path recording.

User interface

  • Added menu option for changing sky colour (see request).
  • Added menu option for changing fog near/far distance fraction (see request).
  • Paused renderer when entering menu and un-paused when exiting, to prevent flickering on some systems. — thanks David
  • Changed movement key handling to use WM_KEYDOWN/WM_KEYUP for smoother key handling, simultaneous movement in each axis, and case-insensitive handling (see request).
  • Added option to invert mouse panning, to match some FPS interfaces. (see request).
  • Added a reference object ('army man') following the mouse cursor to help with judging scale (see this thread). This included:
    • Loaded OBJ mesh.
    • Made mesh follow cursor, with LinInterp for height.
    • Added menu toggle option.
    • Packaged mesh with Sapphire, and allowed users to choose other mesh files.
    • Implemented mesh scaling to ensure mesh is always correct size (since projection matrix scale changes with horiz scale).
    • Disabled mesh when using brush tools.
    • Implemented lighting for mesh.
  • Added store/recall of window size.
  • Added script menu, for running scripts within Sapphire.


  • Primitive rendering (boxes, spheres, cylinders, cones, etc.)
  • Added call list support to CsMesh (on by default)
  • Added CsProxy class
  • Converted to have base class of CsMesh, with quadric-like generation method:
    • CsBox (as a mesh:GL_QUADS)
    • CsCylinder (as a mesh:GL_QUAD_STRIP)
    • CsCone (as a mesh:GL_TRIANGLE_FAN)
  • Added vertex normals to primitives:
    • CsBox
    • CsCylinder
  • Tested CsMesh in following modes:
    • GL_QUADS
  • Added normal coordinate support to CsMesh
  • Added texture coordinate support to CsMesh
  • Added CsMesh::Load support:
    • Basic OBJ loader.
    • Load vertex normals.
    • Load texture coords.
    • Demonstrate by loading mesh vehicle, for use as a buggy perhaps?
  • Added support for alpha blending in CsObject.

Bug fixes

  • Fixed point grab tool.
  • Fixed tessellator max variance depth so that highest detail level is hit sooner.
    • Applied fix to ROAM tessellator in atMeshDecimator.
  • Fixed keyboard capture by Sapphire's toolbar, using WindowProc
  • Fixed fog/skybox toggle when changing from tex to poly to wire.
  • Fixed persistence of user settings (when changing menu option, presets file is updated).
  • Fixed typo of 'Frustum' as 'Frustrum' in menu.
  • Added call traces in ShowWnd/HideWnd to assist with debugging driver problems.
l3dt/history/v2.8.txt · Last modified: 2017/08/31 04:57 (external edit)
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki