1 | #include "OgreTypeConverter.h" |
---|
2 | #include "Mesh.h" |
---|
3 | #include <OgreManualObject.h> |
---|
4 | #include <OgreSceneManager.h> |
---|
5 | |
---|
6 | |
---|
7 | namespace Ogre |
---|
8 | { |
---|
9 | |
---|
10 | GtpVisibilityPreprocessor::AxisAlignedBox3 OgreTypeConverter::ConvertFromOgre(const AxisAlignedBox &box)
|
---|
11 | {
|
---|
12 | const GtpVisibilityPreprocessor::Vector3 bmin = ConvertFromOgre(box.getMinimum());
|
---|
13 | const GtpVisibilityPreprocessor::Vector3 bmax = ConvertFromOgre(box.getMaximum());
|
---|
14 |
|
---|
15 | return GtpVisibilityPreprocessor::AxisAlignedBox3(bmin, bmax);
|
---|
16 | }
|
---|
17 |
|
---|
18 |
|
---|
19 | GtpVisibilityPreprocessor::Vector3 OgreTypeConverter::ConvertFromOgre(const Vector3 &v)
|
---|
20 | {
|
---|
21 | return GtpVisibilityPreprocessor::Vector3(v.x, v.y, v.z);
|
---|
22 | }
|
---|
23 |
|
---|
24 |
|
---|
25 | AxisAlignedBox OgreTypeConverter::ConvertToOgre(const GtpVisibilityPreprocessor::AxisAlignedBox3 &box)
|
---|
26 | {
|
---|
27 | const Vector3 bmin = ConvertToOgre(box.Min());
|
---|
28 | const Vector3 bmax = ConvertToOgre(box.Max());
|
---|
29 |
|
---|
30 | return AxisAlignedBox(bmin, bmax);
|
---|
31 | }
|
---|
32 |
|
---|
33 |
|
---|
34 | Vector3 OgreTypeConverter::ConvertToOgre(const GtpVisibilityPreprocessor::Vector3 &v) |
---|
35 | { |
---|
36 | return Vector3(v.getX(), v.getY(), v.getZ()); |
---|
37 | } |
---|
38 | |
---|
39 | |
---|
40 | ManualObject *OgreTypeConverter::ConvertToOgre(GtpVisibilityPreprocessor::Mesh *mesh, SceneManager *sceneMgr) |
---|
41 | { |
---|
42 | //if (!mesh) return NULL; |
---|
43 | |
---|
44 | char name[100]; |
---|
45 | sprintf(name, "mesh%06d", mesh->GetId()); |
---|
46 | |
---|
47 | ManualObject* manual = sceneMgr->createManualObject(name);
|
---|
48 | manual->begin("BaseWhiteNoLighting", RenderOperation::OT_LINE_STRIP);
|
---|
49 |
|
---|
50 | // create vertices
|
---|
51 | GtpVisibilityPreprocessor::VertexContainer::const_iterator vit,
|
---|
52 | vit_end = mesh->mVertices.end();
|
---|
53 |
|
---|
54 | for (vit = mesh->mVertices.begin(); vit != vit_end; ++ vit)
|
---|
55 | {
|
---|
56 | const GtpVisibilityPreprocessor::Vector3 vtx = *vit;
|
---|
57 | manual->position(vtx.x, vtx.y, vtx.z);
|
---|
58 | manual->colour(1.0f, 0.0f, 0.0f);
|
---|
59 | }
|
---|
60 |
|
---|
61 | // create faces indices
|
---|
62 | GtpVisibilityPreprocessor::FaceContainer::const_iterator fit, fit_end = mesh->mFaces.end();
|
---|
63 |
|
---|
64 | for (fit = mesh->mFaces.begin(); fit != fit_end; ++ fit)
|
---|
65 | {
|
---|
66 | GtpVisibilityPreprocessor::Face *face = *fit;
|
---|
67 | GtpVisibilityPreprocessor::VertexIndexContainer::const_iterator
|
---|
68 | iit, iit_end = face->mVertexIndices.end();
|
---|
69 |
|
---|
70 | for (iit = face->mVertexIndices.begin(); iit != iit_end; ++ iit)
|
---|
71 | {
|
---|
72 | const int index = *iit;
|
---|
73 | manual->index(index);
|
---|
74 | } |
---|
75 | } |
---|
76 | |
---|
77 | manual->end();
|
---|
78 | |
---|
79 | return manual; |
---|
80 | } |
---|
81 | |
---|
82 | |
---|
83 | } |
---|