void TerrainApp::update() { float x = mMouseRightPos.x - getWindowSize().x * 0.5f; float y = mSphere.getCenter().y; float z = mMouseRightPos.y - getWindowSize().y * 0.5f; mSpherePosDest = Vec3f( x, y, z ); mSpherePos -= ( mSpherePos - mSpherePosDest ) * 0.02f; mSphere.setCenter( mSpherePos ); // ROOM mRoom.update(); mZoomMulti -= ( mZoomMulti - mZoomMultiDest ) * 0.1f; gl::disableDepthRead(); gl::disableDepthWrite(); gl::color( Color( 1, 1, 1 ) ); gl::disableAlphaBlending(); // REACTION DIFFUSION mRd.update( mRoom.getTimeDelta(), &mRdShader, mGlowTex, mMouseRightDown, mSphere.getCenter().xz(), mZoomMulti ); mRd.drawIntoHeightsFbo( &mHeightsShader, mTerrainScale ); mRd.drawIntoNormalsFbo( &mNormalsShader ); // ROOM drawIntoRoomFbo(); // CAMERA if( mMouseLeftDown ) mSpringCam.dragCam( ( mMouseOffset ) * 0.01f, ( mMouseOffset ).length() * 0.01 ); mSpringCam.update( mRoom.getPower(), 0.5f ); }
void CatalogApp::update() { if( getElapsedSeconds() - mMouseTimePressed < mMouseTimeThresh && !mMousePressed ){ mMouseTimePressed = 0.0f; selectStar( mWasRightButtonLastClicked ); } mRoom.update(); if( mRoom.isPowerOn() ) mScaleDest -= ( mScaleDest - mMaxScale ) * 0.05f; mScale -= ( mScale - mScaleDest ) * 0.02f; mScalePer = mScale/mMaxScale; // CAMERA if( mHomeStar != NULL ){ mSpringCam.setEye( mHomeStar->mPos + Vec3f( 100.0f, 0.0f, 40.0f ) ); } if( mDestStar != NULL ){ mSpringCam.setCenter( mDestStar->mPos ); } if( mMousePressed ) mSpringCam.dragCam( ( mMouseOffset ) * 0.01f, ( mMouseOffset ).length() * 0.01 ); mSpringCam.update( 0.25f ); BOOST_FOREACH( Star* &s, mBrightStars ){ s->update( mSpringCam.getCam(), mScale ); }
void TerrainApp::keyDown( KeyEvent event ) { switch ( event.getChar() ) { case ' ': mRoom.togglePower(); mSpringCam.setPreset( 1 ); break; case 'f': mRd.mParamF += 0.001f; break; case 'F': mRd.mParamF -= 0.001f; break; case 'k': mRd.mParamK += 0.001f; break; case 'K': mRd.mParamK -= 0.001f; break; case 'n': mRd.mParamN += 0.005f; break; case 'N': mRd.mParamN -= 0.005f; break; case 'w': mRd.mParamWind += 0.05f; break; case 'W': mRd.mParamWind -= 0.05f; break; case '.': mTerrainScale.x += 0.1f; break; case ',': mTerrainScale.x -= 0.1f; break; case '1': mRd.setMode(1); break; case '2': mRd.setMode(2); break; case '3': mRd.setMode(3); break; case 'c': mSpringCam.setPreset( 0 ); break; case 'C': mSpringCam.setPreset( 2 ); break; default: break; } switch( event.getCode() ){ case KeyEvent::KEY_UP: mMouseRightPos = Vec2f( 222.0f, 205.0f ) + getWindowCenter(); break; case KeyEvent::KEY_LEFT: mMouseRightPos = Vec2f(-128.0f,-178.0f ) + getWindowCenter(); break; case KeyEvent::KEY_RIGHT: mMouseRightPos = Vec2f(-256.0f, 122.0f ) + getWindowCenter(); break; case KeyEvent::KEY_DOWN: mMouseRightPos = Vec2f( 0.0f, 0.0f ) + getWindowCenter(); break; default: break; } std::cout << "F: " << mRd.mParamF << " K: " << mRd.mParamK << std::endl; }
void ShadedSphereApp::update() { // ROOM mRoom.update(); // CAMERA if( mMousePressed ){ mSpringCam.dragCam( ( mMouseOffset ) * 0.01f, ( mMouseOffset ).length() * 0.01 ); } mSpringCam.update( 0.4f ); // ROOM drawIntoRoomFbo(); }
void BubbleChamberApp::update() { // ROOM mRoom.update(); // CAMERA if( mMousePressed ) mSpringCam.dragCam( ( mMouseOffset ) * 0.02f, ( mMouseOffset ).length() * 0.02 ); mSpringCam.update( 0.3f ); // CONTROLLER mController.update(); drawIntoRoomFbo(); }
void ShadedSphereApp::drawIntoRoomFbo() { mRoomFbo.bindFramebuffer(); gl::clear( ColorA( 0.0f, 0.0f, 0.0f, 0.0f ), true ); gl::setMatricesWindow( mRoomFbo.getSize(), false ); gl::setViewport( mRoomFbo.getBounds() ); gl::disableAlphaBlending(); gl::enable( GL_TEXTURE_2D ); glEnable( GL_CULL_FACE ); glCullFace( GL_BACK ); Matrix44f m; m.setToIdentity(); m.scale( mRoom.getDims() ); // mLightsTex.bind( 0 ); mRoomShader.bind(); mRoomShader.uniform( "mvpMatrix", mSpringCam.mMvpMatrix ); mRoomShader.uniform( "mMatrix", m ); mRoomShader.uniform( "eyePos", mSpringCam.getEye() ); mRoomShader.uniform( "roomDims", mRoom.getDims() ); mRoomShader.uniform( "mainPower", mRoom.getPower() ); mRoomShader.uniform( "lightPower", mRoom.getLightPower() ); mRoom.draw(); mRoomShader.unbind(); mRoomFbo.unbindFramebuffer(); glDisable( GL_CULL_FACE ); }
void TerrainApp::drawTerrain() { mRd.getHeightsTexture().bind( 0 ); mRd.getNormalsTexture().bind( 1 ); mGradientTex.bind( 2 ); mSandNormalTex.bind( 3 ); mTerrainShader.bind(); mTerrainShader.uniform( "heightsTex", 0 ); mTerrainShader.uniform( "normalsTex", 1 ); mTerrainShader.uniform( "gradientTex", 2 ); mTerrainShader.uniform( "sandNormalTex", 3 ); mTerrainShader.uniform( "mvpMatrix", mSpringCam.mMvpMatrix ); mTerrainShader.uniform( "terrainScale", mTerrainScale ); mTerrainShader.uniform( "roomDims", mRoom.getDims() ); mTerrainShader.uniform( "zoomMulti", mZoomMulti );//lerp( mZoomMulti, 1.0f, mRoom.getPower() ) ); mTerrainShader.uniform( "power", mRoom.getPower() ); mTerrainShader.uniform( "eyePos", mSpringCam.getEye() ); mTerrainShader.uniform( "lightPos", mLightPos ); mTerrainShader.uniform( "fogColor", mFogColor ); mTerrainShader.uniform( "sandColor", mSandColor ); mTerrainShader.uniform( "mousePosNorm", -( mMousePosNorm - Vec2f( 0.5f, 0.5f ) ) * getElapsedSeconds() * 2.0f ); mTerrainShader.uniform( "spherePos", mSphere.getCenter() ); mTerrainShader.uniform( "sphereRadius", mSphere.getRadius() ); mTerrain.draw(); mTerrainShader.unbind(); }
void TerrainApp::drawSphere() { Vec3f spherePos = mSphere.getCenter(); Vec3f roomDims = mRoom.getDims(); float x = ( spherePos.x + roomDims.x ) / ( roomDims.x * 2.0f ); float y = ( spherePos.z + roomDims.z ) / ( roomDims.z * 2.0f );; Vec2f texCoord = Vec2f( x, y ); mCubeMap.bind(); mRd.getHeightsTexture().bind( 1 ); mRd.getNormalsTexture().bind( 2 ); mSphereShader.bind(); mSphereShader.uniform( "cubeMap", 0 ); mSphereShader.uniform( "heightsTex", 1 ); mSphereShader.uniform( "normalsTex", 2 ); mSphereShader.uniform( "mvpMatrix", mSpringCam.mMvpMatrix ); mSphereShader.uniform( "terrainScale", mTerrainScale ); mSphereShader.uniform( "eyePos", mSpringCam.getEye() ); mSphereShader.uniform( "fogColor", mFogColor ); mSphereShader.uniform( "sandColor", mSandColor ); mSphereShader.uniform( "power", mRoom.getPower() ); mSphereShader.uniform( "roomDims", mRoom.getDims() ); mSphereShader.uniform( "texCoord", texCoord ); mSphereShader.uniform( "sphereRadius", mSphere.getRadius() * 0.45f ); mSphereShader.uniform( "zoomMulti", mZoomMulti ); mSphereShader.uniform( "timePer", mRoom.getTimePer() * 1.5f + 0.5f ); gl::draw( mSphere, 128 ); mSphereShader.unbind(); }
void RepulsionApp::draw() { // clear out the window with black gl::clear( ColorA( 0.1f, 0.1f, 0.1f, 0.0f ), true ); gl::setMatricesWindow( getWindowSize(), false ); gl::setViewport( getWindowBounds() ); gl::disableDepthRead(); gl::disableDepthWrite(); gl::enable( GL_TEXTURE_2D ); gl::enableAlphaBlending(); gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) ); // DRAW ROOM mRoomFbo.bindTexture(); gl::drawSolidRect( getWindowBounds() ); gl::setMatrices( mSpringCam.getCam() ); // DRAW PANEL drawInfoPanel(); gl::enable( GL_TEXTURE_2D ); gl::enableDepthRead(); gl::enableDepthWrite(); // DRAW PARTICLES mPositionFbos[mThisFbo].bindTexture( 0 ); mVelocityFbos[mThisFbo].bindTexture( 1 ); mShader.bind(); mShader.uniform( "currentPosition", 0 ); mShader.uniform( "currentVelocity", 1 ); mShader.uniform( "eyePos", mSpringCam.getEye() ); mShader.uniform( "power", mRoom.getPower() ); gl::draw( mSphereVbo ); mShader.unbind(); if( mSaveFrames && mNumSavedFrames < 15000 ){ writeImage( *getHomeDirectory().c_str() + "RepulsionGPU/" + toString( mNumSavedFrames ) + ".png", copyWindowSurface() ); mNumSavedFrames ++; } mThisFbo = ( mThisFbo + 1 ) % 2; mPrevFbo = ( mThisFbo + 1 ) % 2; }
void RepulsionApp::update() { mRoom.update(); // CAMERA if( mMousePressed ) mSpringCam.dragCam( ( mMouseOffset ) * 0.01f, ( mMouseOffset ).length() * 0.01 ); mSpringCam.update( 1.0f ); gl::disableDepthRead(); gl::disableDepthWrite(); gl::disableAlphaBlending(); drawIntoVelocityFbo(); drawIntoPositionFbo(); drawIntoRoomFbo(); }
void BubbleChamberApp::keyDown( KeyEvent event ) { switch( event.getChar() ){ case ' ': mRoom.togglePower(); break; case 'm': mController.releaseMoths(); break; case '1': mController.preset( 1 ); break; case '2': mController.preset( 2 ); break; case '3': mController.preset( 3 ); break; case '4': mController.preset( 4 ); break; case '5': mController.preset( 5 ); break; case '6': mController.preset( 6 ); break; default: break; } switch( event.getCode() ){ case KeyEvent::KEY_UP: mSpringCam.setEye( mRoom.getCornerCeilingPos() ); break; case KeyEvent::KEY_DOWN: mSpringCam.setEye( mRoom.getCornerFloorPos() ); break; case KeyEvent::KEY_RIGHT: mSpringCam.resetEye(); break; case KeyEvent::KEY_ESCAPE: quit(); break; default: break; } }
void ShadedSphereApp::drawSphere() { gl::color( ColorA( 1, 1, 1, 1 ) ); gl::disable( GL_TEXTURE_2D ); mCubeMap.bind(); mSphereShader.bind(); mSphereShader.uniform( "cubeMap", 0 ); mSphereShader.uniform( "radius", 70.0f ); mSphereShader.uniform( "mvpMatrix", mSpringCam.mMvpMatrix ); mSphereShader.uniform( "eyePos", mSpringCam.getEye() ); mSphereShader.uniform( "power", mRoom.getPower() ); mSphereShader.uniform( "roomDim", mRoom.getDims() ); gl::drawSphere( Vec3f::zero(), 1.0f, 128 ); mSphereShader.unbind(); }
void TerrainApp::draw() { float power = mRoom.getPower(); gl::clear( ColorA( 0.1f, 0.1f, 0.1f, 0.0f ), true ); gl::setMatricesWindow( getWindowSize(), false ); gl::setViewport( getWindowBounds() ); gl::disableDepthRead(); gl::disableDepthWrite(); gl::enableAlphaBlending(); gl::enable( GL_TEXTURE_2D ); gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) ); // DRAW ROOM FBO mRoomFbo.bindTexture(); gl::drawSolidRect( getWindowBounds() ); gl::setMatrices( mSpringCam.getCam() ); gl::color( ColorA( power, power, power, power * 0.1f + 0.9f ) ); // DRAW INFO PANEL drawInfoPanel(); gl::enable( GL_TEXTURE_2D ); gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) ); // DRAW WALLS mRoom.drawWalls( mRoom.getPower(), mRoomBackWallTex, mRoomLeftWallTex, mRoomRightWallTex, mRoomCeilingTex, mRoomFloorTex, mRoomBlankTex ); gl::enableAlphaBlending(); gl::enableDepthRead(); gl::enableDepthWrite(); gl::enable( GL_TEXTURE_2D ); // DRAW TERRAIN drawTerrain(); gl::disable( GL_TEXTURE_2D ); // DRAW SPHERE drawSphere(); }
void ShadedSphereApp::draw() { gl::clear( ColorA( 0, 0, 0, 0 ), true ); gl::color( ColorA( 1, 1, 1, 1 ) ); gl::setMatricesWindow( getWindowSize(), false ); gl::setViewport( getWindowBounds() ); gl::disableDepthRead(); gl::disableDepthWrite(); gl::enableAlphaBlending(); gl::enable( GL_TEXTURE_2D ); // DRAW ROOM mRoomFbo.bindTexture(); gl::drawSolidRect( getWindowBounds() ); gl::setMatrices( mSpringCam.getCam() ); gl::enableDepthRead(); gl::enableDepthWrite(); drawSphere(); }
void BubbleChamberApp::draw() { float power = mRoom.getPower(); Color powerColor = Color( power, power, power ); gl::clear( ColorA( 0.1f, 0.1f, 0.1f, 0.0f ), true ); gl::setMatricesWindow( getWindowSize(), false ); gl::setViewport( getWindowBounds() ); gl::disableDepthRead(); gl::disableDepthWrite(); gl::enableAlphaBlending(); gl::enable( GL_TEXTURE_2D ); gl::color( ColorA( 1.0f, 1.0f, 1.0f, 1.0f ) ); // ROOM mRoomFbo.bindTexture(); gl::drawSolidRect( getWindowBounds() ); gl::setMatrices( mSpringCam.getCam() ); // PANEL drawInfoPanel(); gl::disable( GL_TEXTURE_2D ); gl::enableDepthWrite(); gl::enableDepthRead(); gl::enableAlphaBlending(); gl::color( ColorA( powerColor, 1.0f ) ); // PARTICLES mController.drawParticles( power ); // DRAW GIBS mController.drawGibs(); // BUBBLES mController.drawBubbles( power ); gl::enable( GL_TEXTURE_2D ); gl::disableDepthWrite(); // DECALS gl::color( powerColor ); mDecalTex.bind( 0 ); mController.drawDecals(); // SMOKES Vec3f right, up; mSpringCam.getCam().getBillboardVectors( &right, &up ); mSmokeTex.bind( 0 ); mController.drawSmokes( right, up ); gl::disable( GL_TEXTURE_2D ); gl::enableDepthWrite(); gl::color( powerColor ); // MOTHS mController.drawMoths(); // GLOWCUBES mGlowCubeShader.bind(); mGlowCubeShader.uniform( "eyePos", mSpringCam.getEye() ); mGlowCubeShader.uniform( "power", mRoom.getPower() ); mGlowCubeShader.uniform( "mvpMatrix", mSpringCam.mMvpMatrix ); mController.drawGlowCubes( &mGlowCubeShader ); mGlowCubeShader.unbind(); if( mSaveFrames ){ writeImage( *getHomeDirectory().c_str() + "BubbleChamber/" + toString( mNumSaveFrames ) + ".png", copyWindowSurface() ); mNumSaveFrames ++; } }