Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef SlicedVolume_INCLUDE_ONCE
00033 #define SlicedVolume_INCLUDE_ONCE
00034
00035 #include <vlVolume/link_config.hpp>
00036 #include <vlGraphics/Actor.hpp>
00037 #include <vlGraphics/Geometry.hpp>
00038 #include <vlGraphics/Light.hpp>
00039
00040 namespace vl
00041 {
00042 class VLVOLUME_EXPORT SlicedVolume: public ActorEventCallback
00043 {
00044 VL_INSTRUMENT_CLASS(vl::SlicedVolume, ActorEventCallback)
00045
00046 public:
00048 SlicedVolume();
00049
00050 void onActorRenderStarted(Actor* actor, real frame_clock, const Camera* cam, Renderable* renderable, const Shader* shader, int pass);
00051
00052 void onActorDelete(Actor* ) {}
00053
00055 void bindActor(Actor*);
00056
00058 virtual void updateUniforms(Actor* actor, real clock, const Camera* camera, Renderable* rend, const Shader* shader);
00059
00061 void setSliceCount(int count) { mSliceCount = count; }
00062
00064 int sliceCount() const { return mSliceCount; }
00065
00067 Geometry* geometry() { return mGeometry.get(); }
00068
00070 const Geometry* geometry() const { return mGeometry.get(); }
00071
00073 void setBox(const AABB& box);
00074
00076 const AABB& box() const { return mBox; }
00077
00079 const fvec3* texCoords() const { return mTexCoord; }
00080
00082 fvec3* texCoords() { return mTexCoord; }
00083
00085 void generateTextureCoordinates(const ivec3& size);
00086
00089 void generateTextureCoordinates(const ivec3& img_size, const ivec3& min_corner, const ivec3& max_corner);
00090
00091 protected:
00092 int mSliceCount;
00093 ref<Geometry> mGeometry;
00094 AABB mBox;
00095 fmat4 mCache;
00096 fvec3 mTexCoord[8];
00097 };
00098 }
00099
00100 #endif