3D Synthezier

1 General

1.1 Source code

2 Operating principle

Parses scene definition language and creates 3D world based on it. Result will be in a wavefront obj file, witch can be then visualized using external renderer.

Basic concept of defining scene is:

  • Simple and primitive objects are created on point and polygon level.
  • More complex ones can be created my combinig already existing ones, while applying various transformations on them.

Objects with all its subobjects can be rotated, mirrored or resized omong any axis. Generator has built in cache for data input and output to minimize file access.

3 System requirements

software tested version
DOS 6.22
QBasic 4.5

4 Installation

  • Unpack ZIP file in any folder.
  • update include path inside bin/3dparse.bas

4.0.1 Directory layout

  • bin
    • 3dparse.bas - 3D generator main executable
    • city1.3d - city with square-like buildings
    • city2.3d - city with hexangular buildings
    • result.mtl - shared material library
    • *.bat - quick launch scripts
  • include - 3D objects used to compose the scene

5 Scene description language

(read examples…)

5.1 here


defines new segment

5.2 p

p  x y z

defines new point

5.3 f

f  p1 p2 p3 p4

defines new polygon, p4 may be unused

5.4 warn

warn  <message>

displays warning message, and wait for key

5.5 end


terminates parser

5.6 mtl

mtl  material

selects material

5.7 mtlrnd

mtlrnd  material ...

selects random material from list

5.8 obj

obj  object xz45 xy20 x+3 y*2

includes sub object, can be rotated moved or resized, across X Y Z. If object name begin vith ~ then it will be loaded from current directory. if object name ends with ~ then object will be parsed directly from file, and not chached, to allow loading of greater than 500 lines files.


5.9 rnd

rnd  p^1^2^3 p^7^2^1

select random command to execute, ^ will be converted to spaces.

5.10 #

# whatever text


5.11 out

out  file

specify output file name, must be first command

5.12 set

set  variable  contents

set variable contents, variable must be number, contents can be string. max variables is 100. first is 0.

5.13 variables usage

anycommand %1 anything

inserts variable 1 contents info line

5.14 cmp

cmp  flag string1 string2

compares strings, and inserts TRUE to flag, if they are equal, else inserts FALSE. max 9 falgs, 0 first. Each subobject has its own flags.

5.15 ?

?flag anycommand

executes command if flag is true.

exapmle: ?3 obj car z*2 xy45

5.16 dum


dummy function, does notheing

6 Usage

Make sure you have QB binaries in your PATH. Execute




to generate example cities. After parsing is finished, appropriate *.obj files will appear in the bin directory holding generated scene. Visualize scene with your favourite renderer.

7 Examples

Download Blender files:

file size
rectangular city.blend 3.6 MB
hexagonal city.blend 21 MB

They were produced by importing generated wavefront obj files into Blender.

7.1 Rectangular city

rectangular city, 1.jpeg

rectangular city, 2.jpeg

rectangular city, 3.jpeg

7.2 Hexagonal city

hexagonal city, 1.jpeg

hexagonal city, 2.jpeg

hexagonal city, 3.jpeg