Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2009-08-11 11:49:12 +0000
committerStijn Buys <ingar@osirion.org>2009-08-11 11:49:12 +0000
commit25bcd92706ce2cd6aee24cfb81e9ff2fd7dd4820 (patch)
tree19e71f817ffc36247f4db718454f3634904284b0 /src/render
parenta2ae048571310e80ba7502f1d81b5dd2eb1e38fa (diff)
misc_model support
Diffstat (limited to 'src/render')
-rw-r--r--src/render/draw.cc28
-rw-r--r--src/render/draw.h1
2 files changed, 23 insertions, 6 deletions
diff --git a/src/render/draw.cc b/src/render/draw.cc
index c4c18c3..339f127 100644
--- a/src/render/draw.cc
+++ b/src/render/draw.cc
@@ -25,11 +25,13 @@ namespace render
size_t Stats::tris = 0;
size_t Stats::quads = 0;
+size_t Stats::fragments = 0;
void Stats::clear()
{
tris = 0;
quads = 0;
+ fragments = 0;
}
math::Vector3f v0(1, -1, 1);
@@ -556,6 +558,7 @@ void draw_fragment(model::Fragment *fragment, bool draw_details)
gl::end();
}
+ Stats::fragments++;
}
void draw_model_fragments(model::Model *model,
@@ -579,12 +582,25 @@ void draw_model_fragments(model::Model *model,
model::FragmentGroup *group = (*git);
- if (group->type() == model::FragmentGroup::Rotate) {
+ if (group->transform()) {
gl::push();
- gl::translate(group->location());
- float rotation_angle = math::degrees360f(core::application()->time() * group->speed());
- gl::rotate(-rotation_angle, group->axis().forward());
- gl::translate(group->location()* -1.0f);
+ //gl::translate(group->location());
+ // FIXME this will go wrong if a Rotate group is imported as submodel
+ if (group->type() == model::FragmentGroup::Rotate) {
+ gl::translate(group->location());
+ float rotation_angle = math::degrees360f(core::application()->time() * group->speed());
+ gl::rotate(-rotation_angle, group->axis().forward());
+ gl::translate(group->location()* -1.0f);
+ } else {
+ float s = group->scale();
+ if (s == 0.0f)
+ s = 1.0f;
+ gl::scale(s, s, s);
+ gl::translate(group->location() / s);
+ }
+
+
+
}
for (model::FragmentGroup::iterator fit = group->begin(); fit != group->end(); fit++) {
@@ -731,7 +747,7 @@ void draw_model_fragments(model::Model *model,
draw_fragment(fragment, detail);
}
- if (group->type() == model::FragmentGroup::Rotate) {
+ if (group->transform()) {
gl::pop();
}
}
diff --git a/src/render/draw.h b/src/render/draw.h
index 14a9767..382d7cd 100644
--- a/src/render/draw.h
+++ b/src/render/draw.h
@@ -37,6 +37,7 @@ public:
static size_t tris;
static size_t quads;
+ static size_t fragments;
};
}