From 47c652a150286e931174daec85678cc4be77be42 Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 13 Nov 2008 17:27:59 +0000 Subject: [PATCH] updating distances for each logo each frame, rotating based on viewer position git-svn-id: svn://anubis/dwscr/trunk@101 5bef9df8-b654-44bb-925b-0ff18baa8f8c --- ss/LightBounce.cc | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/ss/LightBounce.cc b/ss/LightBounce.cc index c6071d4..c635732 100644 --- a/ss/LightBounce.cc +++ b/ss/LightBounce.cc @@ -110,10 +110,13 @@ LightBounce::LightBounce(SSMain * _SSMain) : SSMode(_SSMain) } y += box_stride; } + + glPushAttrib(GL_POLYGON_BIT); /* store CULL_FACE settings */ } LightBounce::~LightBounce() { + glPopAttrib(); int sz = m_boxes.size(); for (int i = 0; i < sz; i++) delete m_boxes[i]; @@ -127,14 +130,25 @@ void LightBounce::update() int numMonitors = m_SSMain->getNumMonitors(); int width = m_SSMain->getWidth(); int height = m_SSMain->getHeight(); + + /* update the viewer position */ + double angle = m_elapsed/3700.0f; + double viewer_dist = SIZE * ZOOM; + float viewer_x = viewer_dist * cos(angle); + float viewer_z = viewer_dist * sin(angle); + float viewer_y = SIZE * ZOOM * 2.0 / 3.0; + + for (int i = 0, sz = m_boxes.size(); i < sz; i++) + { + m_boxes[i]->updateDist(viewer_x, viewer_y, viewer_z); + } + for (int i = 0; i < numMonitors; i++) { glViewport(i*width/numMonitors, 0, width/numMonitors, height); glLoadIdentity(); - gluLookAt(0, SIZE * ZOOM * 2.0 / 3.0, SIZE * ZOOM, 0, 0, 0, 0, 1, 0); - glRotatef(m_elapsed/66.0f, 0, 1, 0); - int sz = m_boxes.size(); - for (int i = 0; i < sz; i++) + gluLookAt(viewer_x, viewer_y, viewer_z, 0, 0, 0, 0, 1, 0); + for (int i = 0, sz = m_boxes.size(); i < sz; i++) { m_boxes[i]->draw(); }