void FiretrailApp::update() { const auto ray = mCamera.generateRay(getMousePos() - getWindowPos(), getWindowSize()); float result = .0f; ray.calcPlaneIntersection(vec3(.0f, .0f, 5.0f), vec3(.0f, -2.0f, 1.0f), &result); mHeadPosition += (ray.calcPosition(result) - mHeadPosition) * .8f; mSpline.pushPoint(mHeadPosition); const auto length = mSpline.getLength(); if (length <= .0f) return; auto mappedPosAttrib = mVboMesh->mapAttrib3f( geom::POSITION ); const auto d = min(mMaxDSlice, length / (float)NUM_SPLINE_NODES); for (size_t i = 0; i < NUM_SPLINE_NODES; ++i) { *mappedPosAttrib++ = mSpline.positionAtLength(d * i); } mappedPosAttrib.unmap(); mFps = getAverageFps(); if (mRecordingMovie) { if( mMovieExporter && getElapsedFrames() > 1 && getElapsedFrames() < MAX_MOVIE_FRAMES ) { mMovieExporter->addFrame( copyWindowSurface() ); } else if( mMovieExporter && getElapsedFrames() >= MAX_MOVIE_FRAMES ) { endMovieRecording(); } } }