File: CastleNURBS.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 (203 lines) | stat: -rw-r--r-- 13,851 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
203
<!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: CastleNURBS</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">
<h1 class="unit">Unit CastleNURBS</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Uses">Uses</a></td><td>Classes, Interfaces, Objects and Records</td><td><a class="section" href="#PasDoc-FuncsProcs">Functions and Procedures</a></td><td><a class="section" href="#PasDoc-Types">Types</a></td><td>Constants</td><td>Variables</td></tr></table>
<a name="PasDoc-Description"></a><h2 class="description">Description</h2>
<p>
Common utilities for NURBS curves and surfaces.</p>
<a name="PasDoc-Uses"></a><h2 class="uses">Uses</h2>
<ul class="useslist"><li>SysUtils</li><li><a  href="CastleUtils.html">CastleUtils</a></li><li><a  href="CastleVectors.html">CastleVectors</a></li><li><a  href="CastleBoxes.html">CastleBoxes</a></li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-FuncsProcs"></a><h3 class="summary">Functions and Procedures</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code>function <b><a  href="CastleNURBS.html#ActualTessellation">ActualTessellation</a></b>(const Tessellation: Integer; const Dimension: Cardinal): Cardinal;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a  href="CastleNURBS.html#NurbsCurvePoint">NurbsCurvePoint</a></b>(const Points: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>; const PointsCount: Cardinal; const U: Single; const Order: Cardinal; Knot, Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; Tangent: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a  href="CastleNURBS.html#NurbsCurvePoint">NurbsCurvePoint</a></b>(const Points: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; const U: Single; const Order: Cardinal; Knot, Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; Tangent: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a  href="CastleNURBS.html#NurbsSurfacePoint">NurbsSurfacePoint</a></b>(const Points: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; const UDimension, VDimension: Cardinal; const U, V: Single; const UOrder, VOrder: Cardinal; UKnot, VKnot, Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; Normal: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a  href="CastleNURBS.html#NurbsKnotIfNeeded">NurbsKnotIfNeeded</a></b>(Knot: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; const Dimension, Order: Cardinal; const Kind: <a  href="CastleNURBS.html#TNurbsKnotKind">TNurbsKnotKind</a>);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a  href="CastleNURBS.html#NurbsBoundingBox">NurbsBoundingBox</a></b>(Point: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>): <a  href="CastleBoxes.TBox3D.html">TBox3D</a>;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a  href="CastleNURBS.html#NurbsBoundingBox">NurbsBoundingBox</a></b>(Point: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; Weight: <a  href="CastleUtils.TSingleList.html">TSingleList</a>): <a  href="CastleBoxes.TBox3D.html">TBox3D</a>;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a  href="CastleNURBS.html#NurbsBoundingBox">NurbsBoundingBox</a></b>(Point: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; const Transform: <a  href="CastleVectors.html#TMatrix4Single">TMatrix4Single</a>): <a  href="CastleBoxes.TBox3D.html">TBox3D</a>;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>function <b><a  href="CastleNURBS.html#NurbsBoundingBox">NurbsBoundingBox</a></b>(Point: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; Weight: <a  href="CastleUtils.TSingleList.html">TSingleList</a>; const Transform: <a  href="CastleVectors.html#TMatrix4Single">TMatrix4Single</a>): <a  href="CastleBoxes.TBox3D.html">TBox3D</a>;</code></td>
</tr>
</table>
<a name="PasDoc-Types"></a><h3 class="summary">Types</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a  href="CastleNURBS.html#TNurbsKnotKind">TNurbsKnotKind</a></b> = (...);</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Functions and Procedures</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="ActualTessellation"></a><code>function <b>ActualTessellation</b>(const Tessellation: Integer; const Dimension: Cardinal): Cardinal;</code></td>
</tr>
<tr><td colspan="1">
<p>
Calculate the tessellation (number of NURBS points generated). This follows X3D spec for &quot;an implementation subdividing the surface into an equal number of subdivision steps&quot;. Give value of tessellation field, and count of controlPoints.

<p>Returned value is for sure &gt; 0 (never exactly 0).</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="NurbsCurvePoint"></a><code>function <b>NurbsCurvePoint</b>(const Points: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>; const PointsCount: Cardinal; const U: Single; const Order: Cardinal; Knot, Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; Tangent: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr><td colspan="1">
<p>
Return point on NURBS curve.

<p>Requires: </p>

<ul class="paragraph_spacing">
  <li><p>PointsCount &gt; 0 (not exactly 0).</p></li>
  <li><p>Order &gt;= 2 (X3D and VRML 97 spec require this too).</p></li>
  <li><p>Knot must have exactly PointsCount + Order items.</p></li>
</ul>

<p>

<p>Weight will be used only if it has the same length as PointsCount. Otherwise, weight = 1.0 (that is, defining non-rational curve) will be used (this follows X3D spec).

<p>Tangent, if non-nil, will be set to the direction at given point of the curve, pointing from the smaller to larger knot values. It will be normalized. This can be directly useful to generate orientations by X3D NurbsOrientationInterpolator node.

<p></p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="NurbsCurvePoint"></a><code>function <b>NurbsCurvePoint</b>(const Points: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; const U: Single; const Order: Cardinal; Knot, Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; Tangent: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="NurbsSurfacePoint"></a><code>function <b>NurbsSurfacePoint</b>(const Points: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; const UDimension, VDimension: Cardinal; const U, V: Single; const UOrder, VOrder: Cardinal; UKnot, VKnot, Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; Normal: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr><td colspan="1">
<p>
Return point on NURBS surface.

<p>Requires: </p>

<ul class="paragraph_spacing">
  <li><p>UDimension, VDimension &gt; 0 (not exactly 0).</p></li>
  <li><p>Points.Count must match UDimension * VDimension.</p></li>
  <li><p>Order &gt;= 2 (X3D and VRML 97 spec require this too).</p></li>
  <li><p>Each xKnot must have exactly xDimension + Order items.</p></li>
</ul>

<p>

<p>Weight will be used only if it has the same length as PointsCount. Otherwise, weight = 1.0 (that is, defining non-rational curve) will be used (this follows X3D spec).

<p>Normal, if non-nil, will be set to the normal at given point of the surface. It will be normalized. You can use this to pass these normals to rendering. Or to generate normals for X3D NurbsSurfaceInterpolator node.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="NurbsKnotIfNeeded"></a><code>procedure <b>NurbsKnotIfNeeded</b>(Knot: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; const Dimension, Order: Cardinal; const Kind: <a  href="CastleNURBS.html#TNurbsKnotKind">TNurbsKnotKind</a>);</code></td>
</tr>
<tr><td colspan="1">
<p>
Calculate a default knot, if Knot doesn't already have required number of items. After this, it's guaranteed that Knot.Count is Dimension + Order (just as required by <a class="normal" href="CastleNURBS.html#NurbsCurvePoint">NurbsCurvePoint</a>, <a class="normal" href="CastleNURBS.html#NurbsSurfacePoint">NurbsSurfacePoint</a>).</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="NurbsBoundingBox"></a><code>function <b>NurbsBoundingBox</b>(Point: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>): <a  href="CastleBoxes.TBox3D.html">TBox3D</a>;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="NurbsBoundingBox"></a><code>function <b>NurbsBoundingBox</b>(Point: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; Weight: <a  href="CastleUtils.TSingleList.html">TSingleList</a>): <a  href="CastleBoxes.TBox3D.html">TBox3D</a>;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="NurbsBoundingBox"></a><code>function <b>NurbsBoundingBox</b>(Point: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; Weight: <a  href="CastleUtils.TDoubleList.html">TDoubleList</a>; const Transform: <a  href="CastleVectors.html#TMatrix4Single">TMatrix4Single</a>): <a  href="CastleBoxes.TBox3D.html">TBox3D</a>;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="NurbsBoundingBox"></a><code>function <b>NurbsBoundingBox</b>(Point: <a  href="CastleVectors.TVector3SingleList.html">TVector3SingleList</a>; Weight: <a  href="CastleUtils.TSingleList.html">TSingleList</a>; const Transform: <a  href="CastleVectors.html#TMatrix4Single">TMatrix4Single</a>): <a  href="CastleBoxes.TBox3D.html">TBox3D</a>;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<h3 class="detail">Types</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TNurbsKnotKind"></a><code><b>TNurbsKnotKind</b> = (...);</code></td>
</tr>
<tr><td colspan="1">
<p>
Type of NURBS knot vector to generate.</p>
<h6 class="description_section">Values</h6>
<ul>
<li>
nkPeriodicUniform: All knot values are evenly spaced, all knots are single. This is good for periodic curves.</li>
<li>
nkEndpointUniform: Starting and ending knots have Order multiplicity, rest is evenly spaced. The curve hits endpoints.</li>
</ul>
</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:10</em>
</span>
</td></tr></table></body></html>