void ImageHFApp::updateData( ImageHFApp::ColorSwitch whichColor ) { Surface32f::Iter pixelIter = mImage.getIter(); auto vertPosIter = mVboMesh->mapAttrib3f( geom::POSITION ); auto vertColorIter = mVboMesh->mapAttrib3f( geom::COLOR ); while( pixelIter.line() ) { while( pixelIter.pixel() ) { Color color( pixelIter.r(), pixelIter.g(), pixelIter.b() ); float height; const float muteColor = 0.2f; // calculate the height based on a weighted average of the RGB, and emphasize either the red green or blue color in each of those modes switch( whichColor ) { case kColor: height = color.dot( Color( 0.3333f, 0.3333f, 0.3333f ) ); break; case kRed: height = color.dot( Color( 1, 0, 0 ) ); color *= Color( 1, muteColor, muteColor ); break; case kGreen: height = color.dot( Color( 0, 1, 0 ) ); color *= Color( muteColor, 1, muteColor ); break; case kBlue: height = color.dot( Color( 0, 0, 1 ) ); color *= Color( muteColor, muteColor, 1 ); break; } // the x and the z coordinates correspond to the pixel's x & y float x = pixelIter.x() - mWidth / 2.0f; float z = pixelIter.y() - mHeight / 2.0f; *vertPosIter++ = vec3( x, height * 30.0f, z ); *vertColorIter++ = vec3( color.r, color.g, color.b ); } } vertPosIter.unmap(); vertColorIter.unmap(); }
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(); } } }