The SEDRIS Data Representation Model
APPENDIX A - Classes Base Positional Light |
---|
An instance of this DRM class is a <Light Source> instance that radiates in all directions from a specified point in 3D space with a sphere of influence centred at that point, the radius of which is specified by the value of the radius field.
Only objects that are within the sphere of influence of a <Base Positional Light> instance can be affected by that <Base Positional Light> instance. Specific subclasses may further restrict the zone of influence to only a portion of the sphere.
The degree to which an object is affected in the zone of influence depends on the attenuation of the <Base Positional Light> instance, which depends on the values of its attenuation factor fields. If attenuation is not specified - that is, when constant_attenuation_factor = 1.0, linear_attenuation_factor = 0.0, and quadratic_attenuation_factor = 0.0 - the light ends abruptly at the edge of the sphere of influence. Otherwise, the light intensity components (ambient, diffuse, and specular) are attenuated by the reciprocal of the attenuation quadratic (a + bd + cd2), where a, b, c are the attenuation factor field values as noted in their footnotes, and d is the distance from the position of the <Base Positional Light> instance to the position on the DRM object for which the lighting model is being applied.
Consequently, the formula for the final attenuation factor is:
1.0
(a + bd + cd2)
See concrete subclasses for examples.
SE_Boolean | apply_to_children; | 4 |
---|---|---|
SE_Boolean | override_positional_lights; | 5 |
SE_Boolean | override_infinite_lights; | 6 |
SE_Boolean | active_light_value; | 7 |
SE_Float | radius; | 8 |
---|---|---|
SE_Long_Float | constant_attenuation_factor; | 9 |
SE_Long_Float | linear_attenuation_factor; | 10 |
SE_Long_Float | quadratic_attenuation_factor; | 11 |
For a <Light Source> instance that is a component of some <Aggregate Geometry> instance(s), apply_to_children provides a mechanism for limiting the scope of the <Light Source> instance. If apply_to_children is SE_TRUE, only <Primitive Geometry> instances in the component tree of those <Aggregate Geometry> instances are affected by the <Light Source> instance. If apply_to_children is SE_FALSE, the <Light Source> instance is not limited to the scope of those <Aggregate Geometry> instances and thus applies globally.
For a <Light Source> instance that is a component of some <Aggregate Geometry> instance, override_positional_lights provides a mechanism to indicate with a value of SE_TRUE that the effect of the <Light Source> instance overrides that of any <Base Positional Light> instances that would have otherwise applied to that <Aggregate Geometry> instance.
EXAMPLE This might be appropriate if the <Light Source> instance is so close to the affected <Geometry Representation> instance(s) that the effects of the <Base Positional Light> instances would be negligible.
If override_positional_lights = SE_FALSE, the effect of the <Light Source> instance is combined with that of any <Base Positional Light> instances that are already in effect.
For a <Light Source> instance that is a component of some <Aggregate Geometry> instance, override_infinite_lights provides a mechanism to indicate with a value of SE_TRUE that the effect of the <Light Source> instance overrides that of any <Infinite Light> instances that would have otherwise applied to that <Aggregate Geometry> instance. If override_infinite_lights = SE_FALSE, the effect of the <Light Source> instance is combined with that of any <Infinite Light> instances that are already in effect.
A value of SE_TRUE for the active_light_value field indicates that the light is on, while a value of SE_FALSE indicates that the light is off. For a <Light Source> instance with a <Light Source Control Link> component X, the value of the active_light_value field is obtained from X.
The radius field, which is specified in metres, together with the <Location 3D> component specifies the zone of influence of the <Base Positional Light> instance.
The constant_attenuation_factor field is the constant "a" in the attenuation quadratic (a + bd + cd2).
The linear_attenuation_factor field is the constant "b" in the attenuation quadratic (a + bd + cd2).
The quadratic_attenuation_factor field is the constant "c" in the attenuation quadratic (a + bd + cd2).
|