Clean up README files.
- Remove trailing whitespace - Replace tabs with spaces - Reformat to < 85 characters to avoid autogenerate readme.pdf bleeding over margins.
This commit is contained in:
parent
08eabfb67d
commit
c974f5242d
17 changed files with 869 additions and 771 deletions
|
@ -1,18 +1,18 @@
|
||||||
COMMON SETTINGS
|
COMMON SETTINGS
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
Currently four types of digital filter implementations are supported. They all serve an
|
Currently four types of digital filter implementations are supported. They all
|
||||||
individual purpose or are individual implementations of a specific filter type.
|
serve an individual purpose or are individual implementations of a specific
|
||||||
Each filter implementation uses the same set of basic configuration tags and individual
|
filter type. Each filter implementation uses the same set of basic configuration
|
||||||
configuration elements. These individual elements are described in the section of the
|
tags and individual configuration elements. These individual elements are
|
||||||
filter.
|
described in the section of the filter.
|
||||||
|
|
||||||
The InputValue
|
The InputValue
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Each filter has several driving values, like the input value itself, sometimes a reference
|
Each filter has several driving values, like the input value itself, sometimes
|
||||||
value, a gain value and others. Most of these input values can bei either a constant value
|
a reference value, a gain value and others. Most of these input values can be
|
||||||
or the value of a property. They all use the same syntax and will be referred to as InputValue
|
either a constant value or the value of a property. They all use the same syntax
|
||||||
in the remaining document.
|
and will be referred to as InputValue in the remaining document.
|
||||||
|
|
||||||
The complete XML syntax for a InputValue is
|
The complete XML syntax for a InputValue is
|
||||||
|
|
||||||
|
@ -33,13 +33,14 @@ The complete XML syntax for a InputValue is
|
||||||
</period>
|
</period>
|
||||||
</some-element>
|
</some-element>
|
||||||
|
|
||||||
The enclosing element <some-element> is the element defined in each filter, like <input>, <u_min>,
|
The enclosing element <some-element> is the element defined in each filter, like
|
||||||
<reference> etc. These elements will be described later.
|
<input>, <u_min>, <reference> etc. These elements will be described later.
|
||||||
The value of the input is calculated based on the given value, scale and offset as
|
The value of the input is calculated based on the given value, scale and offset as
|
||||||
value * scale + offset
|
value * scale + offset
|
||||||
and the result is clipped to min/max, if given.
|
and the result is clipped to min/max, if given.
|
||||||
With the full set of given elements, the InputValue will initialize the named property to the value
|
With the full set of given elements, the InputValue will initialize the named
|
||||||
given, reduced by the given offset and reverse scaled by the given scale.
|
property to the value given, reduced by the given offset and reverse scaled by
|
||||||
|
the given scale.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
<input>
|
<input>
|
||||||
|
@ -49,9 +50,10 @@ Example:
|
||||||
<offset>0.5</offset>
|
<offset>0.5</offset>
|
||||||
</input>
|
</input>
|
||||||
|
|
||||||
Will use the property /controls/flight/rudder as the input of the filter. The property will be initialized
|
Will use the property /controls/flight/rudder as the input of the filter. The
|
||||||
at a value of zero and since the property usually is in the range [-1..+1], the the value of <input> will
|
property will be initialized at a value of zero and since the property usually is
|
||||||
be in the range (-1)*0.5+0.5 to (+1)*0.5+0.5 which is [0..1].
|
in the range [-1..+1], the the value of <input> will be in the range
|
||||||
|
(-1)*0.5+0.5 to (+1)*0.5+0.5 which is [0..1].
|
||||||
|
|
||||||
The default values for elements not given are:
|
The default values for elements not given are:
|
||||||
<value/> : 0.0
|
<value/> : 0.0
|
||||||
|
@ -67,34 +69,38 @@ Some examples:
|
||||||
<property>/position/altitude-ft</property>
|
<property>/position/altitude-ft</property>
|
||||||
<scale>0.3048</scale>
|
<scale>0.3048</scale>
|
||||||
</input>
|
</input>
|
||||||
Gives the altitude in meters. No initialization of the property is performed, no offset applied.
|
Gives the altitude in meters. No initialization of the property is performed, no
|
||||||
|
offset applied.
|
||||||
|
|
||||||
<reference>
|
<reference>
|
||||||
<value>0.0</value>
|
<value>0.0</value>
|
||||||
</reference>
|
</reference>
|
||||||
A constant reference of zero.
|
A constant reference of zero.
|
||||||
|
|
||||||
A abbreviated method of defining values exist for using a just constant or a property. The above
|
A abbreviated method of defining values exist for using a just constant or a
|
||||||
example may be written as
|
property. The above example may be written as
|
||||||
<reference>0.0</reference>
|
<reference>0.0</reference>
|
||||||
Or if the reference is defined in a property
|
Or if the reference is defined in a property
|
||||||
<reference>/some/property/name</reference>
|
<reference>/some/property/name</reference>
|
||||||
No initialization, scaling or offsetting is performed here.
|
No initialization, scaling or offsetting is performed here.
|
||||||
The logic behind this is: If the text node in the element (the text between the opening and closing tag)
|
The logic behind this is: If the text node in the element (the text between the
|
||||||
can be converted to a double value, it will be interpreted as a double value. Otherwise the text will
|
opening and closing tag) can be converted to a double value, it will be interpreted
|
||||||
|
as a double value. Otherwise the text will
|
||||||
be interpreted as a property name.
|
be interpreted as a property name.
|
||||||
Examples:
|
Examples:
|
||||||
<reference>3.1415927</reference> - The constant of PI (roughly)
|
<reference>3.1415927</reference> - The constant of PI (roughly)
|
||||||
<reference>/position/altitude-ft</reference> - The property /position/altitude-ft
|
<reference>/position/altitude-ft</reference> - The property /position/altitude-ft
|
||||||
<reference>3kings</reference> - The constant 3. The word kings is ignored
|
<reference>3kings</reference> - The constant 3. The word kings is
|
||||||
|
ignored
|
||||||
<reference>food4less</reference> - The property food4less
|
<reference>food4less</reference> - The property food4less
|
||||||
|
|
||||||
The <property> element may also be written as <prop> for backward compatibility.
|
The <property> element may also be written as <prop> for backward compatibility.
|
||||||
|
|
||||||
There may be one or more InputValues for the same input of a filter which may be bound to conditions.
|
There may be one or more InputValues for the same input of a filter which may be
|
||||||
Each InputValue will have its condition checked in the order of InputValues given in the configuration
|
bound to conditions. Each InputValue will have its condition checked in the order
|
||||||
file. The first InputValue that returns true for its condition will be evaluated. Chaining a number
|
of InputValues given in the configuration file. The first InputValue that returns
|
||||||
of InputValues with conditions and an unconditioned InputValue works like the C language equivalent
|
true for its condition will be evaluated. Chaining a number of InputValues with
|
||||||
|
conditions and an unconditioned InputValue works like the C language equivalent
|
||||||
if( condition ) {
|
if( condition ) {
|
||||||
// compute value of first element
|
// compute value of first element
|
||||||
} else if( condition2 ) {
|
} else if( condition2 ) {
|
||||||
|
@ -105,7 +111,8 @@ if( condition ) {
|
||||||
// compute value of last element
|
// compute value of last element
|
||||||
}
|
}
|
||||||
|
|
||||||
Example: Set the gain to 3.0 if /autopilot/locks/heading equals dg-heading-hold or 2.0 otherwise.
|
Example: Set the gain to 3.0 if /autopilot/locks/heading equals dg-heading-hold or
|
||||||
|
2.0 otherwise.
|
||||||
<digital-filter>
|
<digital-filter>
|
||||||
<gain>
|
<gain>
|
||||||
<condition>
|
<condition>
|
||||||
|
@ -122,18 +129,18 @@ Example: Set the gain to 3.0 if /autopilot/locks/heading equals dg-heading-hold
|
||||||
<gain>
|
<gain>
|
||||||
<digital-filter>
|
<digital-filter>
|
||||||
|
|
||||||
If the element <abs> is used and set to the value "true", only the absolute value of the input
|
If the element <abs> is used and set to the value "true", only the absolute
|
||||||
(the positive part) is used for further computations. The abs function is applied after all
|
value of the input (the positive part) is used for further computations. The
|
||||||
other computations are completed.
|
abs function is applied after all other computations are completed.
|
||||||
|
|
||||||
OutputValue
|
OutputValue
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Each filter drives one to many output properties. No scaling or offsetting is implemented
|
Each filter drives one to many output properties. No scaling or offsetting is
|
||||||
for the output value, these should be done in the filter itself.
|
implemented for the output value, these should be done in the filter itself.
|
||||||
The output properties are defined in the <output/> element by adding <property/> elements
|
The output properties are defined in the <output/> element by adding <property/>
|
||||||
within the <output/> element. For just a single output property, the <property/> element
|
elements within the <output/> element. For just a single output property, the
|
||||||
may be ommited. For backward compatibility, <property/> may be replaced by <prop/>.
|
<property/> element may be ommited. For backward compatibility, <property/> may
|
||||||
Nonexisting properties will be created with type double.
|
be replaced by <prop/>. Non-existing properties will be created with type double.
|
||||||
|
|
||||||
Example: (Multiple output properties)
|
Example: (Multiple output properties)
|
||||||
<output>
|
<output>
|
||||||
|
@ -151,9 +158,8 @@ Other Common Settings
|
||||||
Example:
|
Example:
|
||||||
<name>pressure rate filter</name>
|
<name>pressure rate filter</name>
|
||||||
|
|
||||||
<debug> Boolean If true, this filter puts out debug information when updated.
|
<debug> Boolean If true, this filter puts out debug information when
|
||||||
Example:
|
updated. Example: <debug>false</debug>
|
||||||
<debug>false</debug>
|
|
||||||
|
|
||||||
<input> InputValue The input property driving the filter.
|
<input> InputValue The input property driving the filter.
|
||||||
Refer to InputValue for details.
|
Refer to InputValue for details.
|
||||||
|
@ -164,18 +170,21 @@ Example:
|
||||||
<output> Complex Each filter can drive one to many output properties.
|
<output> Complex Each filter can drive one to many output properties.
|
||||||
Refer to OutputValue for details.
|
Refer to OutputValue for details.
|
||||||
|
|
||||||
<u_min> InputValue This defines the optional minimum and maximum value the output
|
<u_min> InputValue This defines the optional minimum and maximum value the
|
||||||
<u_max> is clamped to. If neither <u_min> nor <u_max> exists, the output
|
<u_max> output is clamped to. If neither <u_min> nor <u_max>
|
||||||
is only limited by the internal limit of double precision float computation.
|
exists, the output is only limited by the internal limit
|
||||||
If either <u_min> or <u_max> is given, clamping is activated. A missing
|
of double precision float computation. If either <u_min>
|
||||||
min or max value defaults to 0 (zero).
|
or <u_max> is given, clamping is activated. A missing min
|
||||||
Note: <u_min> and <u_max> may also occour within a <config> element.
|
or max value defaults to 0 (zero).
|
||||||
<min> and <max> may be used as a substitude for the corresponding u_xxx element.
|
Note: <u_min> and <u_max> may also occour within a <config>
|
||||||
<period> Complex Define a periodical input or output value. The phase width is defined by the
|
element. <min> and <max> may be used as a substitude for
|
||||||
child elements <min> and <max> which are of type InputValue
|
the corresponding u_xxx element.
|
||||||
|
<period> Complex Define a periodical input or output value. The phase width
|
||||||
|
is defined by the child elements <min> and <max> which are
|
||||||
|
of type InputValue
|
||||||
|
|
||||||
Example: Limit the pilot's body temperature to a constant minimum of 36 and a maximum defined in
|
Example: Limit the pilot's body temperature to a constant minimum of 36 and a
|
||||||
/pilots/max-body-temperature-degc, initialized to 40.0
|
maximum defined in /pilots/max-body-temperature-degc, initialized to 40.0
|
||||||
<u_max>
|
<u_max>
|
||||||
<prop>/pilots/max-body-temperature-degc</prop>
|
<prop>/pilots/max-body-temperature-degc</prop>
|
||||||
<value>40.0</
|
<value>40.0</
|
||||||
|
@ -191,38 +200,41 @@ Implicit definition of the minimum value of 0 (zero) and defining a maximum of 1
|
||||||
|
|
||||||
This defines the input or output as a periodic value with a phase width of 360, like
|
This defines the input or output as a periodic value with a phase width of 360, like
|
||||||
the compass rose. Any value reaching the filter's input or leaving the filter at the
|
the compass rose. Any value reaching the filter's input or leaving the filter at the
|
||||||
output will be transformed to fit into the given range by adding or substracting one phase
|
output will be transformed to fit into the given range by adding or substracting one
|
||||||
width of 360. Values of -270, 90 or 450 applied to this periodical element will allways
|
phase width of 360. Values of -270, 90 or 450 applied to this periodical element will
|
||||||
result in +90. A value of 630, 270 or -90 will be normalized to -90 in the given example.
|
always result in +90. A value of 630, 270 or -90 will be normalized to -90 in the
|
||||||
|
given example.
|
||||||
<period>
|
<period>
|
||||||
<min>-180.0</min>
|
<min>-180.0</min>
|
||||||
<max>180.0</max>
|
<max>180.0</max>
|
||||||
</period>
|
</period>
|
||||||
|
|
||||||
|
|
||||||
<enable> Complex Define a condition to enable or disable the filter. For disabled
|
<enable> Complex Define a condition to enable or disable the filter. For
|
||||||
filters, no output computations are performed. Only enabled
|
disabled filters, no output computations are performed.
|
||||||
filters fill the output properties. The default for undefined
|
Only enabled filters fill the output properties. The
|
||||||
conditions is enabled.
|
default for undefined conditions is enabled.
|
||||||
Several way exist to define a condition. The most simple case
|
Several way exist to define a condition. The most simple
|
||||||
is checking a boolean property. For this, just a <prop> element
|
case is checking a boolean property. For this, just a
|
||||||
naming this boolean property is needed. The boolean value of the
|
<prop> element naming this boolean property is needed.
|
||||||
named property defines the enabled state of the filter.
|
The boolean value of the named property defines the
|
||||||
To compare the value of a property with a constant, a <prop> and
|
enabled state of the filter. To compare the value of a
|
||||||
a <value> element define the property name and the value to be
|
property with a constant, a <prop> and a <value> element
|
||||||
compared. The filter is enabled, if the value of the property
|
define the property name and the value to be compared.
|
||||||
equals the given value. A case sensitive string compare is
|
The filter is enabled, if the value of the property equals
|
||||||
|
the given value. A case sensitive string compare is
|
||||||
performed here.
|
performed here.
|
||||||
To define more complex conditions, a <condition> element may be
|
To define more complex conditions, a <condition> element
|
||||||
used to define any condition described in README.conditions.
|
may be used to define any condition described in
|
||||||
If a <condition> element is present and if it contains a valid
|
README.conditions. If a <condition> element is present
|
||||||
condition, this conditions has precedence over a given <prop>/
|
and if it contains a valid condition, this conditions has
|
||||||
<value> condition.
|
precedence over a given <prop>/<value> condition.
|
||||||
The child element <honor-passive>, a boolean flag, may be present
|
The child element <honor-passive>, a boolean flag, may be
|
||||||
within the <enable> element. If this element is true, the property
|
present within the <enable> element. If this element is
|
||||||
/autopilot/locks/passive-mode is checked and if it is true, the
|
true, the property /autopilot/locks/passive-mode is checked
|
||||||
filter output is computed, but the output properties are not set.
|
and if it is true, the filter output is computed, but the
|
||||||
The default for honor-passive is false
|
output properties are not set. The default for
|
||||||
|
honor-passive is false
|
||||||
Example: Check a boolean property, only compute this filter if gear-down is true and
|
Example: Check a boolean property, only compute this filter if gear-down is true and
|
||||||
/autopilot/locks/passive-mode is false
|
/autopilot/locks/passive-mode is false
|
||||||
<enable>
|
<enable>
|
||||||
|
@ -230,14 +242,15 @@ Example: Check a boolean property, only compute this filter if gear-down is true
|
||||||
<honor-passive>true</honor-passive>
|
<honor-passive>true</honor-passive>
|
||||||
</enable>
|
</enable>
|
||||||
|
|
||||||
Check a property for equality, only compute this filter if the autopilot is locked in heading mode.
|
Check a property for equality, only compute this filter if the autopilot is locked
|
||||||
|
in heading mode.
|
||||||
<enable>
|
<enable>
|
||||||
<prop>/autopilot/locks/heading</prop>
|
<prop>/autopilot/locks/heading</prop>
|
||||||
<value>dg-heading-hold</value>
|
<value>dg-heading-hold</value>
|
||||||
</enable>
|
</enable>
|
||||||
|
|
||||||
Use a complex condition, only compute this filter if the autopilot is serviceable and the lock
|
Use a complex condition, only compute this filter if the autopilot is serviceable
|
||||||
is either dg-heading-hold or nav1-heading-hold
|
and the lock is either dg-heading-hold or nav1-heading-hold
|
||||||
<enable>
|
<enable>
|
||||||
<condition>
|
<condition>
|
||||||
<property>/autopilo/serviceable</property>
|
<property>/autopilo/serviceable</property>
|
||||||
|
@ -279,25 +292,26 @@ To add a digital filter, place a <filter> element under the root element. Next t
|
||||||
the global configuration elements described above, the following elements configure
|
the global configuration elements described above, the following elements configure
|
||||||
the digital filter:
|
the digital filter:
|
||||||
<filter-time> InputValue This tag is only applicable for the exponential and
|
<filter-time> InputValue This tag is only applicable for the exponential and
|
||||||
double-exponential filter types. It controls the bandwidth
|
double-exponential filter types. It controls the
|
||||||
of the filter. The bandwidth in Hz of the filter is:
|
bandwidth of the filter. The bandwidth in Hz of the
|
||||||
1/filter-time. So a low-pass filter with a bandwidth of
|
filter is: 1/filter-time. So a low-pass filter with a
|
||||||
10Hz would have a filter time of 1/10 = 0.1
|
bandwidth of 10Hz would have a filter time of 1/10 = 0.1
|
||||||
|
|
||||||
<samples> InputValue This tag only makes sense for the moving-average filter.
|
<samples> InputValue This tag only makes sense for the moving-average filter.
|
||||||
It says how many past samples to average.
|
It says how many past samples to average.
|
||||||
|
|
||||||
<max-rate-of-change>
|
<max-rate-of-change>
|
||||||
InputValue This tag is applicable for the noise-spike filter.
|
InputValue This tag is applicable for the noise-spike filter.
|
||||||
It says how much the value is allowed to change per second.
|
It says how much the value is allowed to change per
|
||||||
|
second.
|
||||||
|
|
||||||
<gain> InputValue This is only applicable to the gain and reciprocal filter types.
|
<gain> InputValue This is only applicable to the gain and reciprocal filter
|
||||||
The output for gain filter is computed as input*gain while
|
types. The output for gain filter is computed as input*gain
|
||||||
the reciprocal filter computes output as gain/input for input
|
while the reciprocal filter computes output as gain/input
|
||||||
values != 0 (zero). Gain may be a constant, a property name
|
for input values != 0 (zero). Gain may be a constant, a
|
||||||
defined by a <prop> element within the <gain> element or a
|
property name defined by a <prop> element within the <gain>
|
||||||
property name initialized to a value by using a <prop> and
|
element or a property name initialized to a value by using
|
||||||
<value> element.
|
a <prop> and <value> element.
|
||||||
|
|
||||||
Example: a pressure-rate-filter implemented as a double exponential low pass filter
|
Example: a pressure-rate-filter implemented as a double exponential low pass filter
|
||||||
with a bandwith of 10Hz
|
with a bandwith of 10Hz
|
||||||
|
|
|
@ -35,7 +35,8 @@ and, or, equal, less, less-equal
|
||||||
glversion - returns the version number of OpenGL
|
glversion - returns the version number of OpenGL
|
||||||
extension-supported - returns true if an OpenGL extension is supported
|
extension-supported - returns true if an OpenGL extension is supported
|
||||||
property - returns the boolean value of a property
|
property - returns the boolean value of a property
|
||||||
float-property - returns the float value of a property, useful inside equal, less or less-equal nodes
|
float-property - returns the float value of a property, useful inside equal, less
|
||||||
|
or less-equal nodes
|
||||||
shader-language - returns the version of GLSL supported, or 0 if there is none.
|
shader-language - returns the version of GLSL supported, or 0 if there is none.
|
||||||
|
|
||||||
The proper way to test whether to enable a shader-based technique is:
|
The proper way to test whether to enable a shader-based technique is:
|
||||||
|
@ -173,8 +174,10 @@ program
|
||||||
geometry-shader
|
geometry-shader
|
||||||
fragment-shader
|
fragment-shader
|
||||||
attribute
|
attribute
|
||||||
geometry-vertices-out: integer, max number of vertices emitted by geometry shader
|
geometry-vertices-out - integer, max number of vertices emitted by geometry
|
||||||
geometry-input-type - points, lines, lines-adjacency, triangles, triangles-adjacency
|
shader
|
||||||
|
geometry-input-type - points, lines, lines-adjacency, triangles,
|
||||||
|
triangles-adjacency
|
||||||
geometry-output-type - points, line-strip, triangle-strip
|
geometry-output-type - points, line-strip, triangle-strip
|
||||||
|
|
||||||
render-bin - (OSG) children: bin-number, bin-name
|
render-bin - (OSG) children: bin-number, bin-name
|
||||||
|
@ -335,12 +338,13 @@ To apply an effect to a model or part of a model use:
|
||||||
<object-name>Cone</object-name>
|
<object-name>Cone</object-name>
|
||||||
</effect>
|
</effect>
|
||||||
|
|
||||||
where <inherits-from> </inherits-from> contains the path to the effect you want to apply.
|
where <inherits-from> </inherits-from> contains the path to the effect you want to
|
||||||
The effect does not need the file extension.
|
apply. The effect does not need the file extension.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
|
|
||||||
Chrome, although now implemented as an effect, still retains the old method of application:
|
Chrome, although now implemented as an effect, still retains the old method of
|
||||||
|
application:
|
||||||
|
|
||||||
<animation>
|
<animation>
|
||||||
<type>shader</type>
|
<type>shader</type>
|
||||||
|
|
|
@ -34,7 +34,8 @@ Example:
|
||||||
|
|
||||||
<flight-recorder>
|
<flight-recorder>
|
||||||
<replay-config type="int">0</replay-config>
|
<replay-config type="int">0</replay-config>
|
||||||
<config n="0" include="/Aircraft/Generic/flightrecorder/generic-piston-propeller-1.xml">
|
<config n="0"
|
||||||
|
include="/Aircraft/Generic/flightrecorder/generic-piston-propeller-1.xml">
|
||||||
<name type="string">My Aircraft's Flight Recorder</name>
|
<name type="string">My Aircraft's Flight Recorder</name>
|
||||||
<!-- Custom properties -->
|
<!-- Custom properties -->
|
||||||
<signal>
|
<signal>
|
||||||
|
@ -178,7 +179,8 @@ property and interpolation type.
|
||||||
Example recording some additional custom properties:
|
Example recording some additional custom properties:
|
||||||
<sim>
|
<sim>
|
||||||
<flight-recorder>
|
<flight-recorder>
|
||||||
<config n="0" include="/Aircraft/Generic/flightrecorder/generic-piston-propeller-1.xml">
|
<config n="0"
|
||||||
|
include="/Aircraft/Generic/flightrecorder/generic-piston-propeller-1.xml">
|
||||||
<!-- Add custom properties here -->
|
<!-- Add custom properties here -->
|
||||||
<signal>
|
<signal>
|
||||||
<type>float</type>
|
<type>float</type>
|
||||||
|
|
|
@ -499,9 +499,9 @@ property tree, like:
|
||||||
|
|
||||||
<slider>15</slider> <!--width for slider -->
|
<slider>15</slider> <!--width for slider -->
|
||||||
<wrap>false</wrap> <!-- don't wrap text; default: true -->
|
<wrap>false</wrap> <!-- don't wrap text; default: true -->
|
||||||
<top-line>0</top-line <!-- show this line at the top; negative numbers: show last line -->
|
<top-line>0</top-line <!-- line to show at top, -ve numbers: show last line -->
|
||||||
|
|
||||||
<editable>true</editable> <!-- whether the puLargeInput is supposed to be editable -->
|
<editable>true</editable> <!-- if the puLargeInput is supposed to be editable -->
|
||||||
</textbox>
|
</textbox>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
Start flightgear with
|
Start flightgear with
|
||||||
fgfs --jsclient=socket,in,<hz>,,<port>,udp --prop:/jsclient/axis[i]="/property/you/want/to/control" --prop:/jsclient/axis[i+1]="/another/property/you/want/to/control" ...
|
fgfs --jsclient=socket,in,<hz>,,<port>,udp \
|
||||||
|
--prop:/jsclient/axis[i]="/property/you/want/to/control" \
|
||||||
|
--prop:/jsclient/axis[i+1]="/another/property/you/want/to/control" ...
|
||||||
eg:
|
eg:
|
||||||
# fgfs --aircraft=yf23-yasim --airport=KEMT --jsclient=socket,in,5,,16759,udp --prop:/jsclient/axis[0]="/controls/flight/spoilers" --prop:/jsclient/axis[1]="/radios/comm/volume"
|
# fgfs --aircraft=yf23-yasim --airport=KEMT --jsclient=socket,in,5,,16759,udp \
|
||||||
|
--prop:/jsclient/axis[0]="/controls/flight/spoilers" \
|
||||||
|
--prop:/jsclient/axis[1]="/radios/comm/volume"
|
||||||
|
|
||||||
Start the server on the machine with the remote gameport:
|
Start the server on the machine with the remote gameport:
|
||||||
JsServer <host> <port>
|
JsServer <host> <port>
|
||||||
|
|
|
@ -46,7 +46,8 @@ effect : The effect to be used for this material. (default:
|
||||||
ambient, diffuse, specular, emissive, and shininess are copied into the
|
ambient, diffuse, specular, emissive, and shininess are copied into the
|
||||||
parameter section of the effect created for this material.
|
parameter section of the effect created for this material.
|
||||||
|
|
||||||
parameters : Additional parameters to be used in the effect. See README.effects for format information.
|
parameters : Additional parameters to be used in the effect. See README.effects
|
||||||
|
for format information.
|
||||||
|
|
||||||
wrapu : True if the texture should repeat horizontally over a surface, false if
|
wrapu : True if the texture should repeat horizontally over a surface, false if
|
||||||
it should not repeat (default: true).
|
it should not repeat (default: true).
|
||||||
|
@ -83,8 +84,8 @@ solid : Whether the surface is solid from an FDM perspective. If it is not
|
||||||
|
|
||||||
friction-factor : The friction factor for that material. The normalized
|
friction-factor : The friction factor for that material. The normalized
|
||||||
factor can be used by a FDM to post-multiply all contact friction forces
|
factor can be used by a FDM to post-multiply all contact friction forces
|
||||||
with that factor. That is the more slippery a material is the smaller this
|
with that factor. That is the more slippery a material is the smaller
|
||||||
value should be. (default: 1.0 for Dry concrete/Asphalt).
|
this value should be. (default: 1.0 for Dry concrete/Asphalt).
|
||||||
|
|
||||||
rolling-friction : the gear rolling rolling-friction coefficient for this
|
rolling-friction : the gear rolling rolling-friction coefficient for this
|
||||||
particular material. (default: 0.02 for Dry concrete/Asphalt).
|
particular material. (default: 0.02 for Dry concrete/Asphalt).
|
||||||
|
@ -183,29 +184,29 @@ Random Buildings
|
||||||
|
|
||||||
Random Buildings come in three sizes, with individual constraints.
|
Random Buildings come in three sizes, with individual constraints.
|
||||||
|
|
||||||
Small buildings. These have different textures on the sides compared to the front and back.
|
Small buildings. These have different textures on the sides compared to the front
|
||||||
Small buildings are never deeper than they are wide.
|
and back. Small buildings are never deeper than they are wide.
|
||||||
|
|
||||||
Medium buildings, which are never taller than they are wide.
|
Medium buildings, which are never taller than they are wide.
|
||||||
|
|
||||||
Large buildings. There are no constraints on their width, depth or height.
|
Large buildings. There are no constraints on their width, depth or height.
|
||||||
|
|
||||||
building-coverage : The coverage of random buildings in areas marked for random objects in
|
building-coverage : The coverage of random buildings in areas marked for random
|
||||||
m^2. A lower number means a higher density of buildings. A value of
|
objects in m^2. A lower number means a higher density of buildings. A
|
||||||
0 indicates no buildings. May be masked by the blue channel of an
|
value of 0 indicates no buildings. May be masked by the blue channel of an
|
||||||
object-mask. (default: 0)
|
object-mask. (default: 0)
|
||||||
|
|
||||||
building-spacing-m : The minimum spacing between random buildings and other buildings
|
building-spacing-m : The minimum spacing between random buildings and other buildings
|
||||||
or random objects. This helps avoid objects being placed on top of each other.
|
or random objects. This helps avoid objects being placed on top of each
|
||||||
(default: 5)
|
other. (default: 5)
|
||||||
|
|
||||||
building-small-ratio: Ratio of small buildings. These buildings are 1-3 stories
|
building-small-ratio: Ratio of small buildings. These buildings are 1-3 stories
|
||||||
in height, and may have a pitched roof. Fraction of small buildings is
|
in height, and may have a pitched roof. Fraction of small buildings is
|
||||||
(<building-ratio-small> / (<building-ratio-small> + <building-ratio-medium>
|
(<building-ratio-small> / (<building-ratio-small> + <building-ratio-medium>
|
||||||
+ <building-ratio-large>). (default: 0.8)
|
+ <building-ratio-large>). (default: 0.8)
|
||||||
|
|
||||||
building-medium-ratio : Ratio of medium buildings. These buildings are 3-6 stories in
|
building-medium-ratio : Ratio of medium buildings. These buildings are 3-6 stories
|
||||||
height, and have a flat roof. (default: 0.15)
|
in height, and have a flat roof. (default: 0.15)
|
||||||
|
|
||||||
building-large-ratio : Ratio of large buildings. These buildings are 5-10 stories in
|
building-large-ratio : Ratio of large buildings. These buildings are 5-10 stories in
|
||||||
height, and have a flat roof. (default 0.05)
|
height, and have a flat roof. (default 0.05)
|
||||||
|
@ -214,35 +215,37 @@ building-small-pitch : Fraction of small buildings with pitched roofs. (default
|
||||||
building-medium-pitch : Fraction of small buildings with pitched roofs. (default 0.2)
|
building-medium-pitch : Fraction of small buildings with pitched roofs. (default 0.2)
|
||||||
building-large-pitch : Fraction of small buildings with pitched roofs. (default 0.1)
|
building-large-pitch : Fraction of small buildings with pitched roofs. (default 0.1)
|
||||||
|
|
||||||
building-small-min-floors : Minimum number of floors for a small building. (default 1)
|
building-small-min-floors : Min. number of floors for a small building. (default 1)
|
||||||
building-small-max-floors : Maximum number of floors for a small building. (default 3)
|
building-small-max-floors : Max. number of floors for a small building. (default 3)
|
||||||
|
|
||||||
building-medium-min-floors : Minimum number of floors for a medium building. (default 3)
|
building-medium-min-floors : Min. number of floors for a medium building. (default 3)
|
||||||
building-medium-max-floors : Maximum number of floors for a medium building. (default 8)
|
building-medium-max-floors : Max. number of floors for a medium building. (default 8)
|
||||||
|
|
||||||
building-large-min-floors : Minimum number of floors for a medium building. (default 5)
|
building-large-min-floors : Min. number of floors for a medium building. (default 5)
|
||||||
building-large-max-floors : Maximum number of floors for a medium building. (default 20)
|
building-large-max-floors : Max. number of floors for a medium building. (default 20)
|
||||||
|
|
||||||
building-small-min-width-m : Minimum width of small buildings. (default 15)
|
building-small-min-width-m : Min. width of small buildings. (default 15)
|
||||||
building-small-max-width-m : Maximum width of small buildings. (default 60)
|
building-small-max-width-m : Max. width of small buildings. (default 60)
|
||||||
building-small-min-depth-m : Minimum depth of small buildings. (default 10)
|
building-small-min-depth-m : Min. depth of small buildings. (default 10)
|
||||||
building-small-max-depth-m : Maximum depty of small buildings. (default 20)
|
building-small-max-depth-m : Max. depth of small buildings. (default 20)
|
||||||
|
|
||||||
building-medium-min-width-m : Minimum width of medium buildings. (default 25)
|
building-medium-min-width-m : Min. width of medium buildings. (default 25)
|
||||||
building-medium-max-width-m : Maximum width of medium buildings. (default 50)
|
building-medium-max-width-m : Max. width of medium buildings. (default 50)
|
||||||
building-medium-min-depth-m : Minimum depth of medium buildings. (default 20)
|
building-medium-min-depth-m : Min. depth of medium buildings. (default 20)
|
||||||
building-medium-max-depth-m : Maximum depty of medium buildings. (default 50)
|
building-medium-max-depth-m : Max. depth of medium buildings. (default 50)
|
||||||
|
|
||||||
building-large-min-width-m : Minimum width of large buildings. (default 50)
|
building-large-min-width-m : Min. width of large buildings. (default 50)
|
||||||
building-large-max-width-m : Maximum width of large buildings. (default 75)
|
building-large-max-width-m : Max. width of large buildings. (default 75)
|
||||||
building-large-min-depth-m : Minimum depth of large buildings. (default 50)
|
building-large-min-depth-m : Min. depth of large buildings. (default 50)
|
||||||
building-large-max-depth-m : Maximum depty of large buildings. (default 75)
|
building-large-max-depth-m : Max. depth of large buildings. (default 75)
|
||||||
|
|
||||||
building-texture : The texture used for all buildings. See Docs/buildings.png for details.
|
building-texture : The texture used for all buildings. See Docs/buildings.png for
|
||||||
(default Texture/buildings.png)
|
details. (default Texture/buildings.png)
|
||||||
|
|
||||||
building-lightmap: Emissive texture for all buildings, which is faded in at night to provide
|
building-lightmap: Emissive texture for all buildings, which is faded in at night to
|
||||||
illusion of lit windows. Same texture coordinates and format at building-texture above.
|
provide illusion of lit windows. Same texture coordinates and
|
||||||
|
format at building-texture above.
|
||||||
|
|
||||||
building-range-m: Range at which all buildings are visible. Beyond this point fewer and fewer
|
building-range-m: Range at which all buildings are visible. Beyond this point fewer
|
||||||
buildings are rendered, with no buildings rendered at 2*building-range-m (default 10000)
|
and fewer buildings are rendered, with no buildings rendered at
|
||||||
|
2*building-range-m (default 10000)
|
||||||
|
|
|
@ -120,6 +120,6 @@ control-fdm-atmosphere properties.
|
||||||
Further reading (a must if you have a problem):
|
Further reading (a must if you have a problem):
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
[1] The flightgear server homepage <http://fgms.sourceforge.net/>
|
[1] The flightgear server homepage <http://fgms.sourceforge.net/>
|
||||||
[2] The flightgear wiki multiplayer howto <http://wiki.flightgear.org/index.php/Howto:_Multiplayer>
|
[2] The wiki howto <http://wiki.flightgear.org/index.php/Howto:_Multiplayer>
|
||||||
[3] If everything else fails, ask for help on
|
[3] If everything else fails, ask for help on
|
||||||
the IRC channel #flightgear on irc.flightgear.org
|
the IRC channel #flightgear on irc.flightgear.org
|
||||||
|
|
|
@ -44,10 +44,10 @@ For the anxious reader, here is a complete example of a text node:
|
||||||
<!-- A number from a property -->
|
<!-- A number from a property -->
|
||||||
<type type="string">number-value</type>
|
<type type="string">number-value</type>
|
||||||
<property type="string">position/latitude-deg</property>
|
<property type="string">position/latitude-deg</property>
|
||||||
<factor type="double">1.0</factor> <!-- optional, used to scale the propertie's value -->
|
<factor type="double">1.0</factor> <!-- optional, scale the propertie's value -->
|
||||||
<offset type="double">0.0</offset> <!-- optional, used to shift the propertie's value -->
|
<offset type="double">0.0</offset> <!-- optional, shift the propertie's value -->
|
||||||
<format type="string">%5.2lf</format> <!-- the printf() format to display the value -->
|
<format type="string">%5.2lf</format> <!-- printf() format to display -->
|
||||||
<truncate type="bool">false</truncate> <!-- set to true to truncate to an integer value -->
|
<truncate type="bool">false</truncate> <!-- truncate to an integer value -->
|
||||||
|
|
||||||
<layout>left-to-right</layout> <!-- default -->
|
<layout>left-to-right</layout> <!-- default -->
|
||||||
<!--
|
<!--
|
||||||
|
@ -56,7 +56,7 @@ For the anxious reader, here is a complete example of a text node:
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<draw-text type="bool">true</draw-text> <!-- draw the text itself -->
|
<draw-text type="bool">true</draw-text> <!-- draw the text itself -->
|
||||||
<draw-alignment type="bool">false</draw-alignment> <!-- draw a crosshair at the object center -->
|
<draw-alignment type="bool">false</draw-alignment> <!-- draw crosshair at object center -->
|
||||||
<draw-boundingbox type="bool">false</draw-boundingbox> <!-- draw a bounding box -->
|
<draw-boundingbox type="bool">false</draw-boundingbox> <!-- draw a bounding box -->
|
||||||
|
|
||||||
<font>led.txf</font> <!-- The font file name, relative to data/Fonts -->
|
<font>led.txf</font> <!-- The font file name, relative to data/Fonts -->
|
||||||
|
@ -95,9 +95,9 @@ For the anxious reader, here is a complete example of a text node:
|
||||||
|
|
||||||
</text>
|
</text>
|
||||||
|
|
||||||
The <text/> node may appear within <model/> or <PropertyList/> nodes. If you place your text directly within
|
The <text/> node may appear within <model/> or <PropertyList/> nodes. If you place
|
||||||
your model file, use <text></text> nodes. You can also put your <text> configuration into a separate file
|
your text directly within your model file, use <text></text> nodes. You can also put
|
||||||
using the well known include directive:
|
your <text> configuration into a separate file using the well known include directive:
|
||||||
|
|
||||||
Your model.xml file:
|
Your model.xml file:
|
||||||
<model>
|
<model>
|
||||||
|
@ -114,5 +114,6 @@ Your HelloWorld.xml:
|
||||||
<!-- etc. - you get the idea -->
|
<!-- etc. - you get the idea -->
|
||||||
</PropertyList>
|
</PropertyList>
|
||||||
|
|
||||||
Animation can be applied to text nodes like any other object. To give your text some color, use the material
|
Animation can be applied to text nodes like any other object. To give your text some
|
||||||
animation, or translate, rotate, scale or spin your text as you like.
|
color, use the material animation, or translate, rotate, scale or spin your text as
|
||||||
|
you like.
|
||||||
|
|
|
@ -205,11 +205,11 @@ Example:
|
||||||
|
|
||||||
Syntax:
|
Syntax:
|
||||||
|
|
||||||
OBJECT_SHARED <object-path> <longitude> <latitude> <elevation-m> <heading-deg> <pitch-deg> <roll-deg>
|
OBJECT_SHARED <object-path> <lon> <lat> <elev-m> <hdg-deg> <pitch-deg> <roll-deg>
|
||||||
|
|
||||||
The <object-path> is relative to the data directory (FG_ROOT).
|
The <object-path> is relative to the data directory (FG_ROOT).
|
||||||
<elevation-m> is in meter and relative to mean sea-level (in the fgfs world).
|
<elev-m> is in meter and relative to mean sea-level (in the fgfs world).
|
||||||
<heading-deg> is in degree, counter-clockwise with North being 0.0. Note
|
<hdg-deg> is in degree, counter-clockwise with North being 0.0. Note
|
||||||
that this differs from about every other place in FlightGear, most notably
|
that this differs from about every other place in FlightGear, most notably
|
||||||
the /orientation/heading-deg entry in the property system, which is clockwise.
|
the /orientation/heading-deg entry in the property system, which is clockwise.
|
||||||
<pitch-deg> and <roll-deg> are in degree and optional.
|
<pitch-deg> and <roll-deg> are in degree and optional.
|
||||||
|
|
|
@ -96,5 +96,7 @@ snd_page_alloc 11396 2 snd_intel8x0,snd_pcm
|
||||||
snd_mpu401_uart 7936 1 snd_intel8x0
|
snd_mpu401_uart 7936 1 snd_intel8x0
|
||||||
snd_rawmidi 24832 1 snd_mpu401_uart
|
snd_rawmidi 24832 1 snd_mpu401_uart
|
||||||
snd_seq_device 8324 1 snd_rawmidi
|
snd_seq_device 8324 1 snd_rawmidi
|
||||||
snd 53892 9 snd_pcm_oss,snd_mixer_oss,snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,snd_seq_device
|
snd 53892 9 snd_pcm_oss,snd_mixer_oss,snd_intel8x0,
|
||||||
|
snd_ac97_codec,snd_pcm,snd_timer,snd_mpu401_uart,
|
||||||
|
snd_rawmidi,snd_seq_device
|
||||||
soundcore 10208 2 snd
|
soundcore 10208 2 snd
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
<!-- Submodels are objects which can be dropped or launched from the user
|
<!--
|
||||||
|
|
||||||
|
Submodels are objects which can be dropped or launched from the user
|
||||||
aircraft. The trigger is a boolean property, which you define, which when
|
aircraft. The trigger is a boolean property, which you define, which when
|
||||||
"true" causes the submodel to be released/launched.
|
"true" causes the submodel to be released/launched.
|
||||||
|
|
||||||
|
@ -36,56 +38,80 @@
|
||||||
|
|
||||||
<name> The name of the submodel.
|
<name> The name of the submodel.
|
||||||
<model> The path to the visual model.
|
<model> The path to the visual model.
|
||||||
<trigger> The property which will act as the trigger. If this tag is not included, the submodels will be released continuously, provided <count> is set to -1.
|
<trigger> The property which will act as the trigger. If this tag is not
|
||||||
|
included, the submodels will be released continuously, provided
|
||||||
|
<count> is set to -1.
|
||||||
<speed> Initial speed, in feet/sec, relative to user aircraft.
|
<speed> Initial speed, in feet/sec, relative to user aircraft.
|
||||||
<speed-prop> The property containing the Initial speed, in feet/sec, relative to user aircraft. If this path is found, <speed> will be overwritten.
|
<speed-prop> The property containing the Initial speed, in feet/sec, relative to
|
||||||
|
user aircraft. If this path is found, <speed> will be overwritten.
|
||||||
<repeat> Set "true" if you want multiple releases of this submodel.
|
<repeat> Set "true" if you want multiple releases of this submodel.
|
||||||
<delay> Time, in seconds, between repeated releases.
|
<delay> Time, in seconds, between repeated releases.
|
||||||
<count> Number of submodels available for multiple release.
|
<count> Number of submodels available for multiple release.
|
||||||
-1 defines an unlimited number.
|
-1 defines an unlimited number.
|
||||||
<slaved> If true, the submodel is slaved to the parent model.
|
<slaved> If true, the submodel is slaved to the parent model.
|
||||||
<x-offset> Submodel's initial fore/aft position (in feet), relative to user aircraft. Fore is positive.
|
<x-offset> Submodel's initial fore/aft position (in feet), relative to user
|
||||||
<y-offset> Submodel's initial left/right position (in feet), relative to user aircraft. Right is positive.
|
aircraft. Fore is positive.
|
||||||
<z-offset> Submodel's initial up/down position (in feet), relative to user aircraft. Up is positive.
|
<y-offset> Submodel's initial left/right position (in feet), relative to user
|
||||||
|
aircraft. Right is positive.
|
||||||
|
<z-offset> Submodel's initial up/down position (in feet), relative to user
|
||||||
|
aircraft. Up is positive.
|
||||||
<yaw-offset> Submodel's initial azimuth, in degrees, relative to user
|
<yaw-offset> Submodel's initial azimuth, in degrees, relative to user
|
||||||
aircraft'snose. Right is positive.
|
aircraft'snose. Right is positive.
|
||||||
<pitch-offset> Submodel's initial elevation, in degrees, relative to user aircraft's pitch. Up is positive.
|
<pitch-offset> Submodel's initial elevation, in degrees, relative to user aircraft's
|
||||||
|
pitch. Up is positive.
|
||||||
<life> Life span in seconds.
|
<life> Life span in seconds.
|
||||||
Default is 900.0.
|
Default is 900.0.
|
||||||
<buoyancy> In ft/sec/sec. Works opposite acceleration of gravity.
|
<buoyancy> In ft/sec/sec. Works opposite acceleration of gravity.
|
||||||
For example, if set to 32 the submodel will feel no
|
For example, if set to 32 the submodel will feel no
|
||||||
gravity. If greater than 32 the object will rise.
|
gravity. If greater than 32 the object will rise.
|
||||||
Default is 0.
|
Default is 0.
|
||||||
<wind> Set to true if you want the submodel to react to the wind. Default is "false".
|
<wind> Set to true if you want the submodel to react to the wind. Default
|
||||||
<cd> The Coeffient of Drag. Varies with submodel shape - 0.295 for a bullet, 0.045 for an airfoil. Enter an appropriate value. Defaults to 0.295.
|
is "false".
|
||||||
<random> When this is true the Cd is varied by +- 5%. Useful for smoke or contrails.
|
<cd> The Coeffient of Drag. Varies with submodel shape - 0.295 for a
|
||||||
<eda> Effective drag area (sq ft). Usually the cross-sectional area of the submodel normal to the airflow.
|
bullet, 0.045 for an airfoil. Enter an appropriate value. Defaults to
|
||||||
<weight> The weight of the submodel (lbs). NOT set to 0 on submodel release. You may wish to set this value to 0 by means of key bindings or Nasal script.
|
0.295.
|
||||||
Defaults to 0.25.
|
<random> When this is true the Cd is varied by +- 5%. Useful for smoke or
|
||||||
<contents> The path to the contents of a submodel. The contents must be in lbs. Intended for use with drop tanks. The property value will be set to 0 on release of the submodel: do not also set to 0 elsewhere e.g. in key bindings. Defaults to 0.
|
contrails.
|
||||||
<random> Varies CD by +- 10%, initial azimuth by +- 10 degs, and life by <randomness>
|
<eda> Effective drag area (sq ft). Usually the cross-sectional area of the
|
||||||
<randomness> If <random> is true, <randomness> is applied to <life>. 0 > Value < 1 are valid.
|
submodel normal to the airflow.
|
||||||
Defaults to 0.5.
|
<weight> The weight of the submodel (lbs). NOT set to 0 on submodel release.
|
||||||
|
You may wish to set this value to 0 by means of key bindings or Nasal
|
||||||
|
script. Defaults to 0.25.
|
||||||
|
<contents> The path to the contents of a submodel. The contents must be in lbs.
|
||||||
|
Intended for use with drop tanks. The property value will be set to
|
||||||
|
0 on release of the submodel: do not also set to 0 elsewhere e.g. in
|
||||||
|
key bindings. Defaults to 0.
|
||||||
|
<random> Varies CD by +- 10%, initial azimuth by +- 10 degs, and life by
|
||||||
|
<randomness>
|
||||||
|
<randomness> If <random> is true, <randomness> is applied to <life>. 0 > Value < 1
|
||||||
|
are valid. Defaults to 0.5.
|
||||||
<no-roll> If true the submodel does not roll.
|
<no-roll> If true the submodel does not roll.
|
||||||
<impact> If true, the impact location (lat/lon) on the terrain is calculated. The Material
|
<impact> If true, the impact location (lat/lon) on the terrain is calculated.
|
||||||
(e.g Grass)of the terrain, load resistance, and impact velocity. Altitude agl is calculated.
|
The Material (e.g Grass)of the terrain, load resistance, and impact
|
||||||
<collision> If true, collisions with other objects is tested. If a collision is detected then
|
velocity. Altitude agl is calculated.
|
||||||
the position data are written to the "Report Node".
|
<collision> If true, collisions with other objects is tested. If a collision is
|
||||||
<fuze-range> Used in detecting collisions. The distance in feet between an object and a submodel
|
detected then the position data are written to the "Report Node".
|
||||||
at which a collision is deemed to have occurred.
|
<fuze-range> Used in detecting collisions. The distance in feet between an object
|
||||||
<expiry> If true, the current position of the submodel is written to the "Report Node" when the submodel life expires.
|
and a submodel at which a collision is deemed to have occurred.
|
||||||
<impact-reports> Defines a "Report Node". When an impact happens, then the path of the submodel will be written to this node.
|
<expiry> If true, the current position of the submodel is written to the
|
||||||
An attached listener function can evaluate the impact properties. If unset,
|
"Report Node" when the submodel life expires.
|
||||||
reports go to /ai/models/model-impact.
|
<impact-reports> Defines a "Report Node". When an impact happens, then the path of
|
||||||
|
the submodel will be written to this node. An attached listener
|
||||||
|
function can evaluate the impact properties. If unset, reports go to
|
||||||
|
/ai/models/model-impact.
|
||||||
|
|
||||||
***** experimental ****
|
***** experimental ****
|
||||||
<external-force> If true the submodel is subjected to an external force<force-path> A string describing the property where the magnitude, azimuth and elevation of the external force is to be found. The following child properties are instantiated:
|
|
||||||
~/force-lb"
|
<external-force> If true the submodel is subjected to an external force
|
||||||
|
<force-path> A string describing the property where the magnitude, azimuth and
|
||||||
|
elevation of the external force are to be found. The following child
|
||||||
|
properties are instantiated:
|
||||||
|
~/force-lb
|
||||||
~/force-azimuth-deg
|
~/force-azimuth-deg
|
||||||
~/force-elevation-deg
|
~/force-elevation-deg
|
||||||
|
|
||||||
You will have to set these values by some means (Nasal script etc.) to make use of this utility
|
You will have to set these values by some means (Nasal script etc.) to make use of this
|
||||||
|
utility.
|
||||||
|
|
||||||
<PropertyList>
|
<PropertyList>
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,8 @@ around each tutorial. This is then included like so:
|
||||||
<tutorials include="foo-tutorials.xml"/>
|
<tutorials include="foo-tutorials.xml"/>
|
||||||
</sim>
|
</sim>
|
||||||
|
|
||||||
|
Finally, tutorials are automatically generated from any valid checklists
|
||||||
|
on startup. See README.checklists for details.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
== TUTORIAL STRUCTURE =========================================================
|
== TUTORIAL STRUCTURE =========================================================
|
||||||
|
@ -42,8 +39,10 @@ in detail below:
|
||||||
"morning", "noon", "afternoon",
|
"morning", "noon", "afternoon",
|
||||||
"evening", "dusk", "midnight", "real"
|
"evening", "dusk", "midnight", "real"
|
||||||
|
|
||||||
<step-time> optional; period between each step being executed. Default 5
|
<step-time> optional; period between each step being executed.
|
||||||
<exit-time> optional; period between exit/abort conditions being checked. Default 1
|
Default 5
|
||||||
|
<exit-time> optional; period between exit/abort conditions being
|
||||||
|
checked. Default 1
|
||||||
|
|
||||||
<nasal>
|
<nasal>
|
||||||
... optional; initial Nasal code; see below
|
... optional; initial Nasal code; see below
|
||||||
|
|
|
@ -117,21 +117,24 @@ We have a Base class - Hud Instrument Item.
|
||||||
We derive two more base classes - Instrument Scale and Dual Instrument Item from this.
|
We derive two more base classes - Instrument Scale and Dual Instrument Item from this.
|
||||||
(This implementation owes its existence to all those who wrote the HUD code for 0.6.1)
|
(This implementation owes its existence to all those who wrote the HUD code for 0.6.1)
|
||||||
|
|
||||||
The Hud Instrument Label is an instantiable class derived from Hud Instrument Item - for
|
The Hud Instrument Label is an instantiable class derived from Hud Instrument Item -
|
||||||
displaying alphanumeric labels (altitude, velocity, Mach no and/or anything else as long you
|
for displaying alphanumeric labels (altitude, velocity, Mach no and/or anything else
|
||||||
have a call back function to pass the value using the property 'data_source').
|
as long you have a call back function to pass the value using the property
|
||||||
|
'data_source').
|
||||||
|
|
||||||
The Hud Card is an instantiable class derived from Instrument scale - for displaying
|
The Hud Card is an instantiable class derived from Instrument scale - for displaying
|
||||||
tapes and gauges (single variable display, for displaying aoa, g's, vsi, elevator_posn, etc.).
|
tapes and gauges (single variable display, for displaying aoa, g's, vsi,
|
||||||
|
elevator_posn, etc.).
|
||||||
|
|
||||||
The Hud Ladder is an instantiable class derived from Dual Instrument Item - for displaying
|
The Hud Ladder is an instantiable class derived from Dual Instrument Item - for
|
||||||
pitch reference ladder or climb/dive ladder (two variable display, for displaying two types of
|
displaying pitch reference ladder or climb/dive ladder (two variable display, for
|
||||||
ladders, the pitch reference ladder or the climb/dive ladder as defined by MIL-1787b).
|
displaying two types of ladders, the pitch reference ladder or the climb/dive ladder
|
||||||
|
as defined by MIL-1787b).
|
||||||
|
|
||||||
The fgTBI Instrument is an instantiable class derived from Dual Instrument scale again
|
The fgTBI Instrument is an instantiable class derived from Dual Instrument scale
|
||||||
- for display of Bank angle and Sideslip (two variable display, for display of TSI info, kept
|
again - for display of Bank angle and Sideslip (two variable display, for display
|
||||||
different from the two variable ladder object basically because of its totally different
|
of TSI info, kept different from the two variable ladder object basically because
|
||||||
draw member function).
|
of its totally different draw member function).
|
||||||
|
|
||||||
Most Hud instruments may be instantiated using above. It is proposed to provide all
|
Most Hud instruments may be instantiated using above. It is proposed to provide all
|
||||||
Hud objects as defined in MIL-STD-1797A, soon.
|
Hud objects as defined in MIL-STD-1797A, soon.
|
||||||
|
@ -146,9 +149,9 @@ y ------------ y+height
|
||||||
this defines the objects position centered about the centroid of above rectangle
|
this defines the objects position centered about the centroid of above rectangle
|
||||||
in HUD overlay plane (640x480) coordinates with 0,0 at bottom-left corner.
|
in HUD overlay plane (640x480) coordinates with 0,0 at bottom-left corner.
|
||||||
|
|
||||||
One more, pixels per degree in the ladder class represents the compression factor of the
|
One more, pixels per degree in the ladder class represents the compression factor of
|
||||||
pitch ladder. In case of conformal HUD (climb/dive ladder) it is <640/horizontal_fov>
|
the pitch ladder. In case of conformal HUD (climb/dive ladder) it is
|
||||||
or <480/vertical_fov>. In case of pitch reference ladder it is
|
<640/horizontal_fov> or <480/vertical_fov>. In case of pitch reference ladder it is
|
||||||
<your_no_of vertical_pixels/your_no_of_ladder_degrees>.
|
<your_no_of vertical_pixels/your_no_of_ladder_degrees>.
|
||||||
|
|
||||||
Example of Hud Ladder xml file.
|
Example of Hud Ladder xml file.
|
||||||
|
@ -164,8 +167,10 @@ Example of Hud Ladder xml file.
|
||||||
<width>120</width> <!-- x start + width = x end -->
|
<width>120</width> <!-- x start + width = x end -->
|
||||||
<height>180</height> <!-- y start + height = y end -->
|
<height>180</height> <!-- y start + height = y end -->
|
||||||
<compression_factor>2.68</compression_factor> <!-- Pixels per degree -->
|
<compression_factor>2.68</compression_factor> <!-- Pixels per degree -->
|
||||||
<loadfn>roll</loadfn> <!-- Name of the function to be called, here get_roll() is called provision made in Hud.cxx -->
|
<loadfn>roll</loadfn> <!-- Name of the function to be called, here
|
||||||
<loadfn1>pitch</loadfn1> <!-- Name of the function to be called, here get_pitch() is called -->
|
get_roll() is called provision made in Hud.cxx -->
|
||||||
|
<loadfn1>pitch</loadfn1> <!-- Name of the function to be called, here get_pitch()
|
||||||
|
is called -->
|
||||||
<span_units>45.0</span_units> <!-- Range of the Ladder seen at any instant -->
|
<span_units>45.0</span_units> <!-- Range of the Ladder seen at any instant -->
|
||||||
<division_units>10.0</division_units> <!-- Divisions -->
|
<division_units>10.0</division_units> <!-- Divisions -->
|
||||||
<screen_hole>70</screen_hole> <!-- Hole b/w the Ladder Bars -->
|
<screen_hole>70</screen_hole> <!-- Hole b/w the Ladder Bars -->
|
||||||
|
|
|
@ -142,9 +142,11 @@ New Style Example Top Level Panel Config:
|
||||||
<w>1024</w> <!-- virtual width -->
|
<w>1024</w> <!-- virtual width -->
|
||||||
<h>768</h> <!-- virtual height -->
|
<h>768</h> <!-- virtual height -->
|
||||||
<y-offset>-305</y-offset> <!-- hides the bottom part -->
|
<y-offset>-305</y-offset> <!-- hides the bottom part -->
|
||||||
<view-height>172</view-height> <!-- amount of overlap between 2D panel and 3D viewport -->
|
<view-height>172</view-height> <!-- amount of overlap between 2D panel
|
||||||
|
and 3D viewport -->
|
||||||
|
|
||||||
<instruments> <!-- from here down is where old and new styles break compatibility -->
|
<instruments> <!-- from here down is where old and new
|
||||||
|
styles break compatibility -->
|
||||||
|
|
||||||
<instrument include="../Instruments/clock.xml">
|
<instrument include="../Instruments/clock.xml">
|
||||||
<name>Chronometer</name> <!-- currently optional but strongly recommended -->
|
<name>Chronometer</name> <!-- currently optional but strongly recommended -->
|
||||||
|
@ -475,13 +477,14 @@ This example comes from the altimeter.xml
|
||||||
<w>8</w>
|
<w>8</w>
|
||||||
<h>56</h>
|
<h>56</h>
|
||||||
<transformations> <!-- begin defining transformations -->
|
<transformations> <!-- begin defining transformations -->
|
||||||
<transformation> <!-- start definition of transformation that drives the needle -->
|
<transformation> <!-- start definition of
|
||||||
|
transformation that drives the needle -->
|
||||||
<type>rotation</type>
|
<type>rotation</type>
|
||||||
<property>/steam/altitude</property> <!-- bind it to a property -->
|
<property>/steam/altitude</property> <!-- bind it to a property -->
|
||||||
<max>100000.0</max> <!-- upper limit of instrument -->
|
<max>100000.0</max> <!-- upper limit of instrument -->
|
||||||
<scale>0.36</scale> <!-- once around == 1000 ft -->
|
<scale>0.36</scale> <!-- once around == 1000 ft -->
|
||||||
</transformation> <!-- close this transformation -->
|
</transformation> <!-- close this transformation -->
|
||||||
<transformation> <!-- this one shifts the fulcrum of the needle -->
|
<transformation> <!-- shift the fulcrum of the needle -->
|
||||||
<type>y-shift</type> <!-- y-shift relative to needle -->
|
<type>y-shift</type> <!-- y-shift relative to needle -->
|
||||||
<offset>24.0</offset> <!-- amount of shift -->
|
<offset>24.0</offset> <!-- amount of shift -->
|
||||||
</transformation>
|
</transformation>
|
||||||
|
@ -570,7 +573,7 @@ These examples come from the radio stack:
|
||||||
<increment>-0.05</increment> <!-- amount of adjustment per mouse click -->
|
<increment>-0.05</increment> <!-- amount of adjustment per mouse click -->
|
||||||
<min>108.0</min> <!-- lower range -->
|
<min>108.0</min> <!-- lower range -->
|
||||||
<max>117.95</max> <!-- upper range -->
|
<max>117.95</max> <!-- upper range -->
|
||||||
<wrap>1</wrap> <!-- boolean value -- value wraps around when it hits bounds -->
|
<wrap>1</wrap> <!-- value wraps around when it hits bounds -->
|
||||||
</action>
|
</action>
|
||||||
<action>
|
<action>
|
||||||
<name>swap nav frequencies</name>
|
<name>swap nav frequencies</name>
|
||||||
|
@ -580,8 +583,8 @@ These examples come from the radio stack:
|
||||||
<y>-32</y>
|
<y>-32</y>
|
||||||
<w>32</w>
|
<w>32</w>
|
||||||
<h>32</h>
|
<h>32</h>
|
||||||
<property1>/radios/nav1/frequencies/selected</property1> <!-- properties to toggle between -->
|
<property1>/radios/nav1/frequencies/selected</property1> <!-- properties to
|
||||||
<property2>/radios/nav1/frequencies/standby</property2>
|
<property2>/radios/nav1/frequencies/standby</property2> toggle between -->
|
||||||
</action>
|
</action>
|
||||||
<action>
|
<action>
|
||||||
<name>ident volume on/off</name>
|
<name>ident volume on/off</name>
|
||||||
|
@ -591,11 +594,13 @@ These examples come from the radio stack:
|
||||||
<y>-24</y>
|
<y>-24</y>
|
||||||
<w>16</w>
|
<w>16</w>
|
||||||
<h>16</h>
|
<h>16</h>
|
||||||
<property>/radios/nav1/ident</property> <!-- this property is for Morse code identification of nav beacons -->
|
<property>/radios/nav1/ident</property> <!-- Morse code ID of nav beacons -->
|
||||||
<increment>1.0</increment> <!-- the increment equals the max value so this toggles on/off -->
|
<increment>1.0</increment> <!-- the increment equals the max value
|
||||||
|
so this toggles on/off -->
|
||||||
<min>0</min>
|
<min>0</min>
|
||||||
<max>1</max>
|
<max>1</max>
|
||||||
<wrap>1</wrap> <!-- a shortcut to avoid having separate actions for on/off -->
|
<wrap>1</wrap> <!-- a shortcut to avoid having separate
|
||||||
|
actions for on/off -->
|
||||||
</action>
|
</action>
|
||||||
</actions>
|
</actions>
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,8 @@ Document started 27/01/2008 by Tiago Gusmão
|
||||||
Updated 02/02/2008 to reflect syntax changes
|
Updated 02/02/2008 to reflect syntax changes
|
||||||
Updated 03/02/2008 to add trails (connected particles)
|
Updated 03/02/2008 to add trails (connected particles)
|
||||||
|
|
||||||
This is a short specification/tutorial to define particle systems in FlightGear using XML
|
This is a short specification/tutorial to define particle systems in
|
||||||
|
FlightGear using XML
|
||||||
|
|
||||||
Meaningless example (what i had accumulated due to tests):
|
Meaningless example (what i had accumulated due to tests):
|
||||||
|
|
||||||
|
@ -132,10 +133,12 @@ Note:
|
||||||
offset (result = (prop*factor)+offset ) in the usual way
|
offset (result = (prop*factor)+offset ) in the usual way
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<particlesystem> = the base tag
|
<particlesystem> = the base tag
|
||||||
<type>string</type> can be "normal" or "trail", normal is the usual quad particles, trail is a string of connected line shapes by default.
|
<type>string</type> = can be "normal" or "trail", normal is the usual quad
|
||||||
<offsets> = this places the source of the particles (the emitter) in relation to the perhaps already offset model (see model-howto.html for details)
|
particles, trail is a string of connected line shapes
|
||||||
|
by default.
|
||||||
|
<offsets> = this places the source of the particles (the emitter) in relation
|
||||||
|
to the perhaps already offset model (see model-howto.html for details)
|
||||||
<x-m>float</x-m>
|
<x-m>float</x-m>
|
||||||
<y-m>float</y-m>
|
<y-m>float</y-m>
|
||||||
<z-m>float</z-m>
|
<z-m>float</z-m>
|
||||||
|
@ -143,21 +146,30 @@ offset (result = (prop*factor)+offset ) in the usual way
|
||||||
<roll-deg>float</roll-deg>
|
<roll-deg>float</roll-deg>
|
||||||
<heading-deg>float</heading-deg>
|
<heading-deg>float</heading-deg>
|
||||||
</offsets>
|
</offsets>
|
||||||
<condition> =a typical condition that if not true stops particles from being emitted (PPS=0)
|
<condition> = a typical condition that if not true stops particles from being
|
||||||
....
|
.... emitted (PPS=0)
|
||||||
</condition>
|
</condition>
|
||||||
<name>string</name> = the name of the particle system (so it can be referenced by normal animations)
|
<name>string</name> = the name of the particle system (so it can be referenced
|
||||||
<attach>string</attach> = can be "world" or "local". "world means the particles aren't "physically linked" to the model (necessary for use outside moving models), "local" means the opposite (can be used for static objects or inside moving objects)
|
by normal animations)
|
||||||
|
<attach>string</attach> = can be "world" or "local". "world means the particles
|
||||||
|
aren't "physically linked" to the model (necessary for
|
||||||
|
use outside moving models), "local" means the opposite
|
||||||
|
(can be used for static objects or inside moving objects)
|
||||||
<texture>string</texture> = the texture path relative to the XML file location
|
<texture>string</texture> = the texture path relative to the XML file location
|
||||||
<emissive>bool</emissive> = self-explanatory
|
<emissive>bool</emissive> = self-explanatory
|
||||||
<lighting>bool</lighting> = yet to be tested, but seems obvious
|
<lighting>bool</lighting> = yet to be tested, but seems obvious
|
||||||
<align>string</align> = can be "billboard" or "fixed"
|
<align>string</align> = can be "billboard" or "fixed"
|
||||||
<placer> = where particles are born
|
<placer> = where particles are born
|
||||||
<type>string</type> = can be "sector" (inside a circle), "segments"(user-defined segments) and "point" (default)
|
<type>string</type> = can be "sector" (inside a circle), "segments"(user-defined
|
||||||
*<radius-min-m>float</radius-min-m> = only for sector, inner radius at which particles appear
|
segments) and "point" (default)
|
||||||
*<radius-max-m>float</radius-max-m> = only for sector, outer radius at which particles appear
|
*<radius-min-m>float</radius-min-m> = only for sector, inner radius at which
|
||||||
*<phi-min-deg>float</phi-min-deg> = only for sector, starting angle of the slide at which particles appear
|
particles appear
|
||||||
*<phi-max-deg>float</phi-max-deg> = only for sector, ending angle of the slide at which particles appear
|
*<radius-max-m>float</radius-max-m> = only for sector, outer radius at which
|
||||||
|
particles appear
|
||||||
|
*<phi-min-deg>float</phi-min-deg> = only for sector, starting angle of the
|
||||||
|
slide at which particles appear
|
||||||
|
*<phi-max-deg>float</phi-max-deg> = only for sector, ending angle of the slide
|
||||||
|
at which particles appear
|
||||||
<segments> = only for segments, encloses sequential points that form segments
|
<segments> = only for segments, encloses sequential points that form segments
|
||||||
<vertex> = specifies one point, put as many as you want
|
<vertex> = specifies one point, put as many as you want
|
||||||
<x-m>float</x-m>
|
<x-m>float</x-m>
|
||||||
|
@ -174,10 +186,12 @@ offset (result = (prop*factor)+offset ) in the usual way
|
||||||
*<theta-min-deg>float</theta-min-deg> = horizontal angle limits of the particle cone
|
*<theta-min-deg>float</theta-min-deg> = horizontal angle limits of the particle cone
|
||||||
*<theta-max-deg>float</theta-max-deg>
|
*<theta-max-deg>float</theta-max-deg>
|
||||||
*<phi-min-deg>float</phi-min-deg> = vertical angle limits of the particle cone
|
*<phi-min-deg>float</phi-min-deg> = vertical angle limits of the particle cone
|
||||||
*<phi-max-deg>float</phi-max-deg> for an illustration of theta/phi see http://www.cs.clemson.edu/~malloy/courses/3dgames-2007/tutor/web/particles/particles.html
|
*<phi-max-deg>float</phi-max-deg> for an illustration of theta/phi see
|
||||||
|
http://www.cs.clemson.edu/~malloy/courses/3dgames-2007/tutor/web/particles/particles.html
|
||||||
<speed-mps> = the scalar velocity (meter per second)
|
<speed-mps> = the scalar velocity (meter per second)
|
||||||
<VALUEORPROP/> = see note
|
<VALUEORPROP/> = see note
|
||||||
*<spread> the "tolerance" in each direction so values are in the range [value-spread, value+spread]
|
*<spread> = the "tolerance" in each direction so values are in the range
|
||||||
|
[value-spread, value+spread]
|
||||||
</speed-mps>
|
</speed-mps>
|
||||||
<rotation-speed> = the range of initial rotational speed of the particles
|
<rotation-speed> = the range of initial rotational speed of the particles
|
||||||
*<x-min-deg-sec>float</x-min-deg-sec>
|
*<x-min-deg-sec>float</x-min-deg-sec>
|
||||||
|
@ -191,7 +205,8 @@ offset (result = (prop*factor)+offset ) in the usual way
|
||||||
<counter>
|
<counter>
|
||||||
<particles-per-sec>
|
<particles-per-sec>
|
||||||
<VALUEORPROP/> = see note
|
<VALUEORPROP/> = see note
|
||||||
*<spread> the "tolerance" in each direction so values are in the range [value-spread, value+spread]
|
*<spread> = the "tolerance" in each direction so values are in the range
|
||||||
|
[value-spread, value+spread]
|
||||||
</particles-per-sec>
|
</particles-per-sec>
|
||||||
</counter>
|
</counter>
|
||||||
<particle> = defines the particle properties
|
<particle> = defines the particle properties
|
||||||
|
@ -220,23 +235,42 @@ offset (result = (prop*factor)+offset ) in the usual way
|
||||||
*<life-sec> = the time the particles will be alive, in seconds
|
*<life-sec> = the time the particles will be alive, in seconds
|
||||||
<VALUEORPROP/>
|
<VALUEORPROP/>
|
||||||
*</life-sec>
|
*</life-sec>
|
||||||
*<radius-m>float</radius-m> = each particles is physically treated as a sphere with this radius
|
*<radius-m>float</radius-m> = each particles is physically treated as a sphere
|
||||||
|
with this radius
|
||||||
*<mass-kg>float</mass-kg> = mass in KG
|
*<mass-kg>float</mass-kg> = mass in KG
|
||||||
</particle>
|
</particle>
|
||||||
<program> = defines external forces acting upon a particle
|
<program> = defines external forces acting upon a particle
|
||||||
<fluid>string<fluid> = can be "air" or "water"
|
<fluid>string<fluid> = can be "air" or "water"
|
||||||
<gravity>bool</gravity> = can be "true" or "false". uses standard gravity
|
<gravity>bool</gravity> = can be "true" or "false". uses standard gravity
|
||||||
<wind>bool</wind> = can be "true" or "false". uses user position wind (not the model position, but shouldn't be noticeable, you want to disabled it when using local attach)
|
<wind>bool</wind> = can be "true" or "false". uses user position wind (not the
|
||||||
|
model position, but shouldn't be noticeable, you want to
|
||||||
|
disabled it when using local attach)
|
||||||
</program>
|
</program>
|
||||||
</particles>
|
</particles>
|
||||||
|
|
||||||
Remarks:
|
Remarks:
|
||||||
Don't forget you can use existing animations with particles, so if you want to direct or translate the emitter, just use translate, rotate, spin and so on (other animations might have interesting effects too I guess)
|
* Don't forget you can use existing animations with particles, so if you want to
|
||||||
Particle XML should be compatible with plib, as the tags will be ignored (you might get some warning if you attach them to animations though)
|
direct or translate the emitter, just use translate, rotate, spin and so on
|
||||||
Try not to use a lot of particles in a way that fills the screen, that will demand lots of fill rate and hurt FPS
|
(other animations might have interesting effects too I guess)
|
||||||
If you don't use any properties nor conditions, your particle system doesn't need to use a callback a so it's slightly better on the CPU (mostly useful for static models)
|
|
||||||
If your particle lifetime is too big you might run out of particles temporarily (still being investigated)
|
|
||||||
Use mass and size(radius) to adjust the reaction to gravity and wind (mass/size = density)
|
|
||||||
Although at the moment severe graphical bugs can be seen in the trails, they are usable.
|
|
||||||
Consider your options correctly! You should consider giving them no initial velocity and most important, no spread, otherwise particles will race and the trail will fold. Start simple (no velocities and forces) and work your way up.
|
|
||||||
|
|
||||||
|
* Particle XML should be compatible with plib, as the tags will be ignored (you
|
||||||
|
might get some warning if you attach them to animations though)
|
||||||
|
|
||||||
|
* Try not to use a lot of particles in a way that fills the screen, that will demand
|
||||||
|
lots of fill rate and hurt FPS
|
||||||
|
|
||||||
|
* If you don't use any properties nor conditions, your particle system doesn't need
|
||||||
|
to use a callback a so it's slightly better on the CPU (mostly useful for static models)
|
||||||
|
|
||||||
|
* If your particle lifetime is too big you might run out of particles temporarily
|
||||||
|
(still being investigated)
|
||||||
|
|
||||||
|
* Use mass and size(radius) to adjust the reaction to gravity and wind
|
||||||
|
(mass/size = density)
|
||||||
|
|
||||||
|
* Although at the moment severe graphical bugs can be seen in the trails,
|
||||||
|
they are usable.
|
||||||
|
|
||||||
|
* Consider your options correctly! You should consider giving them no initial
|
||||||
|
velocity and most important, no spread, otherwise particles will race and the
|
||||||
|
trail will fold. Start simple (no velocities and forces) and work your way up.
|
||||||
|
|
Loading…
Reference in a new issue