X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fscenegraph.h;fp=cinelerra-5.1%2Fcinelerra%2Fscenegraph.h;h=ef10c9c8447a0c9c333e51d43651e3bbc6c6868f;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=0000000000000000000000000000000000000000;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/scenegraph.h b/cinelerra-5.1/cinelerra/scenegraph.h new file mode 100644 index 00000000..ef10c9c8 --- /dev/null +++ b/cinelerra-5.1/cinelerra/scenegraph.h @@ -0,0 +1,207 @@ +/* + * CINELERRA + * Copyright (C) 2011 Adam Williams + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + + +#ifndef SCENEGRAPH_H +#define SCENEGRAPH_H + + +#include "affine.inc" +#include "arraylist.h" +#include "overlayframe.h" +#include "vframe.h" + + +// Main scene graph objects +class SceneGraph; + + + + +// Base class for all scene objects +class SceneNode +{ +public: + SceneNode(); + SceneNode(const char *title); + SceneNode(VFrame *image, int private_image, float x, float y); + virtual ~SceneNode(); + + void append(SceneNode *node); + SceneNode* get_node(int number); + void reset(); +// Copy values & image pointer but not subnodes yet + void copy_ref(SceneNode *node); +// Not recursive yet + int get_memory_usage(); + virtual void dump(int indent); + void render(VFrame *frame, int do_camera); +// 2D coordinate transformation + void transform_coord( + float *x, + float *y, + float *sx, + float *sy, + float *ry); + int get_flip(); + + ArrayList nodes; + +// for 2D + VFrame *image; + int private_image; + +// Move. Only x & y are used in 2D. +// x,y is the top left corner in 2D + float x, y, z; +// Scale. Only sx & sy are used in 2D + float sx, sy, sz; +// Rotate in degrees. Only ry is used in 2D + float rx, ry, rz; +// causes x,y to be the top right corner in 2D + int flip; + int hidden; + char title[BCTEXTLEN]; +// Set in append() + SceneNode *parent; + SceneGraph *scene; +}; + + +class SceneGraph : public VFrameScene +{ +public: + SceneGraph(); + virtual ~SceneGraph(); + + SceneNode* get_node(int number); + void append(SceneNode *node); + void append_camera(SceneNode *node); +// Render 2D scene + void render(VFrame *frame, int cpus); + void dump(); + void transform_camera(VFrame *frame, + float *x, + float *y, + float *sx, + float *sy, + int flip); + + + ArrayList nodes; + ArrayList cameras; + int current_camera; + AffineEngine *affine; + OverlayFrame *overlayer; + int cpus; +}; + + + +class SceneTransform : public SceneNode +{ +public: + SceneTransform(); + virtual ~SceneTransform(); + +}; + + + +class SceneLight : public SceneNode +{ +public: + SceneLight(); + virtual ~SceneLight(); + + + double r, g, b; +}; + + +class SceneCamera : public SceneNode +{ +public: + SceneCamera(); + virtual ~SceneCamera(); + + virtual void dump(int indent); + +// Top left of box to look at in 2D + double at_x, at_y, at_z; + double scale; +}; + +class SceneMaterial : public SceneNode +{ +public: + SceneMaterial(); + virtual ~SceneMaterial(); + + double r, g, b, a; + char *texture; + double s, t; +}; + + + +// Base class for shapes +class SceneShape : public SceneNode +{ +public: + SceneShape(); + ~SceneShape(); + +// Pivot for shapes + double pivot_x, pivot_y, pivot_z; +}; + + + +class SceneCylinder : public SceneShape +{ +public: + SceneCylinder(); + virtual ~SceneCylinder(); +}; + +class SceneSphere : public SceneShape +{ +public: + SceneSphere(); + virtual ~SceneSphere(); +}; + +class SceneBox : public SceneShape +{ +public: + SceneBox(); + virtual ~SceneBox(); +}; + + + + + +#endif + + +