Class TAbstractPositionalLightNode

DescriptionHierarchyFieldsMethodsProperties

Unit

Declaration

type TAbstractPositionalLightNode = class(TAbstractLightNode)

Description

no description available, TAbstractLightNode description follows

Base class for all VRML / X3D light nodes.

Note that even the old VRML 1.0 light nodes inherit from this. Although they interpret some bits differently ("ambientIntensity" < 0 has special meaning). But most of the fields behave identically, they only have different default values.

Hierarchy

Overview

Methods

Public procedure CreateNode; override;
Public function DistanceNeededForAttenuation: boolean;
Public function Attenuation(const DistanceToLight: Single): Single; overload;
Public function Attenuation(const DistanceToLight: Double): Double; overload;
Public function HasAttenuation: boolean;
Public function HasRadius: boolean; virtual;
Public procedure UpdateLightInstance(var LightInstance: TLightInstance); override;
Public function Position: TVector4Single; override;

Properties

Public property FdLocation: TSFVec3f read FFdLocation;
Public property FdAttenuation: TSFVec3f read FFdAttenuation;
Public property FdRadius: TSFFloat read FFdRadius;

Description

Methods

Public procedure CreateNode; override;
 
Public function DistanceNeededForAttenuation: boolean;

Calculate light intensity drop because of the distance to the light. This follows the equation 1/max( attenuation[0] + ... ) from the VRML/X3D specification, it is the same as OpenGL attenuation.

Since calculating the DistanceToLight for the Attenuation method may be time-consuming in some situations, you can check DistanceNeededForAttenuation first. When the DistanceNeededForAttenuation returns False, then the value of DistanceToLight parameter is ignored (you can pass anything).

The DistanceToLight should be a distance in the light source local coordinate system. TODO: although our renderers currently ignore this: ray-tracer uses global coord system, OpenGL (fixed-function and shader) renderer uses eye coord system (should be equal to global coord system for normal cameras).

Public function Attenuation(const DistanceToLight: Single): Single; overload;
 
Public function Attenuation(const DistanceToLight: Double): Double; overload;
 
Public function HasAttenuation: boolean;

Is attenuation relevant. When False, you know that Attenuation function always returns 1, so there's no point in using it at all.

Public function HasRadius: boolean; virtual;

Should the "radius" field be taken into account.

Public procedure UpdateLightInstance(var LightInstance: TLightInstance); override;
 
Public function Position: TVector4Single; override;
 

Properties

Public property FdLocation: TSFVec3f read FFdLocation;
 
Public property FdAttenuation: TSFVec3f read FFdAttenuation;
 
Public property FdRadius: TSFFloat read FFdRadius;
 

Generated by PasDoc 0.13.0 on 2014-08-30 12:10:48