File: X3DNodes.TLightInstance.html

package info (click to toggle)
castle-game-engine 5.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 185,428 kB
  • sloc: pascal: 260,781; cpp: 1,363; objc: 713; makefile: 537; xml: 496; sh: 480; php: 4
file content (202 lines) | stat: -rw-r--r-- 14,221 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: X3DNodes: Object TLightInstance</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<a name="TLightInstance"></a><h1 class="cio">Object TLightInstance</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Hierarchy">Hierarchy</a></td><td><a class="section" href="#PasDoc-Fields">Fields</a></td><td><a class="section" href="#PasDoc-Methods">Methods</a></td><td>Properties</td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a  href="X3DNodes.html">X3DNodes</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TLightInstance = object(TObject)</code></p>
<h2 class="description">Description</h2>
<p>
Light source instance in the scene. References VRML/X3D light source node (see <a class="normal" href="X3DNodes.TLightInstance.html#Node">Node</a>), and keeps track of light source transformation in the 3D world. For the sake of speed also stores a couple of light's properties already multiplied by the transformation.

<p>This record may be initialized only by <a class="normal" href="X3DNodes.TAbstractLightNode.html#CreateLightInstance">TAbstractLightNode.CreateLightInstance</a>. Update it (when transform changes) by <a class="normal" href="X3DNodes.TAbstractLightNode.html#UpdateLightInstance">TAbstractLightNode.UpdateLightInstance</a>.</p>
<a name="PasDoc-Hierarchy"></a><h2 class="hierarchy">Hierarchy</h2>
<ul class="hierarchy"><li class="ancestor">TObject</li>
<li class="thisitem">TLightInstance</li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Fields"></a><h3 class="summary">Fields</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="X3DNodes.TLightInstance.html#Node">Node</a></b>: <a  href="X3DNodes.TAbstractLightNode.html">TAbstractLightNode</a>;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="X3DNodes.TLightInstance.html#Transform">Transform</a></b>: <a  href="CastleVectors.html#TMatrix4Single">TMatrix4Single</a>;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="X3DNodes.TLightInstance.html#TransformScale">TransformScale</a></b>: Single;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="X3DNodes.TLightInstance.html#Location">Location</a></b>: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="X3DNodes.TLightInstance.html#Direction">Direction</a></b>: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="X3DNodes.TLightInstance.html#Radius">Radius</a></b>: Single;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="X3DNodes.TLightInstance.html#WorldCoordinates">WorldCoordinates</a></b>: boolean;</code></td>
</tr>
</table>
<a name="PasDoc-Methods"></a><h3 class="summary">Methods</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="X3DNodes.TLightInstance.html#Position">Position</a></b>: <a  href="CastleVectors.html#TVector4Single">TVector4Single</a>;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="X3DNodes.TLightInstance.html#Contribution">Contribution</a></b>( const Point: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>; const PointPlaneNormal: <a  href="CastleVectors.html#TVector4Single">TVector4Single</a>; State: <a  href="X3DNodes.TX3DGraphTraverseState.html">TX3DGraphTraverseState</a>; const CamPosition: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="X3DNodes.TLightInstance.html#ContributionCameraIndependent">ContributionCameraIndependent</a></b>( const Point, PointPlaneNormal, MaterialDiffuseColor: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Fields</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Node"></a><code><b>Node</b>: <a  href="X3DNodes.TAbstractLightNode.html">TAbstractLightNode</a>;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Transform"></a><code><b>Transform</b>: <a  href="CastleVectors.html#TMatrix4Single">TMatrix4Single</a>;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="TransformScale"></a><code><b>TransformScale</b>: Single;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Location"></a><code><b>Location</b>: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Light location, already transformed by the <a class="normal" href="X3DNodes.TLightInstance.html#Transform">Transform</a> matrix. For <a class="normal" href="X3DNodes.TAbstractPositionalLightNode.html">TAbstractPositionalLightNode</a> lights.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Direction"></a><code><b>Direction</b>: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Light direction, already normalized and transformed by the <a class="normal" href="X3DNodes.TLightInstance.html#Transform">Transform</a> matrix. For spot and directional lights.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Radius"></a><code><b>Radius</b>: Single;</code></td>
</tr>
<tr><td colspan="2">
<p>
Light radius, already transformed by the <a class="normal" href="X3DNodes.TLightInstance.html#Transform">Transform</a> matrix. For lights with radius (positional lights in VRML &gt;= 2.0, that is <a class="normal" href="X3DNodes.TAbstractPositionalLightNode.html">TAbstractPositionalLightNode</a> with HasRadius = true).</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="WorldCoordinates"></a><code><b>WorldCoordinates</b>: boolean;</code></td>
</tr>
<tr><td colspan="2">
<p>
Are light location, direction (in this class and inside Node fields) expressed in world coordinates. If not, they are expressed in scene coordinates.

<p>This matters if you render the scene using <a class="normal" href="CastleScene.TCastleScene.html">TCastleScene</a>, and transform it by <a class="normal" href="Castle3D.T3DTransform.html">T3DTransform</a> or direct OpenGL modelview changes. By default (<code>WorldCoordinates</code> = false) we assume that light is defined in scene space, so it will be transformed by the whole modelview matrix (camera matrix with scene transformations). When this is true, during rendering we take care to transform this light only by camera matrix (not additional scene transformation). Useful for example for headlight.</p>
</td></tr>
</table>
<h3 class="detail">Methods</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Position"></a><code>function <b>Position</b>: <a  href="CastleVectors.html#TVector4Single">TVector4Single</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Position expressed in homogeneous coordinates. For positional lights, the last component is always 1. For directional lights, the last component is always 0.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Contribution"></a><code>function <b>Contribution</b>( const Point: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>; const PointPlaneNormal: <a  href="CastleVectors.html#TVector4Single">TVector4Single</a>; State: <a  href="X3DNodes.TX3DGraphTraverseState.html">TX3DGraphTraverseState</a>; const CamPosition: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Light contribution to the specified vertex color. This can be used by software renderers (ray-tracers etc.) to calculate pixel color following VRML/X3D specifications. <a class="normal" href="X3DNodes.TX3DGraphTraverseState.html#Emission">TX3DGraphTraverseState.Emission</a> should be added to <code>TLightInstance.Contribution</code> (for each light), and resulting color should be processed by <a class="normal" href="X3DNodes.TFogNode.html#ApplyFog">TFogNode.ApplyFog</a>.

<p>We do not clamp color components to (0, 1). This would be a waste of time, you should clamp only at the end (or never). This also allows to multiply / accumulate values outside of the (0, 1) range during calculations. OpenGL also clamps only at the end.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="ContributionCameraIndependent"></a><code>function <b>ContributionCameraIndependent</b>( const Point, PointPlaneNormal, MaterialDiffuseColor: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Light contribution, without knowing the camera or full material. We have a 3D vertex, we know it lies on a plane with given normal, and we have light information. Try to calculate VRML/X3D lighting equation as close as possible to the fully correct version (see regular <a class="normal" href="X3DNodes.TLightInstance.html#Contribution">Contribution</a> method) with this information.

<p>The specular lighting part must be simply ignored in this case.</p>
</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(["trackPageView"]);
  _paq.push(["enableLinkTracking"]);

  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
    _paq.push(["setTrackerUrl", u+"piwik.php"]);
    _paq.push(["setSiteId", "1"]);
    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Piwik Code -->

<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a  href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:14</em>
</span>
</td></tr></table></body></html>