Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

/Users/blackie/Documents/myRepository/phobosengine-vc2005/phobosengine/phobosengine/MeshFactory.h

Go to the documentation of this file.
00001 
00002 
00003 #ifndef MESHFACTORY_H
00004 #define MESHFACTORY_H
00005 
00006 
00007 #include "Mesh.h"
00008 #include "SingleTexturedMesh.h"
00009 #include "TextureDatabase.h"
00010 #include "Texture.h"
00011 #include "Triangle.h"
00012 #include "Vector2f.h"
00013 #include "Vector3f.h"
00014 
00015 
00016 namespace pge {
00017         namespace meshfactory {
00018 
00019                 //
00020                 //
00021                 //
00022                 static Triangle createTriangle(Texture *texture, Vector3f a, Vector3f b, Vector3f c, Vector2f aUV, Vector2f bUV, Vector2f cUV) {
00023                         Triangle triangle;
00024 
00025                         triangle.m_vertices[0] = a;
00026                         triangle.m_vertices[1] = b;
00027                         triangle.m_vertices[2] = c;
00028 
00029                         // Set texcoords.
00030                         triangle.m_texCoords[0] = aUV;
00031                         triangle.m_texCoords[1] = bUV;
00032                         triangle.m_texCoords[2] = cUV;
00033 
00034                         triangle.m_plane = new Plane(a, b, c);
00035                         if(texture != NULL) {
00036                                 triangle.m_texture = texture;
00037                         } else {
00038                                 triangle.m_texture = TextureDatabase::getInstance()->getDefaultTexture();
00039                         }
00040 
00041                         return triangle;
00042                 }
00043 
00044                 //
00045                 //
00046                 //
00047                 static Triangle createTriangle(Vector3f a, Vector3f b, Vector3f c, Vector2f aUV, Vector2f bUV, Vector2f cUV) {
00048                         Triangle triangle;
00049 
00050                         triangle.m_vertices[0] = a;
00051                         triangle.m_vertices[1] = b;
00052                         triangle.m_vertices[2] = c;
00053 
00054                         // Set texcoords.
00055                         triangle.m_texCoords[0] = aUV;
00056                         triangle.m_texCoords[1] = bUV;
00057                         triangle.m_texCoords[2] = cUV;
00058 
00059                         triangle.m_plane = new Plane(a, b, c);
00060                         triangle.m_texture = TextureDatabase::getInstance()->getDefaultTexture();
00061 
00062                         return triangle;
00063                 }
00064 
00065 
00066                 //
00067                 //
00068                 //
00069                 static Mesh* createCuboid(Vector3f minCorner, Vector3f maxCorner) {
00070                         SingleTexturedMesh *mesh = new SingleTexturedMesh();
00071                         Vector3f points[8];
00072 
00073 
00074                         points[0] = Vector3f(minCorner.m_v[0], minCorner.m_v[1], minCorner.m_v[2]);
00075                         points[1] = Vector3f(maxCorner.m_v[0], minCorner.m_v[1], minCorner.m_v[2]);
00076                         points[2] = Vector3f(maxCorner.m_v[0], maxCorner.m_v[1], minCorner.m_v[2]);
00077                         points[3] = Vector3f(minCorner.m_v[0], maxCorner.m_v[1], minCorner.m_v[2]);
00078 
00079                         points[4] = Vector3f(minCorner.m_v[0], minCorner.m_v[1], maxCorner.m_v[2]);
00080                         points[5] = Vector3f(maxCorner.m_v[0], minCorner.m_v[1], maxCorner.m_v[2]);
00081                         points[6] = Vector3f(maxCorner.m_v[0], maxCorner.m_v[1], maxCorner.m_v[2]);
00082                         points[7] = Vector3f(minCorner.m_v[0], maxCorner.m_v[1], maxCorner.m_v[2]);
00083 
00084                         // Front and back
00085                         mesh->addTriangle(createTriangle(points[0], points[1], points[2], Vector2f(0.0f,
00086                                 0.0f), Vector2f(0.0f, 1.0f), Vector2f(1.0f, 1.0f)));
00087                         mesh->addTriangle(createTriangle(points[0], points[2], points[3], Vector2f(0.0f,
00088                                 0.0f), Vector2f(1.0f, 1.0f), Vector2f(1.0f, 0.0f)));
00089                         mesh->addTriangle(createTriangle(points[4], points[5], points[6], Vector2f(0.0f,
00090                                 0.0f), Vector2f(0.0f, 1.0f), Vector2f(1.0f, 1.0f)));
00091                         mesh->addTriangle(createTriangle(points[4], points[6], points[7], Vector2f(0.0f,
00092                                 0.0f), Vector2f(1.0f, 1.0f), Vector2f(1.0f, 0.0f)));
00093 
00094                         // Left and right
00095                         mesh->addTriangle(createTriangle(points[0], points[4], points[7], Vector2f(0.0f,
00096                                 0.0f), Vector2f(0.0f, 1.0f), Vector2f(1.0f, 1.0f)));
00097                         mesh->addTriangle(createTriangle(points[0], points[7], points[3], Vector2f(0.0f,
00098                                 0.0f), Vector2f(1.0f, 1.0f), Vector2f(1.0f, 0.0f)));
00099                         mesh->addTriangle(createTriangle(points[5], points[1], points[2], Vector2f(0.0f,
00100                                 0.0f), Vector2f(0.0f, 1.0f), Vector2f(1.0f, 1.0f)));
00101                         mesh->addTriangle(createTriangle(points[5], points[2], points[6], Vector2f(0.0f,
00102                                 0.0f), Vector2f(1.0f, 1.0f), Vector2f(1.0f, 0.0f)));
00103 
00104                         // Top and bottom
00105                         mesh->addTriangle(createTriangle(points[7], points[6], points[2], Vector2f(0.0f,
00106                                 0.0f), Vector2f(0.0f, 1.0f), Vector2f(1.0f, 1.0f)));
00107                         mesh->addTriangle(createTriangle(points[7], points[2], points[3], Vector2f(0.0f,
00108                                 0.0f), Vector2f(1.0f, 1.0f), Vector2f(1.0f, 0.0f)));
00109                         mesh->addTriangle(createTriangle(points[4], points[5], points[1], Vector2f(0.0f,
00110                                 0.0f), Vector2f(0.0f, 1.0f), Vector2f(1.0f, 1.0f)));
00111                         mesh->addTriangle(createTriangle(points[4], points[1], points[0], Vector2f(0.0f,
00112                                 0.0f), Vector2f(1.0f, 1.0f), Vector2f(1.0f, 0.0f)));
00113                         return mesh;
00114                 }
00115         };
00116 };
00117 
00118 #endif

Generated on Mon Oct 16 12:08:10 2006 for Phobosengine by doxygen 1.3.4