From 6172b38f49653a9786b74953c06d21ab8a1c3cb2 Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Sun, 25 Nov 2012 15:32:55 -0800 Subject: [PATCH] Added test routine makecubes() and key handlers --- .../UserInterfaceState.xcuserstate | Bin 103502 -> 104780 bytes .../xcdebugger/Breakpoints.xcbkptlist | 13 +++++ main.cpp | 53 ++++++++++++++++-- util.cpp | 28 ++++++++- util.h | 4 ++ world.h | 4 +- 6 files changed, 96 insertions(+), 6 deletions(-) diff --git a/interface.xcodeproj/project.xcworkspace/xcuserdata/philip.xcuserdatad/UserInterfaceState.xcuserstate b/interface.xcodeproj/project.xcworkspace/xcuserdata/philip.xcuserdatad/UserInterfaceState.xcuserstate index 99d39951b83814b04efb34739c4a0c3e86806a6d..1aded4aa69d1438242e9e35135534eb0091d71d7 100644 GIT binary patch delta 36515 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 delta 35097 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 OoBluh|DWjl^Zx^F)?M8I diff --git a/interface.xcodeproj/xcuserdata/philip.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/interface.xcodeproj/xcuserdata/philip.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist index 556fc539eb..f5c01eb1d0 100644 --- a/interface.xcodeproj/xcuserdata/philip.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist +++ b/interface.xcodeproj/xcuserdata/philip.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -16,5 +16,18 @@ landmarkName = "field_avg_neighbors(int index, glm::vec3 * result)" landmarkType = "7"> + + diff --git a/main.cpp b/main.cpp index 016e202ab0..3596d20183 100644 --- a/main.cpp +++ b/main.cpp @@ -95,11 +95,16 @@ ParticleSystem balls(0, 0.0 // Gravity ); -Cloud cloud(300000, // Particles +Cloud cloud(0, // Particles box, // Bounding Box false // Wrap ); +float cubes_position[MAX_CUBES*3]; +float cubes_scale[MAX_CUBES]; +float cubes_color[MAX_CUBES*3]; +int cube_count = 0; + #define RENDER_FRAME_MSECS 10 #define SLEEP 0 @@ -271,6 +276,18 @@ void init(void) myHead.setNoise(noise); } + int index = 0; + float location[] = {0,0,0}; + float scale = 10.0; + int j = 0; + while (index < (MAX_CUBES/2)) { + index = 0; + j++; + makeCubes(location, scale, &index, cubes_position, cubes_scale, cubes_color); + std::cout << "Run " << j << " Made " << index << " cubes\n"; + cube_count = index; + } + //load_png_as_texture(texture_filename); if (serial_on) @@ -491,6 +508,20 @@ void display(void) glRotatef(render_pitch, 1, 0, 0); glRotatef(render_yaw, 0, 1, 0); glTranslatef(location[0], location[1], location[2]); + + glPushMatrix(); + glTranslatef(WORLD_SIZE/2, WORLD_SIZE/2, WORLD_SIZE/2); + int i = 0; + while (i < cube_count) { + glPushMatrix(); + glTranslatef(cubes_position[i*3], cubes_position[i*3+1], cubes_position[i*3+2]); + glColor3fv(&cubes_color[i*3]); + glutSolidCube(cubes_scale[i]); + glPopMatrix(); + i++; + } + glPopMatrix(); + /* Draw Point Sprites */ @@ -587,7 +618,20 @@ void display(void) glutSwapBuffers(); framecount++; } - +void specialkey(int k, int x, int y) +{ + if (k == GLUT_KEY_UP) fwd_vel += 0.05; + if (k == GLUT_KEY_DOWN) fwd_vel -= 0.05; + if (k == GLUT_KEY_LEFT) { + if (glutGetModifiers() == GLUT_ACTIVE_SHIFT) lateral_vel -= 0.02; + else render_yaw_rate -= 0.25; + } + if (k == GLUT_KEY_RIGHT) { + if (glutGetModifiers() == GLUT_ACTIVE_SHIFT) lateral_vel += 0.02; + else render_yaw_rate += 0.25; + } + +} void key(unsigned char k, int x, int y) { // Process keypresses @@ -728,8 +772,8 @@ void reshape(int width, int height) glLoadIdentity(); gluPerspective(45, //view angle 1.0, //aspect ratio - 1.0, //near clip - 200.0);//far clip + 0.1, //near clip + 50.0);//far clip glMatrixMode(GL_MODELVIEW); glLoadIdentity(); @@ -810,6 +854,7 @@ int main(int argc, char** argv) glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(key); + glutSpecialFunc(specialkey); glutMotionFunc(motionFunc); glutMouseFunc(mouseFunc); glutIdleFunc(idle); diff --git a/util.cpp b/util.cpp index 81d6bca869..89fdcc8900 100644 --- a/util.cpp +++ b/util.cpp @@ -15,11 +15,37 @@ #include "world.h" #include "glm/glm.hpp" - float randFloat () { return (rand()%10000)/10000.f; } +void makeCubes(float location[3], float scale, int * index, + float * cubes_position, float * cubes_scale, float * cubes_color) { + int i; + float spot[3]; + //std::cout << "loc: " << location[0] << "," + //<< location[1] << "," << location[2] << "\n"; + if ((*index >= MAX_CUBES) || (scale < SMALLEST_CUBE)) return; + if (randFloat() < 0.5) { + // Make a cube + for (i = 0; i < 3; i++) cubes_position[*index*3 + i] = location[i]; + cubes_scale[*index] = scale; + cubes_color[*index*3] = randFloat(); + cubes_color[*index*3 + 1] = randFloat(); + cubes_color[*index*3 + 2] = randFloat(); + *index += 1; + //std::cout << "Quad made at scale " << scale << "\n"; + } else { + for (i = 0; i < 8; i++) { + spot[0] = location[0] + (i%2)*scale/2.0; + spot[1] = location[1] + ((i/2)%2)*scale/2.0; + spot[2] = location[2] + ((i/4)%2)*scale/2.0; + //std::cout << spot[0] << "," << spot[1] << "," << spot[2] << "\n"; + makeCubes(spot, scale/2.0, index, cubes_position, cubes_scale, cubes_color); + } + } +} + void render_vector(glm::vec3 * vec) { // Show edge of world diff --git a/util.h b/util.h index 637248b761..c6c2a319db 100644 --- a/util.h +++ b/util.h @@ -8,6 +8,7 @@ #ifndef interface_util_h #define interface_util_h + #include "glm/glm.hpp" void outstring(char * string, int length); @@ -20,4 +21,7 @@ void drawvec3(int x, int y, float scale, float rotate, float thick, int mono, gl float r=1.0, float g=1.0, float b=1.0); double diffclock(timeval clock1,timeval clock2); +void makeCubes(float location[3], float scale, int * index, + float * cubes_position, float * cubes_scale, float * cubes_color); + #endif diff --git a/world.h b/world.h index e11976c1c8..106f47ff69 100644 --- a/world.h +++ b/world.h @@ -6,7 +6,7 @@ // Copyright (c) 2012 __MyCompanyName__. All rights reserved. // -// Simulation happens in positive cube with edge of size WORLD_SIZE +// Simulation happens in positive cube with edge of size WORLD_SIZE #ifndef interface_world_h #define interface_world_h @@ -14,5 +14,7 @@ const float WORLD_SIZE = 10.0; #define PI 3.14159265 +#define MAX_CUBES 2000 +#define SMALLEST_CUBE 0.01 #endif