66 virtual bool update(
double time,
double timeDelta);
116 Material(vec4
const & ambient, vec4
const & diffuse, vec4
const & specular,
float const shininess,
Texture* texture);
158 Mesh(
Scene* scene,
string const & name, GLuint
const baseIdx, GLuint
const idxCount,
Material* material);
211 if (frames.size() == 1)
212 return frames.front().value;
221 if (next->time != prev->time)
222 t = (time - prev->time) / (next->time - prev->time);
224 return glm::mix(prev->value, next->value, glm::clamp(t,0.0f,1.0f));
237 auto it = frames.rbegin();
239 while (it != frames.rend())
241 if (it->time < time)
break;
245 if (it == frames.rend())
247 next = &(frames.front());
248 prev = &(frames.front());
255 if (it == frames.rbegin())
257 next = &(frames.back());
413 Scene*
get(
string const & name);
SceneInstance * createInstance(bool pickable=true)
unique_ptr< Node > m_root
map< string, unique_ptr< Scene > > mesh_map
vector< Frame< quat > > m_rotations
void nearestFrames(vector< Frame< T >> const &frames, float const time, OUT Frame< T > const *&prev, OUT Frame< T > const *&next)
vector< unique_ptr< Material > > m_materials
void unregisterInstance(SceneInstance *obj)
vector< unique_ptr< Node > > m_children
size_t m_instancesInBuffer
void bindTo(Shader *shader, string const uniform)
void drawAll(DrawArgs &args)
AnimationStart(int _animation, float _time)
Transformation m_transformation
void updateAllInstances(float const time)
map< uint, NodeAnimation > m_animations
Scene(Application *app, string const &name)
vector< float > m_animationsDuration
void updateInstance(SceneInstance *instance, float const time)
Material(vec4 const &ambient, vec4 const &diffuse, vec4 const &specular, float const shininess, Texture *texture)
bool transformationByTime(float const time, OUT mat4 &result)
vector< Frame< vec3 > > m_scalings
Transformation & getTransform()
SceneInstance(Application *app, Scene *parent, bool pickable=true)
bool m_needToUpdateIdBuffer
T interpolate(vector< Frame< T >> const &frames, float const time)
Node(Scene *scene, mat4 const &local)
vector< unique_ptr< Mesh > > m_meshes
void updateNdraw(DrawArgs &args, Shader *shader)
mat4 transformationByTime(uint const animation, float const time)
void queueAnimation(float time, uint animation)
mat4 m_inverseRootTransform
vector< mat4 > m_boneOffsets
vector< int > m_nodeIndices
virtual bool update(double time, double timeDelta)
void updateInstance(SceneInstance &instance, float time, mat4 const &parentTransformation)
Mesh(Scene *scene, string const &name, GLuint const baseIdx, GLuint const idxCount, Material *material)
vector< Mesh * > m_meshes
set< SceneInstance * > m_instances
queue< AnimationStart > m_animationQueue
vector< Frame< vec3 > > m_positions
void drawInstances(Shader *shader, set< SceneInstance * > const &instances)
GLuint m_boneWeightBuffer
auto_reset_event m_parallelEvent
map< string, int > m_animationsByName
AnimationStart m_animation
void drawAllInstances(DrawArgs &args, Shader *shader)