root/OpenSceneGraph/trunk/src/osgPlugins/OpenFlight/VertexRecords.cpp @ 8563

Revision 8563, 9.5 kB (checked in by robert, 6 years ago)

From Joakim Simmonsson, fixed various spelling typos in comments

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
RevLine 
[7748]1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under 
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version.  The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * OpenSceneGraph Public License for more details.
12*/
13
[5038]14//
15// OpenFlight® loader for OpenSceneGraph
16//
[7669]17//  Copyright (C) 2005-2007  Brede Johansen
[5038]18//
19
20#include "Record.h"
21#include "Registry.h"
22#include "Document.h"
23#include "RecordInputStream.h"
24
25namespace flt {
26
27// Color from ColorPool.
28osg::Vec4 getColorFromPool(int index, const ColorPool* colorPool)
29{
30    osg::Vec4 color(1,1,1,1);
31    if (colorPool)
32        color = colorPool->getColor(index);
33    return color;
34}
35
36
37// Vertex flags
38enum Flags
39{
40    START_HARD_EDGE = (0x8000 >> 0),
41    NORMAL_FROZEN   = (0x8000 >> 1),
42    NO_COLOR        = (0x8000 >> 2),
43    PACKED_COLOR    = (0x8000 >> 3)
44};
45
46
47class VertexC : public Record
48{
49    public:
50
51        VertexC() {}
52
53        META_Record(VertexC)
54
55        virtual ~VertexC() {}
56
57        virtual void readRecord(RecordInputStream& in, Document& document)
58        {
[5229]59            /*int colorNameIndex =*/ in.readInt16();
[5038]60            uint16 flags = in.readUInt16();
61            osg::Vec3d coord = in.readVec3d();
62            osg::Vec4f packedColor = in.readColor32();
63            int colorIndex = in.readInt32(-1);
64
65            Vertex vertex;
66            vertex.setCoord(coord*document.unitScale());
67
68            // color
69            if (flags & PACKED_COLOR)
70                vertex.setColor(packedColor);                                             // Packed color
71            else if (colorIndex >= 0)
72                vertex.setColor(getColorFromPool(colorIndex, document.getColorPool()));   // Color from pool
73
74            if (_parent.valid())
75                _parent->addVertex(vertex);
76        }
77};
78
79RegisterRecordProxy<VertexC> g_VertexC(VERTEX_C_OP);
80
81
82class VertexCN : public Record
83{
84    public:
85
86        VertexCN() {}
87
88        META_Record(VertexCN)
89
90    protected:
91
92        virtual ~VertexCN() {}
93
94        virtual void readRecord(RecordInputStream& in, Document& document)
95        {
[5229]96            /*int colorNameIndex =*/ in.readInt16();
[5038]97            uint16 flags = in.readUInt16();
98            osg::Vec3d coord = in.readVec3d();
99            osg::Vec3f normal = in.readVec3f();
100            osg::Vec4f packedColor = in.readColor32();
101            int colorIndex = in.readInt32(-1);
102
103            Vertex vertex;
104            vertex.setCoord(coord*document.unitScale());
105            vertex.setNormal(normal);
106
107            // color
108            if (flags & PACKED_COLOR)
109                vertex.setColor(packedColor);                                               // Packed color
110            else if (colorIndex >= 0)
111                vertex.setColor(getColorFromPool(colorIndex, document.getColorPool()));   // Color from pool
112
113            if (_parent.valid())
114                _parent->addVertex(vertex);
115        }
116};
117
118RegisterRecordProxy<VertexCN> g_VertexCN(VERTEX_CN_OP);
119
120
121class VertexCT : public Record
122{
123    public:
124
125        VertexCT() {}
126
127        META_Record(VertexCT)
128
129    protected:
130
131        virtual ~VertexCT() {}
132
133        virtual void readRecord(RecordInputStream& in, Document& document)
134        {
[5229]135            /*int colorNameIndex =*/ in.readInt16();
[5038]136            uint16 flags = in.readUInt16();
137            osg::Vec3d coord = in.readVec3d();
138            osg::Vec2f uv = in.readVec2f();
139            osg::Vec4f packedColor = in.readColor32();
140            int colorIndex = in.readInt32(-1);
141
142            Vertex vertex;
143            vertex.setCoord(coord*document.unitScale());
[5136]144            vertex.setUV(0,uv);
[5038]145
146            // color
147            if (flags & PACKED_COLOR)
148                vertex.setColor(packedColor);                                               // Packed color
149            else if (colorIndex >= 0)
150                vertex.setColor(getColorFromPool(colorIndex, document.getColorPool()));   // Color from pool
151
152            if (_parent.valid())
153                _parent->addVertex(vertex);
154        }
155};
156
157RegisterRecordProxy<VertexCT> g_VertexCT(VERTEX_CT_OP);
158
159
160class VertexCNT : public Record
161{
162    public:
163
164        VertexCNT() {}
165
166        META_Record(VertexCNT)
167
168    protected:
169
170        virtual ~VertexCNT() {}
171
172        virtual void readRecord(RecordInputStream& in, Document& document)
173        {
[5229]174            /*int colorNameIndex =*/ in.readInt16();
[5038]175            uint16 flags = in.readUInt16();
176            osg::Vec3d coord = in.readVec3d();
177            osg::Vec3f normal = in.readVec3f();
178            osg::Vec2f uv = in.readVec2f();
179            osg::Vec4f packedColor = in.readColor32();
180            int colorIndex = in.readInt32(-1);
181
182            Vertex vertex;
183            vertex.setCoord(coord*document.unitScale());
184            vertex.setNormal(normal);
[5136]185            vertex.setUV(0,uv);
[5407]186           
[5038]187
[5407]188            if (!coord.valid())
189            {
190                osg::notify(osg::NOTICE)<<"Warning: data error detected in VertexCNT::readRecord coord="<<coord.x()<<" "<<coord.y()<<" "<<coord.z()<<std::endl;
191            }
192
193            if (!normal.valid())
194            {
195                osg::notify(osg::NOTICE)<<"Warning: data error detected in VertexCNT::readRecord normal="<<normal.x()<<" "<<normal.y()<<" "<<normal.z()<<std::endl;
196            }
197
198            if (!uv.valid())
199            {
200                osg::notify(osg::NOTICE)<<"Warning: data error detected in VertexCNT::readRecord uv="<<uv.x()<<" "<<uv.y()<<std::endl;
201            }
202
[5038]203            // color
204            if (flags & PACKED_COLOR)
205                vertex.setColor(packedColor);                                               // Packed color
206            else if (colorIndex >= 0)
207                vertex.setColor(getColorFromPool(colorIndex, document.getColorPool()));   // Color from pool
208
209            if (_parent.valid())
210                _parent->addVertex(vertex);
211        }
212};
213
214RegisterRecordProxy<VertexCNT> g_VertexCNT(VERTEX_CNT_OP);
215
216
[8563]217/** Absolute Vertex -
[5038]218  * version < 13
219  */
220class AbsoluteVertex : public Record
221{
222    public:
223
224        AbsoluteVertex() {}
225
226        META_Record(AbsoluteVertex)
227
228    protected:
229
230        virtual ~AbsoluteVertex() {}
231
232        virtual void readRecord(RecordInputStream& in, Document& document)
233        {
234            int32 x = in.readInt32();
235            int32 y = in.readInt32();
236            int32 z = in.readInt32();
237
238            Vertex vertex;
239
240            // coord
241            vertex.setCoord(osg::Vec3(x,y,z) * document.unitScale());
242
243            // optional texture coordinates
[7669]244            if (in.getRecordBodySize() > (4+4+4))
[5038]245            {
246                osg::Vec2f uv = in.readVec2f();
[5136]247                vertex.setUV(0,uv);
[5038]248            }
249
250            if (_parent.valid())
251                _parent->addVertex(vertex);
252        }
253};
254
255RegisterRecordProxy<AbsoluteVertex> g_AbsoluteVertex(OLD_ABSOLUTE_VERTEX_OP);
256
257
258/** Shaded Vertex
259  * version < 13
260  */
261class ShadedVertex : public Record
262{
263    public:
264
265        ShadedVertex() {}
266
267        META_Record(ShadedVertex)
268
269    protected:
270
271        virtual ~ShadedVertex() {}
272
273        virtual void readRecord(RecordInputStream& in, Document& document)
274        {
275            int32 x = in.readInt32();
276            int32 y = in.readInt32();
277            int32 z = in.readInt32();
[5229]278            /*uint8 edgeFlag =*/ in.readUInt8();
279            /*uint8 shadingFlag =*/ in.readUInt8();
[5038]280            int colorIndex = (int)in.readInt16();
281
282            Vertex vertex;
283
284            // coord
285            vertex.setCoord(osg::Vec3(x,y,z) * document.unitScale());
286
287            // color
288            if (colorIndex >= 0)
289                vertex.setColor(getColorFromPool(colorIndex, document.getColorPool()));   // Color from pool
290
291            // optional texture coordinates
[7669]292            if (in.getRecordBodySize() > (4+4+4+1+1+2))
[5038]293            {
294                osg::Vec2f uv = in.readVec2f();
[5136]295                vertex.setUV(0,uv);
[5038]296            }
297
298            if (_parent.valid())
299                _parent->addVertex(vertex);
300        }
301};
302
303RegisterRecordProxy<ShadedVertex> g_ShadedVertex(OLD_SHADED_VERTEX_OP);
304
305
306/** Normal Vertex
307  * version < 13
308  */
309class NormalVertex : public Record
310{
311    public:
312
313        NormalVertex() {}
314
315        META_Record(NormalVertex)
316
317    protected:
318
319        virtual ~NormalVertex() {}
320
321        virtual void readRecord(RecordInputStream& in, Document& document)
322        {
323            int32 x = in.readInt32();
324            int32 y = in.readInt32();
325            int32 z = in.readInt32();
[5229]326            /*uint8 edgeFlag =*/ in.readUInt8();
327            /*uint8 shadingFlag =*/ in.readUInt8();
[5038]328            int colorIndex = (int)in.readInt16();
329            osg::Vec3f normal = in.readVec3d();
330
331            Vertex vertex;
332            vertex.setCoord(osg::Vec3(x,y,z) * document.unitScale());
333            vertex.setNormal(normal / (float)(1L<<30));
334
335            // color
336            if (colorIndex >= 0)
337                vertex.setColor(getColorFromPool(colorIndex, document.getColorPool()));   // Color from pool
338
339            // optional texture coordinates
[7669]340            if (in.getRecordBodySize() > (4+4+4+1+1+2+3*8))
[5038]341            {
342                osg::Vec2f uv = in.readVec2f();
[5136]343                vertex.setUV(0,uv);
[5038]344            }
345
346            if (_parent.valid())
347                _parent->addVertex(vertex);
348        }
349};
350
351RegisterRecordProxy<NormalVertex> g_NormalVertex(OLD_NORMAL_VERTEX_OP);
352
353} // end namespace
Note: See TracBrowser for help on using the browser.