*/
class VertexBuilder
{
+public:
+ class PushMatrix
+ {
+ private:
+ VertexBuilder &bld;
+ Matrix mtx;
+
+ public:
+ PushMatrix(VertexBuilder &b): bld(b), mtx(bld.mtx) { }
+ ~PushMatrix() { bld.mtx = mtx; }
+ };
+
protected:
- MatrixStack mtx;
+ Matrix mtx;
Vector3 nor;
Color col;
std::map<unsigned, Vector4> texc;
virtual ~VertexBuilder() { }
- MatrixStack &matrix()
+ void set_matrix(const Matrix &m)
+ { mtx = m; }
+
+ void transform(const Matrix &m)
+ { mtx *= m; }
+
+ const Matrix &get_matrix() const
{ return mtx; }
void vertex(float x, float y)
{ vertex(Vector4(v.x, v.y, v.z, 1)); }
void vertex(const Vector4 &v)
- { vertex_(mtx.top()*v); }
+ { vertex_(mtx*v); }
protected:
virtual void vertex_(const Vector4 &) = 0;
void normal(const Vector3 &n)
{
- Vector4 tn = mtx.top()*Vector4(n.x, n.y, n.z, 0);
+ Vector4 tn = mtx*Vector4(n.x, n.y, n.z, 0);
nor = Vector3(tn.x, tn.y, tn.z);
}
void tangent(const Vector3 &t)
{
- Vector4 tt = mtx.top()*Vector4(t.x, t.y, t.z, 0);
+ Vector4 tt = mtx*Vector4(t.x, t.y, t.z, 0);
attrib(get_component_type(TANGENT3), tt);
}
void binormal(const Vector3 &b)
{
- Vector4 tb = mtx.top()*Vector4(b.x, b.y, b.z, 0);
+ Vector4 tb = mtx*Vector4(b.x, b.y, b.z, 0);
attrib(get_component_type(BINORMAL3), tb);
}