#include "SceneEntityConverter.h" #include "SceneEntity.h" #include "Geometry.h" #include "Shape.h" #include "Plane3.h" using namespace std; namespace CHCDemoEngine { SceneEntity *SceneEntityConverter::ConvertBox(const AxisAlignedBox3 &box, Material *mat, Transform3 *trafo) { SceneEntity *ent = new SceneEntity(trafo); vector triangles; box.Triangulate(triangles); Vector3 *vertices = new Vector3[36]; Vector3 *normals = new Vector3[36]; for (size_t i = 0; i < triangles.size(); ++ i) { Triangle3 tri = triangles[i]; vertices[i * 3 + 0] = tri.mVertices[0]; vertices[i * 3 + 1] = tri.mVertices[1]; vertices[i * 3 + 2] = tri.mVertices[2]; Vector3 normal = tri.GetNormal(); normals[i * 3 + 0] = normal; normals[i * 3 + 1] = normal; normals[i * 3 + 2] = normal; } Geometry *geom = new Geometry(vertices, normals, NULL, 36, true, NULL); Shape *shape = new Shape(geom, mat); ent->AddShape(shape); LODLevel lodLevel(0); lodLevel.AddShape(shape); ent->AddLODLevel(lodLevel); return ent; } SceneEntity *SceneEntityConverter::ConvertSphere(float radius, float xspans, float yspans, Material *mat, Transform3 *trafo) { // todo return NULL; } SceneEntity *SceneEntityConverter::ConvertPlane(const Plane3 &plane, float xsize, float ysize, float xspans, float yspans, Material *mat, Transform3 *trafo) { SceneEntity *ent = new SceneEntity(trafo); vector triangles; Vector3 x1, x2, x3, x4; float xsize_h = xsize * 0.5f; float ysize_h = xsize * 0.5f; x1 = Vector3(xsize_h, ysize_h, 0); x2 = Vector3(xsize_h, -ysize_h, 0); x3 = Vector3(-xsize_h, -ysize_h, 0); x4 = Vector3(-xsize_h, ysize_h, 0); triangles.push_back(Triangle3(x3, x2, x1)); triangles.push_back(Triangle3(x3, x1, x4)); Vector3 *vertices = new Vector3[6]; Vector3 *normals = new Vector3[6]; Texcoord2 *tex = new Texcoord2[6]; tex[0].first = 0; tex[0].second = 0; tex[1].first = 50; tex[1].second = 0; tex[2].first = 50; tex[2].second = 50; tex[3].first = 0; tex[3].second = 0; tex[4].first = 50; tex[4].second = 50; tex[5].first = 0; tex[5].second = 50; for (size_t i = 0; i < triangles.size(); ++ i) { Triangle3 tri = triangles[i]; vertices[i * 3 + 0] = tri.mVertices[0]; vertices[i * 3 + 1] = tri.mVertices[1]; vertices[i * 3 + 2] = tri.mVertices[2]; Vector3 normal = tri.GetNormal(); normals[i * 3 + 0] = normal; normals[i * 3 + 1] = normal; normals[i * 3 + 2] = normal; } Geometry *geom = new Geometry(vertices, normals, tex, 6, true, NULL); Shape *shape = new Shape(geom, mat); ent->AddShape(shape); LODLevel lodLevel(0); lodLevel.AddShape(shape); ent->AddLODLevel(lodLevel); return ent; } }