mirror of
https://github.com/minetest/irrlicht.git
synced 2025-06-28 14:26:06 +02:00
Fix camera render when it wasn't animated. Tiny improvement for fps camera animator. Add documentation.
Cameras can render even when they are not in the scenemanager or onAnimate didn't get called for example because they are their parent are invisible. So let's be safe and add another call to updateAbsolutePosition(). Some cost, but usually we don't have that many rendering cameras, so shouldn't matter (if it ever matters I suppose we could override OnAnimate and add a flag if it _was_ animated since last render call. Maybe that's even useful in general for SceneNodes?). Similar CSceneNodeAnimatorCameraFPS was using getAbsolutePosition which was only updated after animators, so it was one frame behind. And documented ICameraSceneNode functions a bit. Especially updateMatrices is a bit of a confusing name unfortunately. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6406 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
@ -252,6 +252,7 @@ void CCameraSceneNode::OnRegisterSceneNode()
|
||||
//! render
|
||||
void CCameraSceneNode::render()
|
||||
{
|
||||
updateAbsolutePosition(); // depending on that call in onAnimate is risky (might not be in SceneManager or it or it's parent might be invisible and still should render)
|
||||
updateMatrices();
|
||||
|
||||
video::IVideoDriver* driver = SceneManager->getVideoDriver();
|
||||
|
@ -110,7 +110,6 @@ void CSceneNodeAnimatorCameraFPS::animateNode(ISceneNode* node, u32 timeMs)
|
||||
|
||||
if (firstUpdate)
|
||||
{
|
||||
camera->updateAbsolutePosition();
|
||||
if (CursorControl )
|
||||
{
|
||||
CursorControl->setPosition(0.5f, 0.5f);
|
||||
@ -144,6 +143,7 @@ void CSceneNodeAnimatorCameraFPS::animateNode(ISceneNode* node, u32 timeMs)
|
||||
LastAnimationTime = timeMs;
|
||||
|
||||
// Update rotation
|
||||
camera->updateAbsolutePosition();
|
||||
core::vector3df target = (camera->getTarget() - camera->getAbsolutePosition());
|
||||
core::vector3df relativeRotation = target.getHorizontalAngle();
|
||||
|
||||
|
Reference in New Issue
Block a user