3D Editor for Traffic Playground
Petr Stružka,
xstruz01@stud.fee.vutbr.cz
Department of Computer Science and Engineering
Technical University of Brno
Brno / Czech republic

Abstract

    This contribution presents one part of complex Traffic Playground, which cover editing squares, the base elements of the Playground. The program's output contains 3D representation of the squares and its semantic description including description of the traffic situation. The program that implements the project works under Win95/NT environment and uses Direct3D (a part of DirectX extension).

 

Keywords: Traffic playground, DirectX, Direct3D, X file format, square map, square

1. Introduction

    The contribution describes the concept of the Traffic playground and it also contains some implementation details connected with the DirectX graphics API.

1.1 The Traffic playground

    The Traffic playground system is intended as a connection of traffic rules tutorial program and for practicing in the form of game. The Traffic playground project users will be mainly children and is designed for children, but it can be useful for other users, mostly for teachers in driving schools. The program allows them to improve their knowledge of the traffic rules. Using the system, it is possible to try basic responses to various traffic situations, that are simulated by the system and presented to the user in a simple way. The Traffic playground is a simulation of real situations. User drives a simulated vehicle through the playground, which includes crosses, curves, road signs and other elements of real traffic. The main advantage of the system is visualization, which attracts users like a computer game (much better then answering a test forms in driving schools). The program is not designed for driving school lessons. The intended purpose is to give an experience and to practice quick reactions in given situations (minimal knowledge of the traffic rules is required).
    The program Traffic playground consist of two individual parts. The first part is a 3D view to selected situation which can be e.g. a view from car's cab driven by the user. The second part is the Editor for Traffic playground. It allows creation of complete appearance of 3D scene including 2D square placement. Users can insert road signs and place them in the scene in an easy way, they can add new elements to the scene created before or build the scene from scratch, it is possible to create new maps of squares, etc. Output files (that includes semantic description of each square) of the 3D Editor are used in the 3D viewing engine.

1.2 DirectX

    The Microsoft DirectX Software Development Kit (SDK) (for additional information see reference [2] ) provides a finely tuned set of application programming interfaces (APIs) that provide you with the resources you need to design high-performance, real-time applications. DirectX technology will help build the next generation of computer games and multimedia applications.
    Microsoft developed DirectX because it wanted the performance of applications running in the Microsoft Windows operating system to rival or exceed the performance of applications running in the MS-DOS operating system or on game consoles.

DirectX includes several components:

  • DirectDraw accelerates hardware and software animation techniques by providing direct access to bitmaps in off-screen display memory, as well as extremely fast access to the blitting and buffer-flipping capabilities of the hardware.
  • DirectSound enables hardware and software sound mixing and playback.
  • DirectPlay makes connecting games over a modem link or network easy.
  • Direct3D provides a high-level Retained-Mode interface that allows applications to easily implement a complete 3D graphical system, and a low-level Immediate-Mode interface that lets applications take complete control over the rendering pipeline.
  • DirectInput provides input capabilities to your game that are scalable to future Windows-based hardware-input APIs and drivers. Currently the joystick, mouse, and keyboard are supported.
  • 2. 3D Editor

    2.1 General

        3D Editor for the Traffic Playground is an application running under system MS Windows 95 / MS Windows NT version 4.0 or later. During execution, the program uses DirectX, especially Direct3D interface. It is necessary DirectX to be installed on your system, at least version 3.0 is required. Graphics card with 3D accelerator and minimal 4MB video memory is recommended to get enough space for textures. Program is a standard Windows application with all its features.

    2.2 Editing modes

        This application provides efficient and comfortable interface for creating, editing and manipulating the Traffic playground objects. Main object is a playground and consist from squares. General 'road map' is composed from particular 'road maps' of elementary squares. Powerful and easy tools have been implemented for editing both objects. Therefore, two editing modes are defined.
        First mode is two dimensional and manipulates a map of squares. Using this mode, the user can efficiently handle the squares and determine general 'road map' of the playground. Creating a new playground produces a new map of NxM squares. This 2D editing mode allows user to affiliate a specific traffic situation to each square. It also gives the overview of whole playground and maintains the traffic situation context.
        Second mode is three dimensional and enables editing of the elementary squares. It's possible to work with only one square at a time in this mode, because 3D editing mode is specialized for creating objects on square and manipulating them. The user can use several groups of predefined objects to specify requisite features of each square. That means user can change the traffic situation by adding or removing traffic signs (for example road signs) or he can use an object from another group to make the outlook of playground more realistic (for example trees).
     
     
     
    Figure 1: A sample of application Editor for the Traffic playground
     

    2.3 Structure of the Traffic playground

        Playground is designed as a workspace, which can be displayed and includes model of some real or artificial traffic playground.. That workspace is divided into NxM squares, which are the basic construction blocks for the playground. Minimum size of playground is only one square. This means that the square is an elementary unit of the playground and can not be divided in any smaller elements. Only one road element can be found in one square (i.e. cross, direct way, curve, etc. - see table of squares to get more information). The whole playground can be constructed by adding squares into the map. The map determines position of squares in the playground. Detailed maps and squares description is described in the next couple of paragraphs.

    2.4 Traffic playground map description

        In 3D editing mode the user can see only one square. Hence some way of maintaining the user aware of context of constructed squares in the map is needed. It is provided by the map of squares. The map of squares is a 2D structure which maintains square positions and gives overview of the whole playground. The purpose of this map is to allow user to comfortable edit the playground and to quickly work with the squares, which have already been created. The map of the playground is stored in text file with MHD extention. This file includes the complete information about playground needed for its construction, for example information about square files and positions.

    2.5 Square description

        Square is basic element of the Traffic playground and can not be divided into smaller parts. The user can use only predefined squares with specific road elements. It is not possible to define new road elements at this time (this feature will be added to this application in the next version). To get more information about the square faces see table of squares.
        The purpose of the Traffic playground is to simulate real traffic situations. Tools have been implemented for building and handling traffic signs (e.g. road signs). The user has the possibility to choose arbitrary road sign from the given set of signs and place it into the scene. These actions can be performed in 3D editing mode only. The user can create and place objects on square, manipulate the objects (change their positions), or remove these objects from the scene. It was intended to create more realistic and humanistic application and that is why a couple of tools creating and handling object that appear in the nature, especially plants like trees, bushes, etc. was added.
     
    Figure 2: A sample of a square
     

        Square description consists of two files. The first file stores squares in format X defined by Direct3D interface. The X files format allows to save files of meshes, textures, animation sets, etc. Mesh representation was chosen for saving into the files with reference to textures required by the squares. Templates use such format, too. The textures are shared by all the objects and they are read from directory named TEXTURE. The X file contains complete design of 3D scene of the square, including road signs, traffic signs and ambient objects. All that object are stored to file as a single mesh with texture mapping. During the saving procedure, the file is created from scene hierarchy (as described in the above paragraph). The basic size of the square is 500x500 points. One square can be placed onto the playground repeatedly to avoid unnecessary creation of the squares with same content.
        The next file can be text file with extension PCT, or it can be recorded directly in file withmap of squares (MDH file). If the square is created as a single square in the 3D editor without other association to map of squares, the description PCT file is generated. This file (or record, the content is the same) contains basic information about the square. During playground editing, it is possible to add this file (mainly its 3D presentation in X file) into given place in new or currently edited map of squares. Then the square description is stored into the general map description (that means to file with MDH extension).
        Square description is organized according to the following rules. Section's name is derived from the X file name, which is the main square identification. Basic face is determined in variable named TYP. Value can be in range of 0-15. It appears to all possible 'road maps' in one element. The value 0 means green place, which is implicitly inserted in free spaces not occupied by any square. This process does not need other special definition. Naturally, it is possible to create and place for example forest or building, but it does not affect the traffic situation at all. Variable named POZICE is filled with list of all positions used in the edited map. Next variable ZNACKY defines list of all used road signs in the square. If the list of road signs is defined in this way, it should be defined with the same number of variables with detached names of road signs. The value is defined by the vector(s) (q, x, y, r). Character q means one eighth of square the road sign is placed, x,y is its position, and r is its radius.

     
     
    Figure 3: Numeric mark of each eighth
     
     

    2.6 Trajectory alternatives

        In the Traffic playground, traffic is simulated, e.g. vehicles are in motion, etc. To do the simulation, it is necessary to define how the car can move in the playground. The car's motion should be defined so that no collision with other objects occurs. The car should move only on the predetermined roads and hold the traffic rules like in the real life.
        If the map of squares is correctly defined, all the roads leading from and to all squares must be connected to the neighbour square. Maintaining this rule is enabled by only having the trivial square types. The car trajectory is defined by road placement.
     
     
     
    Figure 4: A sample of part of the map of squares
    includes square which is not connecting
     
        The second problem is traffic signs, which specifically regulate traffic on the roads. As can be seen, the car can not pass through, if there is a road sign "entrance prohibited", etc. But if there is no visible barrier on the road, nobody can constrain to driver takes this course, except his own will or a policeman.
        It means, that if we want to solve the square course problem, we should speculate not only with a cross face, but also with traffic signs which can lower a set of alternative trajectories, too. For this case, input and output points are defined to and from the squares. Each square could have the maximum of a four square input or output points. The denomination of those points is in the following figure and is similar to the square eighth marking.
        In the square description variables VJEZD and VYJEZD are defined, that cover a list of all possible entrances and exits. The values can be 1,3,5,7 respectively 0,2,4,6. If no value defined, or the number is not listed, the given gate passage is impossible. The correctness of that feature is possible only on the whole playground level.
     
      Figure 5: Definition of the input and output points
       
        For easier navigation in the scene, a semantic description of cross passage through the square is defined. This semantic is usable mainly for other part of the Traffic playground system, which controls cars' motion. It should be freed from analyzing of the complete scene to get a current traffic situation to determine cars' trajectory. Holding those techniques will accelerate execution for navigation, which could be a part of a scene rendering program.

    2.7 Files

        Other files needed the program runs are texture and object template files. Textures are stored in TEXTURE directory which contains all textures (such as tree texture, road signs, etc.) used in the scene. The textures are stored in MS Windows bitmap (BMP) format. Object templates are stored in TEMPLATE directory in X file format. The object template files contain predefined 3D objects, such as road signs, basic squares, and all 3D objects used in the editor.
        3D templates were created using Autodesk 3D Studio editor and stored in 3DS format. Transformation to X file format was performed by a convert utility (resulting in mesh format).
        Directory HRISTE contains stored map of squares of the Traffic playground and related X files. It is recommended to store each playground in separate directory. Directories that contain examples for the Traffic playground are provided and contain files called Hriste2.mdh and kolo.mdh. For better illustration, see the above mentioned example files or appendix.

    3. Implementation

        The program Editor for Traffic playground was implemented under Microsoft Windows 95 system using Borland C++ 5.0 programming language. For 3D graphics drawing, Retained-Mode Direct3D interface was used. The program allows for editing one square at one time. Object oriented principles were used in the implementation. Every window or dialog uses its own class. Control over Direct3D and basic objects, e.g. a complete scene and its frame object hierarchy, is implemented in class TDirect3DCtrl. This class contains data structure of the Traffic playground.

    3.1 Direct3D initialization

        Direct3D and DirectDraw interface functions are imported directly from system libraries. This is done using definition file of the project with IMPORTS keyword, which is followed by the name of a library and imported function:
      IMPORTS D3DRM.Direct3DRMCreate
      IMPORTS DDRAW.DirectDrawCreateClipper
      .
      .
      etc.
       
        The main initialization of Direct3D interface is done by Direct3DRMCreate function, which results in pointer to the selected structure. In next step, it is necessary to call DirectDrawCreateClipper function, which ensures graphics cropping to selected window. This step is followed by parameter setting, such as model etc. Calling TDirect3Dctrl class method CreateDevice3D sets up device and retrieves color depth, that is needed for setting different color and texture quality level. Some of these parameters can be changed while the program runs.

    3.2 Internal data structures

        Objects in the scene are ordered in a frame hierarchy -- they are connected in a tree structure. Other objects, such as lights, camera (means viewing point), and others are connected to the root frame. The above described hierarchy is implemented in AppInfo structure that contains the basic references to the scene (scene type is frame too, and it is the root of the hierarchy tree), camera, device and rendering mode in the class TDirect3DCtrl. This structure is well suitable for object manipulation, where it must be possible that changes done to parents apply to all their children. The basic structure of the hierarchy tree is displayed in followed figure.
    Figure 6: The scene object hierarchy

        The map of squares is represented by ActHriste structure. It includes aktivni variable, which distinguished the method of editing of the square. If the map of squares is loaded, the variable is set and currently edited square is part of opened playground and has own position (which can be multiple); all other information about square is stored to the map of squares of playground. Otherwise this information is stored in separate file with PCT extension. Other variables describe map file name, x and y size, number of non zero squares (X file must exist for each non zero squares), and list of X files,
        Another variables are template_path and texture_path, that contain paths to templates and textures. It is assumed that this directories are placed to the directory containing main program. These paths are used for inserting objects to scene and calling the texture load function.
        The variables idTimer; fpsTimer and hwndTimer; are used to screening timing setup. Variable idTimer is unique timer identifier, variable fpsTimer determines the number of frames displayed per second, and hwndTimer is handle to the timed window.

    4. Direct 3D

        Direct3D provides the API services and device independence required by developers, delivers a common driver model for hardware vendors, enables turnkey 3D solutions to be offered by personal-computer manufacturers, and makes it easy for end-users to add high-end 3D to their systems. Because the system requires little memory, it runs well on most of the installed base of computer systems.
        Direct3D is implemented in two distinctly different modes: Retained Mode, a high-level API in which the application retains the graphics data, and Immediate Mode, a low-level API in which the application explicitly streams the data out to an execute buffer. Direct3D Retained Mode API is designed for manipulating 3D objects and managing 3D scenes. Direct3D Immediate Mode is Microsoft's low-level 3D API. It allows you to port games and other high-performance multimedia applications to the Windows operating system.
        The Direct3D API (like the rest of the DirectX API) is built on top of a hardware-abstraction layer (HAL), which insulates you from device-specific dependencies present in the hardware. A companion piece to the Direct3D HAL is the hardware-emulation layer (HEL). The Direct3D HEL provides software-based emulation of features that are not present in hardware. For more information see [2].

    5. Conclusions

        The purpose of this project was to design and implement Editor for Traffic playground program, that is part of the Traffic playground system. This application is especially designed so that it can use DirectX graphics interface. The project also involved semantics of car navigation through the crossings and verification of the road map consistency.
        The future work (on next version of this application) will include solving problems of global definition of the square descriptions and also more general description of squares.
        It would be also useful to create better inner structure in file storage of the scene description. Such structure can benefit from better X file and memory structure understanding achieved during this project. The next version of the Editor for Traffic playground will integrated broader palette of basic elements and also other elements that will improve appearance of the scenes.

    6. References

    [1] Thompson, N: 3D Graphics Programming for Windows 95, Microsoft Press, USA, 1996
    [2] Microsoft DirectX 3 Software Development Kit, Microsoft, USA, 1996
        (URL http://www.microsoft.com/directx)
    [3] Fořt, I: Windows - Techniky programování (in Czech), Grada, Praha, Czech Republic, 1993

    7. Appendix

    7.1 Tables

     
      DESCRIPTION
      SQUARE TYPE
      IMAGE
      Free Place
      0
      Start, direction Z+
      1
      Start, direction X+
      2
      Curve
      3
      Start, direction Z-
      4
      Direct way, direction Z
      5
      Curve
      6
      Cross T
      7
      Start, direction X-
      8
      Curve
      9
      Direct way, direction Z
      10
      Cross T
      11
      Curve
      12
      Cross T
      13
      Cross T
      14
      Cross
      15
       
      Table 1: Square faces scheme

    7.2 Examples

        The following text is an example of the map description. The text contains information about the map size, positions of squares, and traffic signs (see Chapter 2).

    file KOLO.MDH:

    [Mapa dopravniho hriste]

    ;this file was created by 3D editor and be sure exist files .x
    Magic=2
    Kompletni=1
    Verze=1.0
    Rozmer=2x2
    Pocet ctvercu=4
    Soubory=k1.x,k2.x,k3.x,k4.x
    Start=1:0,+z

    [k1.x]
    typ=6
    pozice=0:1
    Znacky=A1A,A1B
    A1A={1,430,420,0)
    A1B={7,420,430,180)
    Vjezd= 1,7
    Vyjezd= 0,2

    [k2.x]
    typ=12
    pozice=1:1
    Znacky= A1A,A1B
    A1A={1,430,420,0)
    A1B={7,420,430,180)
    Vjezd= 1,3
    Vyjezd= 2,4

    [k3.x]
    typ=3
    pozice=0:0
    Znacky= A1A,A1B
    A1A={1,430,420,0)
    A1B={7,420,430,180)
    Vjezd= 1,5
    Vyjezd= 4,6

    [k4.x]
    typ=9
    pozice=1:0
    Znacky= A1A,A1B
    A1A={1,430,420,0)
    A1B={7,420,430,180)
    Vjezd= 3,5
    Vyjezd= 0,6