Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

PhxGraphicsEngine.h

Go to the documentation of this file.
00001 #ifndef PHX_GRAPHICS_ENGINE_H
00002 #define PHX_GRAPHICS_ENGINE_H
00003 
00004 #include <Phx/PhxConfig.h>
00005 #include <Phx/PhxTypes.h>
00006 #include <Phx/Core/PhxCore.h>
00007 #include <Phx/Core/PhxNamedInterface.h>
00008 #include <Phx/Util/PhxMatrix.h>
00009 #include <Phx/Util/PhxQuaternion.h>
00010 #include <Phx/Util/PhxColor.h>
00011 #include <Phx/Graphics/PhxWindowInformation.h>
00012 
00018 namespace Phx {
00019 
00020 
00054   class GraphicsEngine : public NamedInterface {
00055   public:
00056     static const NamedInterface::Type  INTERFACE_TYPE;
00057     static const String                INTERFACE_TYPE_NAME;
00058 
00059     static const NamedInterface::Identifier GRAPHICS_ENGINE_IDENTIFIER;
00060     static const String                     GRAPHICS_ENGINE_NAME;
00061 
00062     class Node;
00063 
00064     // Scene element types
00065     class Light;
00066     class PointLight;
00067     class DirectionalLight;
00068     class SpotLight;
00069     class Geometry;
00070     class BillboardGroup;
00071     class Billboard;
00072     class Camera;
00073     class SkyBox;
00074     class TerrainGeometry;
00075 
00076     // Descriptions for various elements
00077     class GraphicsEngineDescription;
00078     class GeometryDescription;
00079     class BillboardGroupDescription;
00080     class BillboardDescription;
00081     class MeshDescription;
00082     class MaterialDescription;
00083     class LightDescription;
00084     class PointLightDescription;
00085     class DirectionalLightDescription;
00086     class SpotLightDescription;
00087     class TerrainGeometryDescription;
00088 
00101     virtual Ptr<Node> newNode(const String& name = "") = 0;
00102 
00107     virtual Ptr<Node> skyBoxNode() = 0;
00108 
00124     virtual Ptr<WindowInformation> windowInformation(void) const = 0;
00125 
00126     // ------- primary client interface --------
00127 
00128     // Camera control
00129     virtual String currentCamera(void) const = 0;
00130     virtual void currentCamera(const String& cameraName) = 0;
00131     // std::vector<String> cameraNames(void) const = 0;
00132 
00133     // Ambrient light control
00137     virtual void setAmbrientLight(RgbaColor color) = 0;
00138 
00139     // Fog control
00143     virtual void setFog(void) = 0;
00144 
00148     virtual void setFog(RgbaColor color, double start, double end) = 0;
00149 
00153     virtual void setFog(RgbaColor color, double density) = 0;
00154   };
00155 
00168   class GraphicsEngine::Node : public LockedPtrInterface<Node> {
00169   public:
00170 
00187     virtual Ptr<Node> newNode(const String& name = "") = 0;
00188 
00189 
00190     // Scene graph element interfaces
00191     virtual Ptr<PointLight> newPointLight(const String& name = "") = 0;
00192     virtual Ptr<DirectionalLight> newDirectionalLight(const String& name = "") = 0;
00193     virtual Ptr<SpotLight> newSpotLight(const String& name = "") = 0;
00194 
00195     virtual Ptr<PointLight> newPointLight(const Ptr<const PointLightDescription>& description,
00196                                           const String& name = "") = 0;
00197     virtual Ptr<DirectionalLight> newDirectionalLight(const Ptr<const DirectionalLightDescription>& description,
00198                                                       const String& name = "") = 0;
00199     virtual Ptr<SpotLight> newSpotLight(const Ptr<const SpotLightDescription>& description,
00200                                         const String& name = "") = 0;
00201 
00202     virtual Ptr<SkyBox> newSkyBox(const Ptr<const GeometryDescription>& description,
00203                                       const String& name = "") = 0;
00204 
00205     virtual Ptr<BillboardGroup> newBillboardGroup(const Ptr<const BillboardGroupDescription>& description,
00206                                       const String& name = "") = 0;
00222     virtual Ptr<Geometry> newGeometry(const String& name = "") = 0;
00223     
00240     virtual Ptr<Geometry> newGeometry(const Ptr<const GeometryDescription>& description,
00241                                       const String& name = "") = 0;
00242 
00262     virtual Ptr<Camera> newCamera(const String& cameraName) = 0;
00263 
00272     virtual Ptr<TerrainGeometry> newTerrainGeometry(const Ptr<const TerrainGeometryDescription>& description,
00273                                                     const String& terrainName) = 0;
00274 
00281     virtual void position(const Vector3& position) = 0;
00282 
00289     virtual void orientation(const Quaternion& orientation) = 0;
00290 
00295     const Vector3& position(void) const { return mPosition; }
00296 
00301     const Quaternion& orientation(void) const { return mOrientation; }
00302 
00307     const String& name(void) const { return mName; }
00308 
00309   protected:
00310     void setName(const String& name) { mName = name; }
00311     void setPosition(const Vector3& position) { mPosition = position; }
00312     void setOrientation(const Quaternion& orientation) { mOrientation = orientation; }
00313 
00314   private:
00315     String     mName;
00316     Vector3    mPosition;
00317     Quaternion mOrientation;
00318   };
00319 
00320 
00325   class GraphicsEngine::Geometry : public LockedPtrInterface<Geometry> {
00326   public:
00327 
00335     virtual void mesh(const Ptr<const MeshDescription>& mesh) = 0;
00336 
00341     virtual Ptr<const MeshDescription> mesh(void) const = 0;
00342 
00371     virtual void material(uint32_t index,
00372                           const Ptr<const MaterialDescription>& material) = 0;
00373 
00384     virtual Ptr<const MaterialDescription> material(uint32_t index) const = 0;
00385 
00390     const String& name(void) const { return mName; }
00391 
00392   protected:
00393     void setName(const String& name) { mName = name; }
00394   private:
00395     String mName;
00396   };
00397 
00401   class GraphicsEngine::Camera : public LockedPtrInterface<Camera> {
00402   public:
00403     virtual double aspectRatio(void) const = 0;
00404 
00405     virtual void horizontalFieldOfView(double fovRadians) = 0;
00406     virtual double horizontalFieldOfView(void) const = 0;
00407 
00408     /*    virtual void verticalFieldOfView(double fovRadians) = 0;
00409     virtual double verticalFieldOfView(void) const = 0;
00410 
00411     virtual void focalLength(double focalLength) = 0;
00412     virtual double focalLength(void) const = 0;*/
00413 
00414     const String& name(void) const { return mName; }
00415 
00416   protected:
00417     void setName(const String& name) { mName = name; }
00418   private:
00419     String mName;
00420   };
00421 
00422 
00428   class GraphicsEngine::Light : public LockedPtrInterface<Camera> {
00429   public:
00439     virtual void specular(const RgbaColor& specular) = 0;
00440     
00445     virtual RgbaColor specular(void) const = 0;
00446     
00456     virtual void diffuse(const RgbaColor& diffuse) = 0;
00457     
00463     virtual RgbaColor diffuse(void) const = 0;
00464 
00466     // virtual double void attenuationRange(void) = 0;
00467     // double void attenuationRange(double attenuationRange) = 0;
00468     // virtual double void attenuationConstant(void) = 0;
00469     // double void attenuationConstant(double attenuationConstant) = 0;
00470     // virtual double void attenuationLinear(void) = 0;
00471     // double void attenuationLinear(double attenuationLinear) = 0;
00472     // virtual double void attenuationQuadratic(void) = 0;
00473     // double void attenuationQuadratic(double attenuationQuadratic) = 0;
00474 
00475     const String& name(void) const { return mName; }
00476 
00477   protected:
00478     void setName(const String& name) { mName = name; }
00479   private:
00480     String mName;
00481   };
00482 
00486   class GraphicsEngine::PointLight : public GraphicsEngine::Light {
00487   public:
00488   };
00489 
00493   class GraphicsEngine::DirectionalLight : public GraphicsEngine::Light {
00494   public:
00495     virtual void direction(const Vector3& direction) = 0;
00496     virtual Vector3 direction(void) const = 0;
00497   };
00498 
00502   class GraphicsEngine::SpotLight : public GraphicsEngine::Light {
00503   public:
00504     virtual void direction(const Vector3& direction) = 0;
00505     virtual Vector3 direction(void) const = 0;
00506 
00507     virtual void innerAngle(double innerAngle) = 0;
00508     virtual double innerAngle(void) const = 0;
00509 
00510     virtual void outerAngle(double outerAngle) = 0;
00511     virtual double outerAngle(void) const = 0;
00512   };
00513 
00517   class GraphicsEngine::SkyBox : public LockedPtrInterface<Geometry>{
00518   public:
00526     virtual void mesh(const Ptr<const MeshDescription>& mesh) = 0;
00527 
00532     virtual Ptr<const MeshDescription> mesh(void) const = 0;
00533 
00562     virtual void material(uint32_t index,
00563                           const Ptr<const MaterialDescription>& material) = 0;
00564 
00575     virtual Ptr<const MaterialDescription> material(uint32_t index) const = 0;
00576 
00581     const String& name(void) const { return mName; }
00582 
00588     virtual void setCustomParameter(int subEntity, int index, Vector4 parameters) = 0;
00589 
00590   protected:
00591     void setName(const String& name) { mName = name; }
00592   private:
00593     String mName;
00594   };
00595 
00599   class GraphicsEngine::BillboardGroup : public LockedPtrInterface<BillboardGroup>{
00600   public:
00623     virtual void material(const Ptr<const MaterialDescription>& material) = 0;
00624 
00631     virtual Ptr<const MaterialDescription> material() const = 0;
00632     
00633     virtual void billboard(int index, const Ptr<const BillboardDescription>& billboard) = 0;
00634     virtual Ptr<const BillboardDescription> billboard(int index) const = 0;
00635 
00640     const String& name(void) const { return mName; }
00641 
00646     virtual void setCustomParameter(int index, Vector4 parameters) = 0;
00647 
00648   protected:
00649     void setName(const String& name) { mName = name; }
00650   private:
00651     String mName;
00652   };
00653   
00654   class GraphicsEngine::Billboard : public LockedPtrInterface<BillboardGroup>{
00655     public:
00656       virtual void offset(Vector3 offset) = 0;
00657       virtual void offset(double x, double y, double z) = 0;
00658       virtual Vector3 offset(void) = 0;
00659 
00660       virtual void dimentions(Vector2 dim) = 0;
00661       virtual void dimentions(double width, double height) = 0;
00662       virtual Vector2 dimentions(void) = 0;
00663     };
00664 
00665   // ---------- DESCRIPTIONS ----------
00666 
00671   class GraphicsEngine::GraphicsEngineDescription : public Description {
00672   public:
00673     static const Description::Type DESCRIPTION_TYPE;
00674     static const String DESCRIPTION_TYPE_NAME;
00675 
00683     virtual void dataPath(const String& path) = 0;
00684 
00688     virtual String dataPath(void) const = 0;
00689   };
00690 
00691 
00700   class GraphicsEngine::LightDescription : public Description {
00701   public:
00711     virtual void specular(const RgbaColor& specular) = 0;
00712     
00717     const RgbaColor& specular(void) const { return mSpecular; }
00718     
00728     virtual void diffuse(const RgbaColor& diffuse) = 0;
00729     
00735     const RgbaColor& diffuse(void) const { return mDiffuse; }
00736 
00737   private:
00738     RgbaColor mSpecular;
00739     RgbaColor mDiffuse;
00740     
00741   protected:
00742     void setDiffuse(const RgbaColor& c) { mDiffuse = c; }
00743     void setSpecular(const RgbaColor& c) { mSpecular = c; }
00744   };
00745 
00746 
00750   class GraphicsEngine::PointLightDescription : 
00751   public GraphicsEngine::LightDescription {
00752   public:
00753     static const Description::Type DESCRIPTION_TYPE;
00754     static const String DESCRIPTION_TYPE_NAME;
00755   };
00756 
00760   class GraphicsEngine::DirectionalLightDescription : 
00761   public GraphicsEngine::LightDescription {
00762   public:
00763     static const Description::Type DESCRIPTION_TYPE;
00764     static const String DESCRIPTION_TYPE_NAME;
00765 
00766     virtual void direction(const Vector3& direction) = 0;
00767     virtual Vector3 direction(void) const = 0;
00768   };
00769 
00773   class GraphicsEngine::SpotLightDescription : 
00774   public GraphicsEngine::LightDescription {
00775   public:
00776     static const Description::Type DESCRIPTION_TYPE;
00777     static const String DESCRIPTION_TYPE_NAME;
00778 
00779     virtual void direction(const Vector3& direction) = 0;
00780     virtual Vector3 direction(void) const = 0;
00781 
00782     virtual void innerAngle(double innerAngle) = 0;
00783     virtual double innerAngle(void) const = 0;
00784 
00785     virtual void outerAngle(double outerAngle) = 0;
00786     virtual double outerAngle(void) const = 0;
00787   };
00788 
00797   class GraphicsEngine::GeometryDescription : public Description {
00798   public:
00799     static const Description::Type DESCRIPTION_TYPE;
00800     static const String DESCRIPTION_TYPE_NAME;
00801 
00804     typedef std::set<uint32_t> IndexSetType;
00805 
00809     virtual void mesh(const Ptr<const MeshDescription>& mesh) = 0;
00810 
00814     virtual Ptr<const MeshDescription> mesh(void) const = 0;
00815     
00820     virtual IndexSetType materialIndices(void) const = 0;
00821 
00826     virtual void material(uint32_t index, const Ptr<const MaterialDescription>& material) = 0;
00827     
00832     virtual Ptr<const MaterialDescription> material(uint32_t index) const = 0;
00833   };
00834 
00843   class GraphicsEngine::BillboardGroupDescription : public Description {
00844   public:
00845     static const Description::Type DESCRIPTION_TYPE;
00846     static const String DESCRIPTION_TYPE_NAME;
00847 
00850     typedef std::set<uint32_t> IndexSetType;
00851 
00856     virtual void material(const Ptr<const MaterialDescription>& material) = 0;
00857     
00861     virtual Ptr<const MaterialDescription> material() const = 0;
00862 
00863     virtual IndexSetType billboardIndices(void) const = 0;
00864     
00865     virtual void billboard(uint32_t index, const Ptr<const BillboardDescription>& billbard) = 0;
00866     virtual Ptr<const BillboardDescription> billboard(uint32_t index) const = 0;
00867   };
00868   
00869   class GraphicsEngine::BillboardDescription : public Description {
00870   public:
00871     static const Description::Type DESCRIPTION_TYPE;
00872     static const String DESCRIPTION_TYPE_NAME;
00873 
00874     virtual void position(Real x, Real y, Real z) = 0;
00875     virtual void position(const Vector3& pos) = 0;
00876     const Vector3& position(void) const { return m_Pos; }
00877     
00878   protected:
00879     void setPosition(Real x, Real y, Real z) { setPosition(Vector3(x,y,z)); }
00880     void setPosition(const Vector3& pos) { m_Pos = pos; }
00881 
00882   private:
00883     Vector3 m_Pos;
00884   };
00885 
00895   class GraphicsEngine::MeshDescription : public Description {
00896   public:
00897     static const Description::Type DESCRIPTION_TYPE;
00898     static const String DESCRIPTION_TYPE_NAME;
00899 
00915     virtual void resourceName(const String& resourceName) = 0;
00916     const String& resourceName(void) const { return mResourceName; }
00917 
00918   protected:
00919     void setResourceName(const String& name) { mResourceName = name; }
00920   private:
00921     String mResourceName;
00922   };
00923   
00924 
00928   class GraphicsEngine::MaterialDescription : public Description {
00929   public:
00930     static const Description::Type DESCRIPTION_TYPE;
00931     static const String DESCRIPTION_TYPE_NAME;
00932 
00933     virtual void resourceName(const String& resourceName) = 0;
00934     const String& resourceName(void) const { return mResourceName; }
00935   protected:
00936     void setResourceName(const String& name) { mResourceName = name; }
00937   private:
00938     String mResourceName;
00939   };
00940 
00941  
00942   
00943 }; // namespace Phx
00944 
00945 
00946 #endif /* PHX_GRAPHICS_ENGINE_H */

Generated on Mon Jul 10 19:45:28 2006 for Phoenix OSFS by  doxygen 1.4.2