-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcreating.html
197 lines (189 loc) · 24.8 KB
/
creating.html
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Creating A Collada Object — pycollada v0.3 documentation</title>
<link rel="stylesheet" href="_static/sphinxdoc.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '0.3',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="pycollada v0.3 documentation" href="index.html" />
<link rel="next" title="Changelog" href="changelog.html" />
<link rel="prev" title="Collada Object Structure" href="structure.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="changelog.html" title="Changelog"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="structure.html" title="Collada Object Structure"
accesskey="P">previous</a> |</li>
<li><a href="index.html">pycollada v0.3 documentation</a> »</li>
</ul>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
<p class="topless"><a href="structure.html"
title="previous chapter">Collada Object Structure</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="changelog.html"
title="next chapter">Changelog</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/creating.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="creating-a-collada-object">
<h1>Creating A Collada Object<a class="headerlink" href="#creating-a-collada-object" title="Permalink to this headline">¶</a></h1>
<p>In this section, we outline how to create a collada document from scratch.
First, let’s create an empy collada document:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">collada</span> <span class="kn">import</span> <span class="o">*</span>
<span class="gp">>>> </span><span class="n">mesh</span> <span class="o">=</span> <span class="n">Collada</span><span class="p">()</span>
</pre></div>
</div>
<p>We could save this out, but it would be completely blank. Let’s first add
a <a class="reference internal" href="reference/generated/collada.material.Material.html#collada.material.Material" title="collada.material.Material"><tt class="xref py py-class docutils literal"><span class="pre">Material</span></tt></a> to the document:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">mesh</span> <span class="o">=</span> <span class="n">Collada</span><span class="p">()</span>
<span class="gp">>>> </span><span class="n">effect</span> <span class="o">=</span> <span class="n">material</span><span class="o">.</span><span class="n">Effect</span><span class="p">(</span><span class="s">"effect0"</span><span class="p">,</span> <span class="p">[],</span> <span class="s">"phong"</span><span class="p">,</span> <span class="n">diffuse</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">specular</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span>
<span class="gp">>>> </span><span class="n">mat</span> <span class="o">=</span> <span class="n">material</span><span class="o">.</span><span class="n">Material</span><span class="p">(</span><span class="s">"material0"</span><span class="p">,</span> <span class="s">"mymaterial"</span><span class="p">,</span> <span class="n">effect</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">mesh</span><span class="o">.</span><span class="n">effects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">effect</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">mesh</span><span class="o">.</span><span class="n">materials</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mat</span><span class="p">)</span>
</pre></div>
</div>
<p>Note that the second argument to <a class="reference internal" href="reference/generated/collada.material.Effect.html#collada.material.Effect" title="collada.material.Effect"><tt class="xref py py-class docutils literal"><span class="pre">Effect</span></tt></a> is for parameters. These
are used for textures. We omit textures for simplicity here.</p>
<p>Next, let’s first create some source arrays. These are going to be used to
create a triangle set later:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">numpy</span>
<span class="gp">>>> </span><span class="n">vert_floats</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span>
<span class="gp">... </span> <span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span><span class="o">-</span><span class="mi">50</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">normal_floats</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span>
<span class="gp">... </span> <span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span>
<span class="gp">... </span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span>
<span class="gp">... </span> <span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="gp">>>> </span><span class="n">vert_src</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">FloatSource</span><span class="p">(</span><span class="s">"cubeverts-array"</span><span class="p">,</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">vert_floats</span><span class="p">),</span> <span class="p">(</span><span class="s">'X'</span><span class="p">,</span> <span class="s">'Y'</span><span class="p">,</span> <span class="s">'Z'</span><span class="p">))</span>
<span class="gp">>>> </span><span class="n">normal_src</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">FloatSource</span><span class="p">(</span><span class="s">"cubenormals-array"</span><span class="p">,</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">normal_floats</span><span class="p">),</span> <span class="p">(</span><span class="s">'X'</span><span class="p">,</span> <span class="s">'Y'</span><span class="p">,</span> <span class="s">'Z'</span><span class="p">))</span>
</pre></div>
</div>
<p>Now that we have some sources, let’s create a <a class="reference internal" href="reference/generated/collada.geometry.Geometry.html#collada.geometry.Geometry" title="collada.geometry.Geometry"><tt class="xref py py-class docutils literal"><span class="pre">Geometry</span></tt></a> and add
the sources to it:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">geom</span> <span class="o">=</span> <span class="n">geometry</span><span class="o">.</span><span class="n">Geometry</span><span class="p">(</span><span class="n">mesh</span><span class="p">,</span> <span class="s">"geometry0"</span><span class="p">,</span> <span class="s">"mycube"</span><span class="p">,</span> <span class="p">[</span><span class="n">vert_src</span><span class="p">,</span> <span class="n">normal_src</span><span class="p">])</span>
</pre></div>
</div>
<p>To add a triangle set to the geometry, we can call the <a class="reference internal" href="reference/generated/collada.geometry.Geometry.html#collada.geometry.Geometry.createTriangleSet" title="collada.geometry.Geometry.createTriangleSet"><tt class="xref py py-meth docutils literal"><span class="pre">Geometry.createTriangleSet()</span></tt></a>
method. To do this, we need to define the inputs to the triangle set. In this case, we
are going to input the arrays we previously defined:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">input_list</span> <span class="o">=</span> <span class="n">source</span><span class="o">.</span><span class="n">InputList</span><span class="p">()</span>
<span class="gp">>>> </span><span class="n">input_list</span><span class="o">.</span><span class="n">addInput</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="s">'VERTEX'</span><span class="p">,</span> <span class="s">"#cubeverts-array"</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">input_list</span><span class="o">.</span><span class="n">addInput</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s">'NORMAL'</span><span class="p">,</span> <span class="s">"#cubenormals-array"</span><span class="p">)</span>
</pre></div>
</div>
<p>This says to use the source with identifier <cite>cubeverts-array</cite> as the vertex source
and source with identifier <cite>cubenormals-array</cite> as the normal source. The offsets
indicate that the vertex data is the first offset in the index array and the normal
data is the second offset in the index array. Let’s now create the index array:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">indices</span> <span class="o">=</span> <span class="n">numpy</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span>
<span class="gp">... </span> <span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">9</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">11</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">12</span><span class="p">,</span>
<span class="gp">... </span> <span class="mi">4</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">14</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">12</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">14</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">16</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">17</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span>
<span class="gp">... </span> <span class="mi">16</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">19</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">21</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">22</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">20</span><span class="p">,</span><span class="mi">6</span><span class="p">,</span><span class="mi">22</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">23</span><span class="p">])</span>
</pre></div>
</div>
<p>Now that we have an index array, an input list, and a material, we can create a
triangle set and add it to the geometry’s list of primitives. We then add it to
the list of geometries in the mesh:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">triset</span> <span class="o">=</span> <span class="n">geom</span><span class="o">.</span><span class="n">createTriangleSet</span><span class="p">(</span><span class="n">indices</span><span class="p">,</span> <span class="n">input_list</span><span class="p">,</span> <span class="s">"materialref"</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">geom</span><span class="o">.</span><span class="n">primitives</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">triset</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">mesh</span><span class="o">.</span><span class="n">geometries</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span>
</pre></div>
</div>
<p>We now have everything we need in the object except for a scene. To get the geometry
to show up, we have to create a scene. First, we instantiate the geometry into a scene
node, mapping it to a material:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">matnode</span> <span class="o">=</span> <span class="n">scene</span><span class="o">.</span><span class="n">MaterialNode</span><span class="p">(</span><span class="s">"materialref"</span><span class="p">,</span> <span class="n">mat</span><span class="p">,</span> <span class="n">inputs</span><span class="o">=</span><span class="p">[])</span>
<span class="gp">>>> </span><span class="n">geomnode</span> <span class="o">=</span> <span class="n">scene</span><span class="o">.</span><span class="n">GeometryNode</span><span class="p">(</span><span class="n">geom</span><span class="p">,</span> <span class="p">[</span><span class="n">matnode</span><span class="p">])</span>
<span class="gp">>>> </span><span class="n">node</span> <span class="o">=</span> <span class="n">scene</span><span class="o">.</span><span class="n">Node</span><span class="p">(</span><span class="s">"node0"</span><span class="p">,</span> <span class="n">children</span><span class="o">=</span><span class="p">[</span><span class="n">geomnode</span><span class="p">])</span>
</pre></div>
</div>
<p>Now that we have the scene node, we can create a scene, add the node to the scene,
add the scene to the document, and then set our scene as the default:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">myscene</span> <span class="o">=</span> <span class="n">scene</span><span class="o">.</span><span class="n">Scene</span><span class="p">(</span><span class="s">"myscene"</span><span class="p">,</span> <span class="p">[</span><span class="n">node</span><span class="p">])</span>
<span class="gp">>>> </span><span class="n">mesh</span><span class="o">.</span><span class="n">scenes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">myscene</span><span class="p">)</span>
<span class="gp">>>> </span><span class="n">mesh</span><span class="o">.</span><span class="n">scene</span> <span class="o">=</span> <span class="n">myscene</span>
</pre></div>
</div>
<p>We can now save the document to a file:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="gp">>>> </span><span class="n">mesh</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">'/tmp/test.dae'</span><span class="p">)</span>
</pre></div>
</div>
<p>If you load this file, it should look like a red cube. Here’s a screenshot:</p>
<img alt="_images/cube.png" src="_images/cube.png" />
</div>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="changelog.html" title="Changelog"
>next</a> |</li>
<li class="right" >
<a href="structure.html" title="Collada Object Structure"
>previous</a> |</li>
<li><a href="index.html">pycollada v0.3 documentation</a> »</li>
</ul>
</div>
<div class="footer">
© Copyright 2011, Jeff Terrace and contributors.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
</div>
</body>
</html>