File: CastleTriangulate.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 (166 lines) | stat: -rw-r--r-- 11,622 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
<!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: CastleTriangulate</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 CastleTriangulate</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><a class="section" href="#PasDoc-Variables">Variables</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="description">Description</h2>
<p>
Triangulating a polygon.</p>
<a name="PasDoc-Uses"></a><h2 class="uses">Uses</h2>
<ul class="useslist"><li>SysUtils</li><li><a  href="CastleVectors.html">CastleVectors</a></li><li><a  href="CastleUtils.html">CastleUtils</a></li><li><a  href="CastleTriangles.html">CastleTriangles</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>procedure <b><a  href="CastleTriangulate.html#TriangulateFace">TriangulateFace</a></b>( FaceIndices: <a  href="CastleUtils.html#PArray_LongInt">PArray_Longint</a>; Count: Integer; Vertices: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>; VerticesCount: Integer; TriangulatorProc: <a  href="CastleTriangulate.html#TTriangulatorProc">TTriangulatorProc</a>; AddToIndices: Longint); overload;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a  href="CastleTriangulate.html#TriangulateFace">TriangulateFace</a></b>( FaceIndices: <a  href="CastleUtils.html#PArray_LongInt">PArray_Longint</a>; Count: Integer; Vertices: <a  href="CastleVectors.html#TGetVertexFromIndexFunc">TGetVertexFromIndexFunc</a>; TriangulatorProc: <a  href="CastleTriangulate.html#TTriangulatorProc">TTriangulatorProc</a>; AddToIndices: Longint); overload;</code></td>
</tr>
<tr class="list">
<td class="itemcode"><code>procedure <b><a  href="CastleTriangulate.html#TriangulateConvexFace">TriangulateConvexFace</a></b>(Count: Integer; TriangulatorProc: <a  href="CastleTriangulate.html#TTriangulatorProc">TTriangulatorProc</a>; AddToIndices: Longint);</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>function <b><a  href="CastleTriangulate.html#IndexedPolygonNormal">IndexedPolygonNormal</a></b>( Indices: <a  href="CastleUtils.html#PArray_LongInt">PArray_Longint</a>; IndicesCount: Integer; Vertices: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>; const VerticesCount: Integer; const ResultForIncorrectPoly: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>; const Convex: boolean): <a  href="CastleVectors.html#TVector3Single">TVector3Single</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="CastleTriangulate.html#TTriangulatorProc">TTriangulatorProc</a></b> = procedure (const Tri: <a  href="CastleVectors.html#TVector3Longint">TVector3Longint</a>) of object;</code></td>
</tr>
</table>
<a name="PasDoc-Variables"></a><h3 class="summary">Variables</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a  href="CastleTriangulate.html#LogTriangulation">LogTriangulation</a></b>: boolean;</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="TriangulateFace"></a><code>procedure <b>TriangulateFace</b>( FaceIndices: <a  href="CastleUtils.html#PArray_LongInt">PArray_Longint</a>; Count: Integer; Vertices: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>; VerticesCount: Integer; TriangulatorProc: <a  href="CastleTriangulate.html#TTriangulatorProc">TTriangulatorProc</a>; AddToIndices: Longint); overload;</code></td>
</tr>
<tr><td colspan="1">
<p>
Triangulate potentially non-convex face.

<p>FaceIndices[0]..FaceIndices[Count - 1] are indices to the Vertices array. They describe the outline of the polygon (face). You can pass FaceIndices = <code>Nil</code>, this is understood that indices are just 0..Count - 1 (in other words, it's equivalent to setting FaceIndices[0] = 0, FaceIndices[1] = 1 etc.).

<p>For each resulting triangle we will call TriangulatorProc with Tri (first param of TriangulatorProc) containing indices to FaceIndices[] array. We return indices to FaceIndices (not ready vectors from Vertices, not even indices to Vertices[] array) to allow the caller to obtain all information about the triangle. In the simple case, you can just use Vertices[FaceIndices[Tri[0..2]]] to obtain your triangle, in the more sophisticated cases you have other options to e.g. extract other vertex information from whatever data you have (see e.g. VRML/X3D IndexedFaceSet renderer).

<p>Generated triangles have the same orientation (normal from ccw etc.) as original polygon. This also means that if you're sure that your polygon is planar (and it should be &mdash; although we handle gracefully small deviations from planar, this procedure doesn't actually handle arbitrary (dis)located 3D data) then normal vector of all your triangles is the same.

<p>Note that you generally shouldn't use this procedure if you <i>know</i> that your polygon is convex. Then using this is a waste of time, after all convex polygons can be triangulated much easier. You can use <a class="normal" href="CastleTriangulate.html#TriangulateConvexFace">TriangulateConvexFace</a> in this case, which has deliberately very similar interface to this procedure.

<p>

<p>

<p>

<p></p>
<h6 class="description_section">Parameters</h6>
<dl class="parameters">
<dt>TriangulatorProcData</dt>
<dd>Is just passed unmodified to every TriangulatorProc call (as the second parameter). This is standard method to pass whatever data to your callback.</dd>
<dt>AddToIndices</dt>
<dd>Indexes returned in Tri[0..2] are all incremented by AddToIndices (which may also be negative), this is useful if your FaceIndices is actually a pointer to the middle of some larger indexes array. Just pass 0 if you don't want this.</dd>
</dl>
<h6 class="description_section">See also</h6>
<dl class="see_also">
  <dt><a class="normal" href="CastleTriangulate.html#TriangulateConvexFace">TriangulateConvexFace</a></dt>
  <dd>Triangulate convex polygon.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TriangulateFace"></a><code>procedure <b>TriangulateFace</b>( FaceIndices: <a  href="CastleUtils.html#PArray_LongInt">PArray_Longint</a>; Count: Integer; Vertices: <a  href="CastleVectors.html#TGetVertexFromIndexFunc">TGetVertexFromIndexFunc</a>; TriangulatorProc: <a  href="CastleTriangulate.html#TTriangulatorProc">TTriangulatorProc</a>; AddToIndices: Longint); overload;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TriangulateConvexFace"></a><code>procedure <b>TriangulateConvexFace</b>(Count: Integer; TriangulatorProc: <a  href="CastleTriangulate.html#TTriangulatorProc">TTriangulatorProc</a>; AddToIndices: Longint);</code></td>
</tr>
<tr><td colspan="1">
<p>
Triangulate convex polygon.

<p>This performs very easy triangulation. It has deliberately similar interface to <a class="normal" href="CastleTriangulate.html#TriangulateFace">TriangulateFace</a>, so it can be used as drop-in replacement for <a class="normal" href="CastleTriangulate.html#TriangulateFace">TriangulateFace</a>, when you know that your face is convex.

<p>Note that it doesn't even need to know FaceIndices or Vertices, it's enough to know Count.

<p>This also guarantees consequent triangles orientation, like <a class="normal" href="CastleTriangulate.html#TriangulateFace">TriangulateFace</a>.

<p></p>
<h6 class="description_section">See also</h6>
<dl class="see_also">
  <dt><a class="normal" href="CastleTriangulate.html#TriangulateFace">TriangulateFace</a></dt>
  <dd></dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="IndexedPolygonNormal"></a><code>function <b>IndexedPolygonNormal</b>( Indices: <a  href="CastleUtils.html#PArray_LongInt">PArray_Longint</a>; IndicesCount: Integer; Vertices: <a  href="CastleVectors.html#PVector3Single">PVector3Single</a>; const VerticesCount: Integer; const ResultForIncorrectPoly: <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>; const Convex: boolean): <a  href="CastleVectors.html#TVector3Single">TVector3Single</a>;</code></td>
</tr>
<tr><td colspan="1">
<p>
Calculate normal vector of possibly concave polygon.</p>
</td></tr>
</table>
<h3 class="detail">Types</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="TTriangulatorProc"></a><code><b>TTriangulatorProc</b> = procedure (const Tri: <a  href="CastleVectors.html#TVector3Longint">TVector3Longint</a>) of object;</code></td>
</tr>
<tr><td colspan="1">
&nbsp;</td></tr>
</table>
<h3 class="detail">Variables</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="LogTriangulation"></a><code><b>LogTriangulation</b>: boolean;</code></td>
</tr>
<tr><td colspan="1">
<p>
Write to Log a <i>lot</i> of comments how the triangulation goes. Useful for examples/visualize_triangulation/ .</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:12</em>
</span>
</td></tr></table></body></html>