From 76e2ca301e4bbecaf843a017745330d8575de163 Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Thu, 11 Apr 2013 17:53:57 -0700 Subject: [PATCH] Fixes stephen asked for - remove finger stuff --- interface/src/Finger.cpp | 201 --------------------------------------- interface/src/Finger.h | 47 --------- interface/src/main.cpp | 11 +-- 3 files changed, 1 insertion(+), 258 deletions(-) delete mode 100644 interface/src/Finger.cpp delete mode 100644 interface/src/Finger.h diff --git a/interface/src/Finger.cpp b/interface/src/Finger.cpp deleted file mode 100644 index 1ea3b26fe6..0000000000 --- a/interface/src/Finger.cpp +++ /dev/null @@ -1,201 +0,0 @@ -// -// Finger.cpp -// interface -// -// Created by Philip on 1/21/13. -// Copyright (c) 2013 High Fidelity, Inc. All rights reserved. -// - -#include "Finger.h" - -#ifdef _WIN32 - -float fminf( float x, float y ) -{ - return x < y ? x : y; -} - -#endif - -const int NUM_BEADS = 75; -const float RADIUS = 50; // Radius of beads around finger - -const int NUM_PUCKS = 10; - -Finger::Finger(int w, int h) { - width = w; - height = h; - pos.x = pos.y = 0; - vel.x = vel.y = 0; - target.x = target.y = 0; - m = 1; - pressure = 0; - start = true; - // Create surface beads - beads = new bead[NUM_BEADS]; - pucks = new puck[NUM_PUCKS]; - - float alpha = 0; - for (int i = 0; i < NUM_BEADS; i++) { - beads[i].target.x = cosf(alpha)*RADIUS + 2.0f*(randFloat() - 0.5f); - beads[i].target.y = sinf(alpha)*RADIUS + 2.0f*(randFloat() - 0.5f); - beads[i].pos.x = beads[i].pos.y = 0.0; - beads[i].vel.x = beads[i].vel.y = 0.0; - alpha += 2.0f*PIf/NUM_BEADS; - beads[i].color[0] = randFloat()*0.05f; beads[i].color[1] = randFloat()*0.05f; beads[i].color[2] = 0.75f + randFloat()*0.25f; - beads[i].brightness = 0.0; - } - for (int i = 0; i < NUM_PUCKS; i++) { - pucks[i].pos.x = randFloat()*width; - pucks[i].pos.y = randFloat()*height; - pucks[i].radius = 5.0f + randFloat()*30.0f; - pucks[i].vel.x = pucks[i].vel.y = 0.0; - pucks[i].mass = pucks[i].radius*pucks[i].radius/25.0f; - } - -} - -const float SHADOW_COLOR[4] = {0.0, 0.0, 0.0, 0.75}; -const float SHADOW_OFFSET = 2.5; - -void Finger::render() { - glEnable(GL_POINT_SMOOTH); - - glPointSize(30.0f); - glBegin(GL_POINTS); - glColor4fv(SHADOW_COLOR); - glVertex2f(pos.x + SHADOW_OFFSET, pos.y + SHADOW_OFFSET); - glColor4f(0.0, 0.0, 0.7f, 1.0); - glVertex2f(pos.x, pos.y); - glEnd(); - - // Render Pucks - for (int i = 0; i < NUM_PUCKS; i++) { - glColor4fv(SHADOW_COLOR); - glPointSize(pucks[i].radius*2.f); - glBegin(GL_POINTS); - glVertex2f(pucks[i].pos.x + SHADOW_OFFSET, pucks[i].pos.y + SHADOW_OFFSET); - glColor4f(1.0, 0.0, 0.0, 1.0); - glVertex2f(pucks[i].pos.x, pucks[i].pos.y); - glEnd(); - } - - // Render beads - glPointSize(5.0f); - glLineWidth(3.0); - - glBegin(GL_POINTS); - for (int i = 0; i < NUM_BEADS; i++) { - glColor4fv(SHADOW_COLOR); - glVertex2f(beads[i].pos.x + SHADOW_OFFSET, beads[i].pos.y + SHADOW_OFFSET); - glColor3f(beads[i].color[0]+beads[i].brightness, beads[i].color[1]+beads[i].brightness, beads[i].color[2]+beads[i].brightness); - glVertex2f(beads[i].pos.x, beads[i].pos.y); - } - glEnd(); - -} - -void Finger::setTarget(int x, int y) { - target.x = static_cast(x); - target.y = static_cast(y); - if (start) { - // On startup, set finger to first target location - pos.x = target.x; - pos.y = target.y; - vel.x = vel.y = 0.0; - start = false; - } -} - -void Finger::simulate(float deltaTime) { - // Using the new target position x and y as where the mouse intends the finger to be, move the finger - if (!start) { - - // Move the finger - float distance = glm::distance(pos, target); - //float spring_length = 0; - const float SPRING_FORCE = 1000.0; - - if (distance > 0.1) { - vel += glm::normalize(target - pos)*deltaTime*SPRING_FORCE*distance; - } - // Decay Velocity (Drag) - - vel *= 0.8; - //vel *= (1.f - CONSTANT_DAMPING*deltaTime); - - // Update position - pos += vel*deltaTime; - - // Update the beads - const float BEAD_SPRING_FORCE = 500.0; - const float BEAD_NEIGHBOR_FORCE = 200.0; - const float HARD_SPHERE_FORCE = 2500.0; - const float PRESSURE_FACTOR = 0.00; - float separation, contact; - float newPressure = 0; - int n1, n2; - float d1, d2; - - for (int i = 0; i < NUM_BEADS; i++) { - distance = glm::distance(beads[i].pos, pos + beads[i].target * (1.f + pressure*PRESSURE_FACTOR)); - if (distance > 0.1) { - beads[i].vel += glm::normalize((pos + (beads[i].target*(1.f + pressure*PRESSURE_FACTOR))) - beads[i].pos)*deltaTime*BEAD_SPRING_FORCE*distance; - } - // Add forces from 2 neighboring beads - if ((i-1)>=0) n1 = i - 1; - else n1 = NUM_PUCKS - 1; - if ((i+1) 0.01) beads[i].vel += glm::normalize(beads[n1].pos - beads[i].pos)*deltaTime*BEAD_NEIGHBOR_FORCE*distance; - d2 = glm::distance(beads[i].pos, beads[n2].pos); - if (d2 > 0.01) beads[i].vel += glm::normalize(beads[n2].pos - beads[i].pos)*deltaTime*BEAD_NEIGHBOR_FORCE*distance; - - - // Look for hard collision with pucks - for (int j = 0; j < NUM_PUCKS; j++) { - - separation = glm::distance(beads[i].pos, pucks[j].pos); - contact = 2.5f + pucks[j].radius; - - // Hard Sphere Scattering - - if (separation < contact) { - beads[i].vel += glm::normalize(beads[i].pos - pucks[j].pos)* - deltaTime*HARD_SPHERE_FORCE*(contact - separation); - pucks[j].vel -= glm::normalize(beads[i].pos - pucks[j].pos)* - deltaTime*HARD_SPHERE_FORCE*(contact - separation)/pucks[j].mass; - if (beads[i].brightness < 0.5) beads[i].brightness = 0.5; - beads[i].brightness *= 1.1f; - } else { - beads[i].brightness *= 0.95f; - } - beads[i].brightness = fminf(beads[i].brightness, 1.f); - } - - - // Decay velocity, move beads - beads[i].vel *= 0.85; - beads[i].pos += beads[i].vel*deltaTime; - - // Measure pressure for next run - newPressure += glm::distance(beads[i].pos, pos); - } - if (fabs(newPressure - NUM_BEADS*RADIUS) < 100.f) pressure = newPressure - (NUM_BEADS*RADIUS); - - // Update the pucks for any pressure they have received - for (int j = 0; j < NUM_PUCKS; j++) { - pucks[j].vel *= 0.99; - - if (pucks[j].radius < 25.0) pucks[j].pos += pucks[j].vel*deltaTime; - - // wrap at edges - if (pucks[j].pos.x > width) pucks[j].pos.x = 0.0; - if (pucks[j].pos.x < 0) pucks[j].pos.x = static_cast(width); - if (pucks[j].pos.y > height) pucks[j].pos.y = 0.0; - if (pucks[j].pos.y < 0) pucks[j].pos.y = static_cast(height); - } - - } -} diff --git a/interface/src/Finger.h b/interface/src/Finger.h deleted file mode 100644 index 694eec9e33..0000000000 --- a/interface/src/Finger.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// Finger.h -// interface -// -// Created by Philip on 1/21/13. -// Copyright (c) 2013 High Fidelity, Inc. All rights reserved. -// - -#ifndef __interface__Finger__ -#define __interface__Finger__ - -#include -#include "Util.h" -#include "world.h" -#include "InterfaceConfig.h" - -#include - -class Finger { -public: - Finger(int w, int h); - void simulate(float deltaTime); - void render(); - void setTarget(int x, int y); -private: - int width, height; // Screen size in pixels - bool start; - glm::vec2 pos, vel; // Position and velocity of finger - float m; // Velocity of finger - float pressure; // Internal pressure of skin vessel as function of measured volume - glm::vec2 target; // Where the mouse is - // little beads used to render the dynamic skin surface - struct bead { - glm::vec2 target, pos, vel; - float color[3]; - float brightness; - } *beads; - struct puck { - glm::vec2 pos, vel; - float brightness; - float radius; - float mass; - } *pucks; -}; - -#endif /* defined(__interface__finger__) */ - diff --git a/interface/src/main.cpp b/interface/src/main.cpp index c3671f6e6b..5b11d9e34e 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -69,7 +69,6 @@ #include #include #include "VoxelSystem.h" -#include "Finger.h" #include "Oscilloscope.h" #include "UDPSocket.h" #include "SerialInterface.h" @@ -127,8 +126,6 @@ Cloud cloud(0, // Particles ); VoxelSystem voxels; - -Finger myFinger(WIDTH, HEIGHT); Field field; #ifndef _WIN32 @@ -321,7 +318,6 @@ void init(void) myAvatar.setPos(start_location ); myCamera.setPosition( start_location ); - myFinger.setTarget(WIDTH/2, HEIGHT/2); #ifdef MARKER_CAPTURE if(marker_capture_enabled){ @@ -864,8 +860,6 @@ void display(void) gluOrtho2D(0, WIDTH, HEIGHT, 0); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); - - myFinger.render(); #ifndef _WIN32 audio.render(WIDTH, HEIGHT); @@ -1279,7 +1273,6 @@ void idle(void) myAvatar.simulate(1.f/FPS); balls.simulate(1.f/FPS); cloud.simulate(1.f/FPS); - myFinger.simulate(1.f/FPS); glutPostRedisplay(); lastTimeIdle = check; @@ -1346,9 +1339,7 @@ void mouseoverFunc( int x, int y) mouseX = x; mouseY = y; if (mousePressed == 0) - { - myFinger.setTarget(mouseX, mouseY); - } + {} } void attachNewHeadToAgent(Agent *newAgent) {