void ShadowMapSample::keyDown( ci::app::KeyEvent event ) { switch( event.getChar() ) { case ' ' : mPaused = ! mPaused; break; case 'r': { // create a random camera position vec3 eyeVec = Rand::randVec3f().normalized() * 6.0f; if( eyeVec.y < 0 ) eyeVec.y = -eyeVec.y; mCamera->lookAt( eyeVec, vec3(0,-2.5,0) ); mLight->update( *mCamera ); } break; case 'f': setFullScreen( ! isFullScreen() ); break; case 'l': { // create a random light position vec3 lightPos = Rand::randVec3f().normalized() * 4.0f; if( lightPos.y < 0 ) lightPos.y = -lightPos.y; mLight->lookAt( lightPos, vec3::zero() ); mLight->update( *mCamera ); } break; case 'c': mLookThroughCamera = ! mLookThroughCamera; break; case 'd': mDrawDepthMap = ! mDrawDepthMap; break; } }
void triMeshApp::setup(){ // cam, lights material mCam = new CameraPersp(getWindowWidth(), getWindowHeight(), 45.0f); mCam->lookAt( Vec3f(300, 700, -600), Vec3f(0,0,0) ); mCam->setPerspective( 60.0f, getWindowAspectRatio(), 0.1f, 5000.0f ); yrot = 0; glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glEnable(GL_LIGHTING); glEnable(GL_NORMALIZE); mLight = new gl::Light(gl::Light::DIRECTIONAL, 0); mLight->setDirection( Vec3f(0,0.1,0.3).normalized()); mLight->setAmbient( Color( 0.2f, 0.2f, 0.2f ) ); mLight->setDiffuse( Color( 1.0f, 1.0f, 1.0f ) ); mLight->update( *mCam ); mLight->enable(); mMaterial1.setSpecular( Color(0.5,0.5,0.5) ); mMaterial1.setDiffuse( Color( 0.0f, 1.0f, 0.0f ) ); mMaterial1.setAmbient( Color( 0.1f, 0.1f, 0.1f ) ); mMaterial1.setShininess( 20.0f ); mMaterial1.apply(); mMaterial2.setSpecular( Color(0,0,0) ); mMaterial2.setDiffuse( Color(1,0,0) ); mMaterial2.setAmbient( Color( 0.4f, 0.0f, 0.0f ) ); mMaterial2.setEmission(Color(1,0,0)); initPhysics(); ObjLoader loader( loadResource( RES_LOSPHERE )->createStream() ); loader.load( &mConvex ); mVBO = gl::VboMesh( mConvex ); ObjLoader loader2( loadResource( RES_TORUS )->createStream() ); loader2.load( &mConcave ); mVBOTerrain = gl::VboMesh( mConcave ); btConvexHullShape* shape = bullet::createConvexHullShape(mConvex, Vec3f(CONVEX_SCALE, CONVEX_SCALE, CONVEX_SCALE)); m_convexRigidBody = bullet::createConvexHullBody(m_dynamicsWorld, shape, Vec3f(0,500,0), 10000); btBvhTriangleMeshShape* concaveShape = bullet::createStaticConcaveMeshShape(mConcave, Vec3f(CONCAVE_SCALE, CONCAVE_SCALE, CONCAVE_SCALE), 5.0f); m_concaveRigidBody = bullet::createStaticRigidBody(m_dynamicsWorld, concaveShape, Vec3f(0,255,0)); m_hfImage = loadImage(loadResource(RES_HEIGHTMAP)); m_hfChannel = new Channel32f(m_hfImage); // note that HF_HEIGHTSCALE is ignored since we are using float data. we adjust the y-scale with the local scaling parameter only! btHeightfieldTerrainShape* hfShape = bullet::createHeightfieldTerrainShape(m_hfChannel, 64, 64, HF_HEIGHTSCALE, -500, 500, 1, Vec3f(HF_SCALE,HF_SCALEY,HF_SCALE)); m_hfRigidBody = bullet::createStaticRigidBody(m_dynamicsWorld, hfShape, Vec3f(0,0,0)); gl::VboMesh::Layout layout; layout.setDynamicColorsRGB(); layout.setDynamicPositions(); mVBOHeightfield = gl::VboMesh( m_hfImage.getWidth() * m_hfImage.getHeight(), 0, layout, GL_POINTS ); updateData( ); }
/* * @Description: render scene to FBO texture * @param: none * @return: none */ void Base_ThreeD_ProjectApp::renderSceneToFBO() { mScreenSpace1.bindFramebuffer(); glClearColor( 0.5f, 0.5f, 0.5f, 1 ); glClearDepth(1.0f); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); if (mLightingOn) glDisable(GL_LIGHTING); glColor3f( 1.0f, 1.0f, 0.1f ); gl::drawFrustum( mLightRef->getShadowCamera() ); glColor3f( 1.0f, 1.0f, 1.0f ); if (mLightingOn) glEnable(GL_LIGHTING); mEye = mCam->getEyePoint(); mEye.normalize(); mEye = mEye * abs(mCameraDistance); mCam->lookAt( mEye, mCenter, mUp ); gl::setMatrices( *mCam ); mLight->update( *mCam ); drawTestObjects(); mScreenSpace1.unbindFramebuffer(); glDisable(GL_LIGHTING); }
void LocationApp::draw() { // Clear the screen gl::enableDepthRead(); gl::enableDepthWrite(); gl::clear( Color::gray( 0.843f ) ); CameraPersp camera; camera.setPerspective( 60.0f, getWindowAspectRatio(), 0.01f, 10.0f ); camera.lookAt( Vec3f( 0.0f, 0.0f, 3.0f ), Vec3f::zero() ); gl::setMatrices( camera ); mLight->update( camera ); // Rotate the globe gl::multModelView( Quatf(Vec3f::yAxis(), mRotationAngle ).normalized() ); // Draw the globe with shading. Rotate it 90 degrees on // its Y axis to line up the texture with the location gl::color( ColorAf::white() ); gl::enable( GL_LIGHTING ); mTexture.bind( 0 ); gl::pushMatrices(); gl::rotate( Vec3f( 0.0f, 90.0f, 0.0f ) ); gl::drawSphere( Vec3f::zero(), 1.0f, 32 ); gl::popMatrices(); mTexture.unbind(); gl::disable( GL_LIGHTING ); // Draw location gl::color( ColorAf( 1.0f, 0.2f, 0.18f, 0.667f ) ); gl::drawSphere( mLocation, mDotRadius, 32 ); //////////////////////////////////////////////////// #if defined( CINDER_COCOA_TOUCH ) gl::setMatricesWindow( getWindowSize() ); gl::enableDepthRead( false ); gl::enableDepthWrite( false ); // Plot arrow position float radius = 256.0f; float rotation = toRadians( mHeading ) - (float)M_PI * 0.5f; float x = math<float>::cos( rotation ); float y = math<float>::sin( rotation ); Vec2f position = getWindowCenter() + Vec2f( x, y ) * radius; gl::translate( position ); gl::rotate( Vec3f( 0.0f, 0.0f, -mHeading ) ); gl::translate( position * -1.0f ); gl::translate( position ); gl::color( Colorf( 0, 0, 1 ) ); gl::drawSolid( mArrow ); #endif }
void ShadowMapSample::setup() { glPolygonOffset( 1.0f, 1.0f ); glEnable( GL_LIGHTING ); glEnable( GL_DEPTH_TEST ); mPaused = false; mLookThroughCamera = true; mDrawDepthMap = false; mCamera = new CameraPersp( getWindowWidth(), getWindowHeight(), 45.0f ); mCamera->lookAt( vec3( 5, 5, 5 ), vec3( 0, 0, 0 ) ); mCamera->setPerspective( 45.0f, getWindowAspectRatio(), 0.1f, 100.0f ); mLight = new gl::Light( gl::Light::POINT, 0 ); mLight->lookAt( vec3( 1, 5, 1 ), vec3( 0, 0, 0 ) ); mLight->setAmbient( Color( 0.3f, 0.3f, 0.3f ) ); mLight->setDiffuse( Color( 0.5f, 0.5f, 0.5f ) ); mLight->setSpecular( Color( 0.5f, 0.5f, 0.5f ) ); mLight->setShadowParams( 60.0f, 0.5f, 8.0f ); mLight->update( *mCamera ); mLight->enable(); gl::Material torusMaterial; torusMaterial.setSpecular( BLUE ); torusMaterial.setDiffuse( BLUE ); torusMaterial.setAmbient( Color( 0.1f, 0.1f, 0.1f ) ); torusMaterial.setShininess( 25.0f ); gl::Material backboardMaterial; backboardMaterial.setAmbient( RED ); backboardMaterial.setDiffuse( RED ); backboardMaterial.setShininess( 1.0f ); initShadowMap(); mTorus = gl::DisplayList( GL_COMPILE ); mTorus.newList(); gl::drawTorus( 1.0f, 0.3f, 32, 64 ); mTorus.endList(); mTorus.setMaterial( torusMaterial ); mBackboard = gl::DisplayList( GL_COMPILE ); mBackboard.newList(); gl::drawCube( vec3( 0.0f, -2.5f, 0.0f ), vec3( 5.0f, 0.1f, 5.0f ) ); mBackboard.endList(); mBackboard.setMaterial( backboardMaterial ); mShader = gl::GlslProg( loadResource( RES_SHADOWMAP_VERT ), loadResource( RES_SHADOWMAP_FRAG ) ); mShader.bind(); mShader.uniform( "depthTexture", 0 ); }
void ShadowMapSample::draw() { gl::clear(); gl::enableDepthWrite(); glEnable( GL_LIGHTING ); updateShadowMap(); gl::enableDepthRead(); glEnable( GL_TEXTURE_2D ); mDepthFbo.bindDepthTexture(); mShader.bind(); mShader.uniform( "shadowTransMatrix", mLight->getShadowTransformationMatrix( *mCamera ) ); if( mLookThroughCamera ) gl::setMatrices( *mCamera ); else gl::setMatrices( mLight->getShadowCamera() ); mLight->update( *mCamera ); glPushMatrix(); mBackboard.draw(); mTorus.draw(); gl::drawCube( vec3::zero(), vec3( 1, 1, 1 ) ); glPopMatrix(); mShader.unbind(); mDepthFbo.unbindTexture(); // Draw the lighting frustum unless we're looking through it if( mLookThroughCamera ) { glDisable( GL_LIGHTING ); glColor3f( 1.0f, 1.0f, 0.1f ); gl::drawFrustum( mLight->getShadowCamera() ); } if( mDrawDepthMap ) { // there are faster ways to achieve this, but this is a handy way to see the depth map gl::setMatricesWindow( getWindowSize() ); Surface32f shadowMapSurface( mDepthFbo.getDepthTexture() ); ip::hdrNormalize( &shadowMapSurface ); gl::color( Color::white() ); gl::draw( gl::Texture( shadowMapSurface ), Rectf( 0, 0, 128, 128 ) ); } }
void winBodiesApp::setup(){ // cam, lights material mCam = new CameraPersp(getWindowWidth(), getWindowHeight(), 45.0f); mCam->lookAt( Vec3f(100, 400, -400), Vec3f(0,0,0) ); mCam->setPerspective( 60.0f, getWindowAspectRatio(), 0.1f, 5000.0f ); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glEnable(GL_LIGHTING); mLight = new gl::Light(gl::Light::DIRECTIONAL, 0); mLight->setDirection( Vec3f(0,0.1,0.3)); mLight->setAmbient( Color( 0.2f, 0.2f, 0.2f ) ); mLight->setDiffuse( Color( 1.0f, 1.0f, 1.0f ) ); mLight->update( *mCam ); mLight->enable(); mMaterial1.setSpecular( Color(0.5,0.5,0.5) ); mMaterial1.setDiffuse( Color( 0.33f, 0.24f, 1.0f ) ); mMaterial1.setAmbient( Color( 0.1f, 0.1f, 0.1f ) ); mMaterial1.setShininess( 20.0f ); mMaterial1.apply(); mMaterial2.setSpecular( Color(0,0,0) ); mMaterial2.setDiffuse( Color(1,0,0) ); mMaterial2.setAmbient( Color( 0.4f, 0.0f, 0.0f ) ); mMaterial2.setEmission(Color(1,0,0)); mMaterialG.setSpecular(Color(0,0,0)); mMaterialG.setDiffuse(Color(0,0,0.03)); mMaterialG.setAmbient(Color(0.1,0.1,0.1)); initPhysics(); lastTime = getElapsedSeconds(); }
void PopGameApp::setup() { speed2 =3.5; setWindowSize(1920,1080); //setWindowSize(1080/2,1920/2); setWindowPos(0, 0); mCamera = new CameraPersp( getWindowWidth(), getWindowHeight(), 45.0f ); mCamera->lookAt( Vec3f( 0, -300, -400 ), Vec3f( 0, 0, 50 ) ); mCamera->setPerspective( 80.0f, getWindowAspectRatio(),200.0f, 4000.0f ); mLight = new gl::Light( gl::Light::POINT, 0 ); mLight->lookAt( Vec3f(1000,-1000, -2000 ), Vec3f( 0, 1000, 0 ) ); mLight->setShadowParams(60.0f,2000.f, 3500.0f ); mLight->update( *mCamera ); mLight->enable(); mShader = gl::GlslProg( loadAsset("shadowMap_vert.glsl"),loadAsset("shadowMap_frag.glsl") ); mShader.bind(); mShader.uniform( "depthTexture", 1 ); mShader.uniform( "difTexture", 0 ); mShader.unbind(); initShadowMap(); groundHolder.setup(); stage.addChild(&groundHolder); enemyHandler.setup(); stage.addChild(&enemyHandler); BulletHandler::getInstance()->enemyHandler =&enemyHandler; plane =new Hero(); plane->load("plane.png","planeh.png"); plane->setAlign(neuro::ALIGN_CENTER); plane->z = 0; stage.addChild(plane); prevTime = cinder::app::getElapsedSeconds(); BulletHandler::getInstance()->stage =&stage; logo =new Image(); logo->load("logo.png"); // logo->rotationX =-3.1415; logo->setAlign(neuro::ALIGN_BOTTOM_LEFT); logo->x =0; logo->y =1080*2; //logo->scaleX =logo->scaleY =logo->scaleZ =4; stage2D.scaleX=stage2D.scaleY =0.5; stage2D.addChild(logo); }
void PopGameApp::draw() { if(getElapsedFrames()>200)return; gl::pushMatrices(); gl::setMatrices( *mCamera ); gl::enable(GL_DEPTH_TEST); gl::clear(ColorA(0.5,0.5,0.5,1)); gl::enableDepthWrite(); glEnable( GL_LIGHTING ); updateShadowMap(); gl::enableDepthRead(); // clear out the window with black glEnable( GL_TEXTURE_2D ); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, 0.5); mShader.bind(); mDepthFbo.bindDepthTexture(1); mShader.uniform( "shadowTransMatrix", mLight->getShadowTransformationMatrix( *mCamera ) ); //gl::enable(GL_BLEND); mLight->update( *mCamera ); gl::pushMatrices(); stage.int_draw(); gl::popMatrices(); gl::popMatrices(); // gl::setMatrices( *mCamera ); mShader.unbind(); gl::disable (GL_DEPTH_TEST); glDisable( GL_LIGHTING ); glDisable (GL_ALPHA_TEST); glEnable(GL_BLEND); gl::enableAlphaBlending(); stage2D.int_draw(); glDisable(GL_BLEND); gl::disableAlphaBlending(); /* glDisable( GL_LIGHTING ); gl::setMatricesWindow( getWindowSize() ); Surface32f shadowMapSurface( mDepthFbo.getDepthTexture() ); ip::hdrNormalize( &shadowMapSurface ); gl::color( Color::white() ); gl::draw( gl::Texture( shadowMapSurface ), Rectf( 0, 0, 128*2, 128*2 ) ); */ }
/* * @Description: Listen for key presses * @param: KeyEvent * @return: none */ void Base_ThreeD_ProjectApp::keyDown( KeyEvent event ) { //printf("%i \n", event.getCode()); switch ( event.getCode() ) { case KeyEvent::KEY_1: { RENDER_MODE = 0; } break; case KeyEvent::KEY_2: { RENDER_MODE = 1; } break; case KeyEvent::KEY_3: { RENDER_MODE = 2; } break; case KeyEvent::KEY_4: { RENDER_MODE = 3; } break; case KeyEvent::KEY_UP: { Vec3f lightPos = mLight->getPosition(); if ( lightPos.y > 0 ) lightPos.y *= -1; lightPos = lightPos + Vec3f(0, 0.0, 0.1); mLight->lookAt( lightPos, Vec3f::zero() ); //mLight->update( *mCam ); lightPos = mLightRef->getPosition() + Vec3f(0, 0.0, 0.1); mLightRef->lookAt( lightPos, Vec3f::zero() ); mLightRef->update( *mCam ); } break; case KeyEvent::KEY_DOWN: { Vec3f lightPos = mLight->getPosition(); if ( lightPos.y > 0 ) lightPos.y *= -1; lightPos = lightPos + Vec3f(0, 0.0, -0.1); mLight->lookAt( lightPos, Vec3f::zero() ); //mLight->update( *mCam ); lightPos = mLightRef->getPosition() + Vec3f(0, 0.0, -0.1); mLightRef->lookAt( lightPos, Vec3f::zero() ); mLightRef->update( *mCam ); } break; case KeyEvent::KEY_LEFT: { Vec3f lightPos = mLight->getPosition(); if ( lightPos.y > 0 ) lightPos.y *= -1; lightPos = lightPos + Vec3f(0.1, 0, 0); mLight->lookAt( lightPos, Vec3f::zero() ); //mLight->update( *mCam ); lightPos = mLightRef->getPosition() + Vec3f(0.1, 0, 0); mLightRef->lookAt( lightPos, Vec3f::zero() ); mLightRef->update( *mCam ); } break; case KeyEvent::KEY_RIGHT: { Vec3f lightPos = mLight->getPosition(); if ( lightPos.y > 0 ) lightPos.y *= -1; lightPos = lightPos + Vec3f(-0.1, 0, 0); mLight->lookAt( lightPos, Vec3f::zero() ); //mLight->update( *mCam ); lightPos = mLightRef->getPosition() + Vec3f(-0.1, 0, 0); mLightRef->lookAt( lightPos, Vec3f::zero() ); mLightRef->update( *mCam ); } break; case KeyEvent::KEY_w: { mEye = mCam->getEyePoint(); mEye = Quatf( Vec3f(1, 0, 0), -0.03f ) * mEye; mCam->lookAt( mEye, Vec3f::zero() ); //mLight->update( *mCam ); mLightRef->update( *mCam ); } break; case KeyEvent::KEY_a: { mEye = mCam->getEyePoint(); mEye = Quatf( Vec3f(0, 1, 0), 0.03f ) * mEye; mCam->lookAt( mEye, Vec3f::zero() ); //mLight->update( *mCam ); mLightRef->update( *mCam ); } break; case KeyEvent::KEY_s: { mEye = mCam->getEyePoint(); mEye = Quatf( Vec3f(1, 0, 0), 0.03f ) * mEye; mCam->lookAt( mEye, Vec3f::zero() ); //mLight->update( *mCam ); mLightRef->update( *mCam ); } break; case KeyEvent::KEY_d: { mEye = mCam->getEyePoint(); mEye = Quatf( Vec3f(0, 1, 0), -0.03f ) * mEye; mCam->lookAt( mEye, Vec3f::zero() ); //mLight->update( *mCam ); mLightRef->update( *mCam ); } break; default: break; } }
/* * @Description: setup function ( more aesthetic as could be in constructor here ) * @param: none * @return: none */ void Base_ThreeD_ProjectApp::setup() { RENDER_MODE = 3; glEnable( GL_LIGHTING ); glEnable( GL_DEPTH_TEST ); glEnable(GL_RESCALE_NORMAL); //important if things are being scaled as OpenGL also scales normals ( for proper lighting they need to be normalized ) mParams = params::InterfaceGl( "3D_Scene_Base", Vec2i( 225, 125 ) ); mParams.addParam( "Framerate", &mCurrFramerate, "", true ); mParams.addParam( "Eye Distance", &mCameraDistance, "min=-100.0 max=-5.0 step=1.0 keyIncr== keyDecr=-"); mParams.addParam( "Lighting On", &mLightingOn, "key=l"); mParams.addParam( "Show/Hide Params", &mShowParams, "key=x"); mParams.addSeparator(); mCurrFramerate = 0.0f; mLightingOn = true; mViewFromLight = false; mShowParams = true; //create camera mCameraDistance = CAM_POSITION_INIT.z; mEye = Vec3f(CAM_POSITION_INIT.x, CAM_POSITION_INIT.y, CAM_POSITION_INIT.z); mCenter = Vec3f::zero(); mUp = Vec3f::yAxis(); mCam = new CameraPersp( getWindowWidth(), getWindowHeight(), 180.0f ); mCam->lookAt(mEye, mCenter, mUp); mCam->setPerspective( 45.0f, getWindowAspectRatio(), 1.0f, 50.0f ); gl::setMatrices( *mCam ); //create light mLight = new gl::Light( gl::Light::DIRECTIONAL, 0 ); mLight->lookAt( Vec3f(LIGHT_POSITION_INIT.x, LIGHT_POSITION_INIT.y * -1, LIGHT_POSITION_INIT.z), Vec3f( 0, 0, 0 ) ); mLight->setAmbient( Color( 1.0f, 1.0f, 1.0f ) ); mLight->setDiffuse( Color( 1.0f, 1.0f, 1.0f ) ); mLight->setSpecular( Color( 1.0f, 1.0f, 1.0f ) ); mLight->setShadowParams( 100.0f, 1.0f, 20.0f ); mLight->update( *mCam ); mLight->enable(); //create light ref mLightRef = new gl::Light( gl::Light::DIRECTIONAL, 0 ); mLightRef->lookAt( LIGHT_POSITION_INIT, Vec3f( 0, 0, 0 ) ); mLightRef->setShadowParams( 100.0f, 1.0f, 20.0f ); //DEBUG Test objects ci::ColorA pink( CM_RGB, 0.84f, 0.49f, 0.50f, 1.0f ); ci::ColorA green( CM_RGB, 0.39f, 0.78f, 0.64f, 1.0f ); ci::ColorA blue( CM_RGB, 0.32f, 0.59f, 0.81f, 1.0f ); ci::ColorA orange( CM_RGB, 0.77f, 0.35f, 0.35f, 1.0f ); gl::Material torusMaterial; torusMaterial.setSpecular( ColorA( 1.0, 1.0, 1.0, 1.0 ) ); torusMaterial.setDiffuse( pink ); torusMaterial.setAmbient( ColorA( 0.3, 0.3, 0.3, 1.0 ) ); torusMaterial.setShininess( 25.0f ); gl::Material boardMaterial; boardMaterial.setSpecular( ColorA( 0.0, 0.0, 0.0, 0.0 ) ); boardMaterial.setAmbient( ColorA( 0.3, 0.3, 0.3, 1.0 ) ); boardMaterial.setDiffuse( green ); boardMaterial.setShininess( 0.0f ); gl::Material boxMaterial; boxMaterial.setSpecular( ColorA( 0.0, 0.0, 0.0, 0.0 ) ); boxMaterial.setAmbient( ColorA( 0.3, 0.3, 0.3, 1.0 ) ); boxMaterial.setDiffuse( blue ); boxMaterial.setShininess( 0.0f ); gl::Material sphereMaterial; sphereMaterial.setSpecular( ColorA( 1.0, 1.0, 1.0, 1.0 ) ); sphereMaterial.setAmbient( ColorA( 0.3, 0.3, 0.3, 1.0 ) ); sphereMaterial.setDiffuse( orange ) ; sphereMaterial.setShininess( 35.0f ); //using DisplayLists for simplicity but highly recommend to use VBO's for serious work ( as DisplayLists will be deprecated soon ... and speed difference in now negligible ) mTorus = gl::DisplayList( GL_COMPILE ); mTorus.newList(); gl::drawTorus( 1.0f, 0.3f, 32, 64 ); mTorus.endList(); mTorus.setMaterial( torusMaterial ); mBoard = gl::DisplayList( GL_COMPILE ); mBoard.newList(); gl::drawCube( Vec3f( 0.0f, 0.0f, 0.0f ), Vec3f( 10.0f, 0.1f, 10.0f ) ); mBoard.endList(); mBoard.setMaterial( boardMaterial ); mBox = gl::DisplayList( GL_COMPILE ); mBox.newList(); gl::drawCube( Vec3f( 0.0f, 0.0f, 0.0f ), Vec3f( 1.0f, 1.0f, 1.0f ) ); mBox.endList(); mBox.setMaterial( boxMaterial ); mSphere = gl::DisplayList( GL_COMPILE ); mSphere.newList(); gl::drawSphere( Vec3f::zero(), 0.8f, 30 ); mSphere.endList(); mSphere.setMaterial( sphereMaterial ); //noise texture required for SSAO calculations mRandomNoise = gl::Texture( loadImage( loadResource( NOISE_SAMPLER ) ) ); initFBOs(); initShaders(); }