File: X3DLoad.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 (211 lines) | stat: -rw-r--r-- 12,817 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
204
205
206
207
208
209
210
211
<!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: X3DLoad</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 X3DLoad</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>Types</td><td><a class="section" href="#PasDoc-Constants">Constants</a></td><td>Variables</td></tr></table>
<a name="PasDoc-Description"></a><h2 class="description">Description</h2>
<p>
Loading 3D models as X3D.</p>
<p>


<p>Every format except VRML/X3D is handled by converting it into X3D nodes graph. This allows to use our great X3D renderer, tools, saving to X3D and such, on every 3D model.

<p>Basic guide for adding a new 3D format:

<p></p>

<ul class="paragraph_spacing">
  <li><p> Particular formats are implemented inside various X3DLoadInternalXxx units. Implementation of this unit calls them. In the future, a mechanism that allows you to &quot;register&quot; an importer, without modifying this unit's implementation, may be done &mdash; report if needed.</p></li>
  <li><p>3D formats are also listed in the file filters constants: see <a class="normal" href="X3DLoad.html#Load3D_FileFilters">Load3D_FileFilters</a> and <a class="normal" href="X3DLoad.html#Load3DSequence_FileFilters">Load3DSequence_FileFilters</a>. Each format has a file filter to specifically choose this format, and also is added to the &quot;All 3D models&quot; filter.</p></li>
  <li><p>Enable view3dscene to associate with this file format on freedesktops (GNOME, and other following freedesktop.org specs). For this,

<p>1. Update view3dscene MIME database. Simply add appopriate element to ../../../view3dscene/desktop/view3dscene.xml. Format of that MIME xml file is self-explanatory. It's good idea to google first to search for standard MIME type for your model format (e.g. wikipedia shows mime types for formats). If none is found, just use application/x-???, where ??? is some short name for your format.

<p>2. After adding to MIME database, you want to also add format to ../../../view3dscene/desktop/view3dscene.desktop, to indicate that view3dscene handles this MIME type.

<p>3. Finally, also add this to ../../../view3dscene/desktop/install_thumbnailer.sh, so that GNOME nautilus thumbnailers for this MIME types can be installed.</p></li>
  <li><p>You probably also want to extend documentation. At least ../../../www/htdocs/view3dscene.php, it has a &quot;Features&quot; section that lists all supported 3D formats.</p></li>
</ul>

<p></p>
<a name="PasDoc-Uses"></a><h2 class="uses">Uses</h2>
<ul class="useslist"><li><a  href="CastleVectors.html">CastleVectors</a></li><li>SysUtils</li><li><a  href="X3DNodes.html">X3DNodes</a></li><li>X3DLoadInternalMD3</li><li><a  href="CastleUtils.html">CastleUtils</a></li><li>Classes</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="X3DLoad.html#Load3D">Load3D</a></b>(const URL: string; AllowStdIn: boolean = false; NilOnUnrecognizedFormat: boolean = false): <a  href="X3DNodes.TX3DRootNode.html">TX3DRootNode</a>;</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code>procedure <b><a  href="X3DLoad.html#Load3DSequence">Load3DSequence</a></b>( const URL: string; AllowStdIn: boolean; RootNodes: <a  href="X3DNodes.TX3DNodeList.html">TX3DNodeList</a>; Times: <a  href="CastleUtils.TSingleList.html">TSingleList</a>; out ScenesPerTime: Cardinal; out EqualityEpsilon: Single; out TimeLoop, TimeBackwards: boolean);</code></td>
</tr>
</table>
<a name="PasDoc-Constants"></a><h3 class="summary">Constants</h3>
<table class="summary wide_list">
<tr class="list">
<td class="itemcode"><code><b><a  href="X3DLoad.html#Load3D_FileFilters">Load3D_FileFilters</a></b> =
  'All Files|*|' +
  '*All 3D models|*.wrl;*.wrl.gz;*.wrz;*.x3d;*.x3dz;*.x3d.gz;*.x3dv;*.x3dvz;*.x3dv.gz;*.dae;*.iv;*.3ds;*.md3;*.obj;*.geo;*.json|' +
  'VRML (*.wrl, *.wrl.gz, *.wrz)|*.wrl;*.wrl.gz;*.wrz|' +
  
  'X3D XML (*.x3d, *.x3dz, *.x3d.gz)|*.x3d;*.x3dz;*.x3d.gz|' +
  'X3D classic (*.x3dv, *.x3dvz, *.x3dv.gz)|*.x3dv;*.x3dvz;*.x3dv.gz|' +
  'Collada (*.dae)|*.dae|' +
  'Inventor (*.iv)|*.iv|' +
  '3D Studio (*.3ds)|*.3ds|' +
  'Quake 3 engine models (*.md3)|*.md3|' +
  'Wavefront (*.obj)|*.obj|' +
  'Videoscape (*.geo)|*.geo|' +
  'Spine animation (*.json)|*.json';</code></td>
</tr>
<tr class="list2">
<td class="itemcode"><code><b><a  href="X3DLoad.html#Load3DSequence_FileFilters">Load3DSequence_FileFilters</a></b> =
  'All Files|*|' +
  '*All 3D models|*.wrl;*.wrl.gz;*.wrz;*.x3d;*.x3dz;*.x3d.gz;*.x3dv;*.x3dvz;*.x3dv.gz;*.kanim;*.dae;*.iv;*.3ds;*.md3;*.obj;*.geo;*.json|' +
  'VRML (*.wrl, *.wrl.gz, *.wrz)|*.wrl;*.wrl.gz;*.wrz|' +
  
  'X3D XML (*.x3d, *.x3dz, *.x3d.gz)|*.x3d;*.x3dz;*.x3d.gz|' +
  'X3D classic (*.x3dv, *.x3dvz, *.x3dv.gz)|*.x3dv;*.x3dvz;*.x3dv.gz|' +
  'Castle Game Engine animations (*.kanim)|*.kanim|' +
  'Collada (*.dae)|*.dae|' +
  'Inventor (*.iv)|*.iv|' +
  '3D Studio (*.3ds)|*.3ds|' +
  'Quake 3 engine models (*.md3)|*.md3|' +
  'Wavefront (*.obj)|*.obj|' +
  'Videoscape (*.geo)|*.geo|' +
  'Spine animation (*.json)|*.json';</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="Load3D"></a><code>function <b>Load3D</b>(const URL: string; AllowStdIn: boolean = false; NilOnUnrecognizedFormat: boolean = false): <a  href="X3DNodes.TX3DRootNode.html">TX3DRootNode</a>;</code></td>
</tr>
<tr><td colspan="1">
<p>
Load 3D model. Guess model format based on URL extension. VRML/X3D formats are loaded directly, other model formats are converted under the hood to VRML/X3D.

<p>URL is downloaded using <a class="normal" href="CastleDownload.html">CastleDownload</a> unit. If you all you care about is loading normal files, then just pass a normal filename (absolute or relative to the current directory) as the URL parameter.

<p></p>
<h6 class="description_section">Parameters</h6>
<dl class="parameters">
<dt>AllowStdIn</dt>
<dd>If AllowStdIn and URL = '-' then it will load a VRML/X3D file from <a class="normal" href="CastleClassUtils.html#StdInStream">StdInStream</a> (using current working directory as BaseUrl).</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Load3DSequence"></a><code>procedure <b>Load3DSequence</b>( const URL: string; AllowStdIn: boolean; RootNodes: <a  href="X3DNodes.TX3DNodeList.html">TX3DNodeList</a>; Times: <a  href="CastleUtils.TSingleList.html">TSingleList</a>; out ScenesPerTime: Cardinal; out EqualityEpsilon: Single; out TimeLoop, TimeBackwards: boolean);</code></td>
</tr>
<tr><td colspan="1">
<p>
Load various model formats as animation expressed by VRML/X3D sequence.

<p>For model formats that cannot express animations (like GEO or Wavefront OBJ) or that express animations in a single file (like VRML/X3D &gt;= 2.0) we load them exactly like <a class="normal" href="X3DLoad.html#Load3D">Load3D</a>, adding exactly one item to RootNodes. So this function handles <i>at least</i> the same model formats as <a class="normal" href="X3DLoad.html#Load3D">Load3D</a>.

<p>Additionally:

<p></p>

<ul class="paragraph_spacing">
  <li><p>We load kanim format. It can only be loaded to a sequence of files, so <a class="normal" href="X3DLoad.html#Load3D">Load3D</a> cannot deal with it at all.</p></li>
  <li><p>We load MD3 format in a little different (usually more efficient) way: to a sequence of frames. In comparison, <a class="normal" href="X3DLoad.html#Load3D">Load3D</a> loads MD3 into an interpolated animation.</p></li>
</ul>

<p>

<p>

<p></p>
<h6 class="description_section">Parameters</h6>
<dl class="parameters">
<dt>RootNodes</dt>
<dd>Sequence of root nodes will be stored there. Pass here some created and empty instance of <a class="normal" href="X3DNodes.TX3DNodeList.html">TX3DNodeList</a>.</dd>
<dt>ATimes</dt>
<dd>Sequence of time values. Pass here some created and empty instance of <a class="normal" href="CastleUtils.TSingleList.html">TSingleList</a>.</dd>
</dl>
</td></tr>
</table>
<h3 class="detail">Constants</h3>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Load3D_FileFilters"></a><code><b>Load3D_FileFilters</b> =
  'All Files|*|' +
  '*All 3D models|*.wrl;*.wrl.gz;*.wrz;*.x3d;*.x3dz;*.x3d.gz;*.x3dv;*.x3dvz;*.x3dv.gz;*.dae;*.iv;*.3ds;*.md3;*.obj;*.geo;*.json|' +
  'VRML (*.wrl, *.wrl.gz, *.wrz)|*.wrl;*.wrl.gz;*.wrz|' +
  
  'X3D XML (*.x3d, *.x3dz, *.x3d.gz)|*.x3d;*.x3dz;*.x3d.gz|' +
  'X3D classic (*.x3dv, *.x3dvz, *.x3dv.gz)|*.x3dv;*.x3dvz;*.x3dv.gz|' +
  'Collada (*.dae)|*.dae|' +
  'Inventor (*.iv)|*.iv|' +
  '3D Studio (*.3ds)|*.3ds|' +
  'Quake 3 engine models (*.md3)|*.md3|' +
  'Wavefront (*.obj)|*.obj|' +
  'Videoscape (*.geo)|*.geo|' +
  'Spine animation (*.json)|*.json';</code></td>
</tr>
<tr><td colspan="1">
<p>
File filters for files loaded by <a class="normal" href="X3DLoad.html#Load3D">Load3D</a>, suitable for <a class="normal" href="CastleFileFilters.TFileFilterList.html#AddFiltersFromString">TFileFilterList.AddFiltersFromString</a> and <a class="normal" href="CastleWindow.TCastleWindowCustom.html#FileDialog">TCastleWindowCustom.FileDialog</a>.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="itemcode"><a name="Load3DSequence_FileFilters"></a><code><b>Load3DSequence_FileFilters</b> =
  'All Files|*|' +
  '*All 3D models|*.wrl;*.wrl.gz;*.wrz;*.x3d;*.x3dz;*.x3d.gz;*.x3dv;*.x3dvz;*.x3dv.gz;*.kanim;*.dae;*.iv;*.3ds;*.md3;*.obj;*.geo;*.json|' +
  'VRML (*.wrl, *.wrl.gz, *.wrz)|*.wrl;*.wrl.gz;*.wrz|' +
  
  'X3D XML (*.x3d, *.x3dz, *.x3d.gz)|*.x3d;*.x3dz;*.x3d.gz|' +
  'X3D classic (*.x3dv, *.x3dvz, *.x3dv.gz)|*.x3dv;*.x3dvz;*.x3dv.gz|' +
  'Castle Game Engine animations (*.kanim)|*.kanim|' +
  'Collada (*.dae)|*.dae|' +
  'Inventor (*.iv)|*.iv|' +
  '3D Studio (*.3ds)|*.3ds|' +
  'Quake 3 engine models (*.md3)|*.md3|' +
  'Wavefront (*.obj)|*.obj|' +
  'Videoscape (*.geo)|*.geo|' +
  'Spine animation (*.json)|*.json';</code></td>
</tr>
<tr><td colspan="1">
<p>
File filters for files loaded by <a class="normal" href="X3DLoad.html#Load3DSequence">Load3DSequence</a>, suitable for <a class="normal" href="CastleFileFilters.TFileFilterList.html#AddFiltersFromString">TFileFilterList.AddFiltersFromString</a> and <a class="normal" href="CastleWindow.TCastleWindowCustom.html#FileDialog">TCastleWindowCustom.FileDialog</a>.</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>