*ptr | Pointer to light source |
lsrc | Light source types |
Lighting calculation is controlled mainly by the direction of light and principle line of the polygon (principle line of the vertex) and the distance between the light and vertex (or representative point of the mode). Light irradiated to a polygon is executed basically at a light beam to principle line angle between 90 and 180 degrees, and is lighter nearer 180 degrees. When less than 90 degrees, light is not irradiated. Addtionally, it is weaker if the distance is very far. (However, parallel lighting is excluded.)
Only NJD_DIR_LIGHT|NJD_SIMPLE_LIGHT (BASIC model) is calculated between 0-180 degrees.
Types of light source (lsrc) are listed below.
BASIC Model : Corresponds to the njDrawObject() and njFastDrawObject() function types. (njFastDrawObject() type is only luminance.)
Single Light Source Models
Value | Meaning |
NJD_AMBIENT | Environment light source: Equally lighter on all surfaces. |
NJD_DIR_LIGHT | Parallel light source: Rather than distance, lightens in the direction specified by njSetLightDirection or the direction determined following execution of njRotateLightX matrix, etc. The light flag NJD_SIMPLE_LIGHT can also be added to this light source. |
NJD_POINT_LIGHT | Point light source: Light is irradiated from the point specified by njSetLightLocation or the point to which it is moved after execution of njTranslateLight matrix, etc. The light flags NJD_SIMPLE_LIGHT and NJD_BLOCK_LIGHT can also be added to this light source. |
NJD_SPOT_LIGHT | Spotlight: Light is irradiated from a cone interior provided by a specified light direction and position, the same as the parallel and point light sources, and by the angle specified by njSetLightAngle. The light flags NJD_SIMPLE_LIGHT and NJD_BLOCK_LIGHTcan be added to the spotlight. |
Compound Light Source Models
NJD_SPEC_DIR (NJD_SPEC_POINT) | Parallel light source with highlighting (point light source): Specula highlights lighten under the angle condition specified by njSetLightAngle. For others, it is the same as parallel lighting (point light source). The light flag NJD_SIMPLE_LIGHT can be added. (Only the point light source can specify NJD_BLOCK_LIGHT.) |
NJD_LAMBERT_DIR (NJD_LAMBERT_POINT) | LAMBERT model: Light is irradiated according to standard light source models including parallel (point) and environment lighting. The light flag NJD_SIMPLE_LIGHT can be added. (Only the point light source can specify NJD_BLOCK_LIGHT.) |
NJD_PHONG_DIR (NJD_PHONG_POINT) | Phong model: Light is irradiated according to the standard light source models including parallel (point), environment and specula lighting. The light flag NJD_SIMPLE_LIGHT can be added. (Only the point light source can specify NJD_BLOCK_LIGHT.) |
Other Flags
NJD_SIMPLE_LIGHT | In principle, the calculation should be simplified to make the light source calculation faster. However, quality may be influenced at times. Use the or-operator for set up, such as NJD_SPEC_POINT|NJD_SIMPLE_LIGHT. |
NJD_BLOCK_LIGHT | As the distance operation is executed at representative points rather than every vertex, the light source calculation should be faster. However, there may be a large influence on quality on a case-by-case basis. Depending on the model used, the expected effect may not be attained. Directions for use are the same as that for NJD_SIMPLE_LIGHT. |
User Set (Callback) Light
NJD_USER_LIGHT | Calls the light source function created by the user. |
CHUNK Model : Corresponds to the njCnkDrawObject function. Environment light is only for scenes (system).
NJD_SPEC_DIR (NJD_SPEC_POINT) | Parallel light source (point light source) with highlights: Specula highlights can be turned off by specula ignore flag (NJD_FST_IS), making it the same as the parallel light source (point light source). |
NJD_SPOT_LIGHT | Spotlight: Light is irradiated inside the cone created by the light direction and position, the same as the parallel light source, and by the angle specified by njSetLightAngle. |
#include <Shinobi.h> : NJS_LIGHT light; sbInitSystem( NJD_RESOLUTION_VGA, NJD_FRAMEBUFFER_MODE_RGB565, 1); /* Register parallel light source */ njCreateLight(&light, NJD_DIR_LIGHT); : /* njDeleteLight(), njLightOff() functions needs to be called in order to cancel parallel light */ njDrawObject(...); :