source: GTP/trunk/App/Demos/Illum/StochasticIteration/object.h @ 1808

Revision 1808, 6.7 KB checked in by szirmay, 18 years ago (diff)
Line 
1/**
2@author dr. Szirmay-Kalos Lázsló DirectX functionality added by Barsi Attila
3@copyright BMGE Department of Control Engineering and Informatics
4@brief Simple Maya .obj file loader.
5*/
6#ifndef OBJECT_H
7#define OBJECT_H
8
9
10/**
11        Tringle structure. It is composed of:
12        Vertex indexes.
13        Texture indexes.
14        Per face center, normal and up vectors.
15        BRDF color and emission.
16        Triangle area, and triangle texture area.
17*/
18struct Triangle {
19        int v[3];
20        int t[3];
21        Vector center, normal, up;
22        Color BRDF, emission;
23        float area, texarea;
24public:
25        /**
26                Constructor.
27        */
28        Triangle( ) { }
29        /**
30                Constructor.
31                @param i10 vertex index one
32                @param i20 vertex index two
33                @param i30 vertex index three
34                @param t10 texture coordinate index one
35                @param t20 texture coordinate index two
36                @param t30 texture coordinate index three
37        */
38        Triangle(int i10, int t10, int i20, int t20, int i30, int t30 ) {
39                v[0] = i10; t[0] = t10;
40                v[1] = i20; t[1] = t20;
41                v[2] = i30; t[2] = t30;
42        }
43};
44
45//Maximum vertex count.
46#define MAXVERTICES  100000
47//Maximum triangle count.
48#define MAXTRIANGLES 100000
49
50//Red converter
51#define RED(i)   ((i) >> 16)
52//Green converter
53#define GREEN(i) (((i) >> 8) & 255)
54//Blue converter
55#define BLUE(i)  ((i) & 255)
56
57class ObjectModel {
58public:
59        /**Array of all vertices.
60        */
61        Vector   vertices[MAXVERTICES];
62        /**
63        Array of all texture coordinates.
64        */
65        Vector   texcoords[MAXVERTICES];
66        /**
67        Array of all faces.
68        */
69        Triangle triangles[MAXTRIANGLES];
70        /**
71        Number of vertices, number of texture coordinates, number of triangles.
72        */
73        int              nvertices, ntexcoords, ntriangles;
74       
75       
76        /**
77        Total surface area, total texture surface area.
78        */
79        float    surface_area, texsurface_area;
80       
81        /**
82                A pointer to the log file.
83        */
84        FILE* logFile;
85        /**
86                A boolean indicating load success/faliliure.
87        */
88        bool loaded;
89        /**
90                Constructor.
91        */
92        ObjectModel();
93        /**
94                Constructor.
95                @param offset in the stream.
96        */
97        ObjectModel(int offset);
98        /**
99                Destructor.
100        */
101        ~ObjectModel( );
102        /**
103                Adds a vertex to the array of 3D vertices.
104                @param x the x coordinate.
105        */
106        void AddVertex( float x, float y, float z );
107        /**
108                Adds a vertex to the array of 2D texture coordinates.
109        */
110        void AddTexCoord( float u, float v );
111        /**
112        Adds a triangle to the array of triangles.
113        */
114        void AddTriangle( int i1, int t1, int i2, int t2, int i3, int t3 );
115        /**
116                This must be called while executing the OnInitDevice callback of the D3D utility.
117                @return Error code.
118        */
119        HRESULT initDeviceObjects(LPDIRECT3DDEVICE9 device);
120        /**
121                This must be called while executing the OnResetDevice callback of the D3D utility.
122                @return Error code.
123        */
124        HRESULT resetDeviceObjects(LPDIRECT3DDEVICE9 device);
125        /**
126                Returns all model vertices.
127                @return An array of model vertices.
128        */
129        D3DVERTEX_MODEL* getModelVertices();
130        /**
131                Tells if the vertex rotation is CW or CCW
132                @return The vertex rotation.
133        */
134        bool isVertexRotationClockwise();
135        /**
136                Returns the loaded boolean.
137                @return The loaded flag.
138        */
139        bool isLoaded();
140        /**
141                Creates D3D vertices from the arrays.
142        */     
143        void CreateD3DVertices();
144        /**
145                Loads an ALIAS Maya .obj file.
146                @param fname File name.
147                @param ccw counterclockwise? false/true:CW/CCW.
148                @param cw Direct3D vertices are clockwise ? false/true:CW/CCW.
149                @param isLight is the object a light source?
150                @param su u coordinate scale
151                @param sv v coordinate scale
152                @param ou u coordinate offset
153                @param ov v coordinate offset
154               
155        */
156        void Load( char * fname, bool ccw,bool cw, bool islight, float su, float sv, float ou, float ov ) ;
157        /**
158                Renders all loaded models.
159                @param renderToAtlas Renders all loaded in render-to-atlas mode.
160        */
161        HRESULT Render(bool renderToAtlas);
162        /**
163                Renders all loaded models with the given D3DXEffect, modelview and modelviewprojection matrices.
164                @param m_pEffect Pointer to the D3DXEffect.
165                @param renderToAtlas Renders all loaded in render-to-atlas mode.
166                @param modelview the Model-View matrix.
167                @param modelview the Model-View-Projection matrix.
168                @return Error code.
169        */
170        HRESULT RenderWithFX(LPD3DXEFFECT m_pEffect,bool renderToAtlas,D3DXMATRIX modelview,D3DXMATRIX modelviewproj);
171        /**
172                Returns center, normal and up vectors of the 'i'th triangle.
173                @param i the index of the triangle.
174                @param center the center of the triangle.
175                @param normal the normal of the triangle.
176                @param up the up vector of the triangle.
177                @return Error code.
178        */
179        void GetCenterTriangle( int i, Vector& center, Vector& normal, Vector& up );
180        /**
181                Sets the current offset for the next model. You should not call this directly!
182                @param offset (the sum of the face count of all previously loaded objects).
183        */
184        void setOffset(int offset){this->offset=offset;}
185        /**
186                Returns the current offset (the sum of the face count of all previously loaded objects).
187                @return The current offset.
188        */
189        int getOffset(){return offset;}
190        /**
191                Returns the vertex declaration for the model.
192                @return The vertex declaration.
193        */
194        IDirect3DVertexDeclaration9* getVertexDeclaration(){return decl;}
195        /**
196                Returns the world transform matrix of the model.
197                @return The transform matrix.
198        */
199        D3DXMATRIX getTransformMatrix(){return transformMatrix;}
200        /**
201                Sets the world transform matrix of the model.
202        */
203        void setTransformMatrix(D3DXMATRIX transformMatrix){this->transformMatrix=transformMatrix;}
204        /**
205                Returns the texture name of the model.
206                @return The texture name.
207        */
208        LPCTSTR getTextureName(){return textureName;};
209        /**
210                Forces a texture name.
211                @param textureName The name of the texture.
212        */
213        void setTextureName(LPCTSTR textureName){this->textureName=textureName;};
214        /**
215                Returns the shininess parameter.
216                @return The shininess.
217        */
218        float getShininess(){return shininess;}
219        /**
220                Sets the shininess parameter.
221                @param shininess The shininess.
222        */
223        void setShininess(float shininess){this->shininess=shininess;}
224
225private:
226        /**
227        An array of model vertices. Corresponding to the required FVF.
228        */
229        D3DVERTEX_MODEL*        modelVertices;
230        /**
231                D3D vertex rotation clockwise.
232        */
233        bool vertexRotationClockwise;
234        /**
235                Vertex declaration created.
236        */
237        bool vertexDeclarationCreated;
238        /**
239                The d3d device.
240        */
241        LPDIRECT3DDEVICE9 device;
242        /**
243                The D3D vertex buffer for the model.
244        */
245        LPDIRECT3DVERTEXBUFFER9 vertexBuffer;
246        /**
247                The triangle offset of the model.
248        */
249        int              offset;
250        /**
251       
252                The shininess parameter of the model.
253        */
254        float shininess;
255        /**
256                The texture name of the model.
257        */
258        LPCTSTR textureName;
259        /**
260                The D3D vertex declaration of the model.
261        */
262        LPDIRECT3DVERTEXDECLARATION9 decl;
263        /**
264                The world transform matrix of the model.
265        */
266        D3DXMATRIX transformMatrix;
267};
268
269#endif
Note: See TracBrowser for help on using the repository browser.