From 270f77799d660911ac6e4f1e9ef3cfe6bb61351b Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 28 Mar 2013 17:21:47 -0700 Subject: [PATCH] added random color options, cleaned up compiler warnings, add reAverageParentColors when modifying voxel tree --- interface/src/VoxelSystem.cpp | 4 ++-- interface/src/VoxelSystem.h | 2 +- interface/src/main.cpp | 11 +++++---- shared/src/SharedUtil.cpp | 4 ++-- shared/src/SharedUtil.h | 4 ++-- shared/src/VoxelTree.cpp | 16 +++++++------ shared/src/VoxelTree.h | 2 +- voxel/src/main.cpp | 43 +++++++++++++++++++++++------------ 8 files changed, 51 insertions(+), 35 deletions(-) diff --git a/interface/src/VoxelSystem.cpp b/interface/src/VoxelSystem.cpp index 9c30754f0d..14f75d7e0a 100644 --- a/interface/src/VoxelSystem.cpp +++ b/interface/src/VoxelSystem.cpp @@ -74,9 +74,9 @@ void VoxelSystem::loadVoxelsFile(const char* fileName, bool wantColorRandomizer) // mechanism to tell the system to redraw it's arrays after voxels are done // being added. This is a concept mostly only understood by VoxelSystem. // Complaints: Brad :) -void VoxelSystem::createSphere(float r,float xc, float yc, float zc, float s, bool solid) { +void VoxelSystem::createSphere(float r,float xc, float yc, float zc, float s, bool solid, bool wantColorRandomizer) { - tree->createSphere(r,xc,yc,zc,s,solid); + tree->createSphere(r,xc,yc,zc,s,solid,wantColorRandomizer); // reset the verticesEndPointer so we're writing to the beginning of the array verticesEndPointer = verticesArray; diff --git a/interface/src/VoxelSystem.h b/interface/src/VoxelSystem.h index 4427f71c49..1bfd4c185e 100644 --- a/interface/src/VoxelSystem.h +++ b/interface/src/VoxelSystem.h @@ -34,7 +34,7 @@ public: void setVoxelsRendered(int v) {voxelsRendered = v;}; int getVoxelsRendered() {return voxelsRendered;}; void loadVoxelsFile(const char* fileName,bool wantColorRandomizer); - void createSphere(float r,float xc, float yc, float zc, float s, bool solid); + void createSphere(float r,float xc, float yc, float zc, float s, bool solid, bool wantColorRandomizer); private: int voxelsRendered; VoxelTree *tree; diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 34ad84d2f4..70a3d1c34d 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -81,6 +81,8 @@ int WIDTH = 1200; int HEIGHT = 800; int fullscreen = 0; +bool wantColorRandomizer = true; // for addSphere and load file + Oscilloscope audioScope(256,200,true); #define HAND_RADIUS 0.25 // Radius of in-world 'hand' of you @@ -625,7 +627,7 @@ void testPointToVoxel() } } -void addRandomSphere() +void addRandomSphere(bool wantColorRandomizer) { float r = randFloatInRange(0.05,0.1); float xc = randFloatInRange(r,(1-r)); @@ -640,7 +642,7 @@ void addRandomSphere() printf("yc=%f\n",yc); printf("zc=%f\n",zc); - voxels.createSphere(r,xc,yc,zc,s,solid); + voxels.createSphere(r,xc,yc,zc,s,solid,wantColorRandomizer); } @@ -758,7 +760,7 @@ void key(unsigned char k, int x, int y) // press the . key to get a new random sphere of voxels added if (k == '.') { - addRandomSphere(); + addRandomSphere(wantColorRandomizer); //testPointToVoxel(); } } @@ -899,7 +901,7 @@ int main(int argc, const char * argv[]) { const char* domainIP = getCmdOption(argc, argv, "--domain"); if (domainIP) { - sprintf(DOMAIN_IP,domainIP); + strcpy(DOMAIN_IP,domainIP); } // Handle Local Domain testing with the --local command line @@ -953,7 +955,6 @@ int main(int argc, const char * argv[]) init(); - bool wantColorRandomizer = true; // Check to see if the user passed in a command line option for randomizing colors if (cmdOptionExists(argc, argv, "--NoColorRandomizer")) { wantColorRandomizer = false; diff --git a/shared/src/SharedUtil.cpp b/shared/src/SharedUtil.cpp index 2890a4f5bc..5d1072ff57 100644 --- a/shared/src/SharedUtil.cpp +++ b/shared/src/SharedUtil.cpp @@ -93,7 +93,7 @@ void switchToResourcesIfRequired() { // then you're using the "-i" flag to set the input file name. // Usage: char * inputFilename = getCmdOption(argc, argv, "-i"); // Complaints: Brad :) -const char* getCmdOption(int argc, const char * argv[],char* option) { +const char* getCmdOption(int argc, const char * argv[],const char* option) { // check each arg for (int i=0; i < argc; i++) { // if the arg matches the desired option @@ -112,7 +112,7 @@ const char* getCmdOption(int argc, const char * argv[],char* option) { // Usage: bool wantDump = cmdOptionExists(argc, argv, "-d"); // Complaints: Brad :) -bool cmdOptionExists(int argc, const char * argv[],char* option) { +bool cmdOptionExists(int argc, const char * argv[],const char* option) { // check each arg for (int i=0; i < argc; i++) { // if the arg matches the desired option diff --git a/shared/src/SharedUtil.h b/shared/src/SharedUtil.h index 2345a85d00..eb09a98436 100644 --- a/shared/src/SharedUtil.h +++ b/shared/src/SharedUtil.h @@ -34,8 +34,8 @@ bool oneAtBit(unsigned char byte, int bitIndex); void switchToResourcesIfRequired(); -const char* getCmdOption(int argc, const char * argv[],char* option); -bool cmdOptionExists(int argc, const char * argv[],char* option); +const char* getCmdOption(int argc, const char * argv[],const char* option); +bool cmdOptionExists(int argc, const char * argv[],const char* option); unsigned char* pointToVoxel(float x, float y, float z, float s, unsigned char r, unsigned char g, unsigned char b ); #endif /* defined(__hifi__SharedUtil__) */ diff --git a/shared/src/VoxelTree.cpp b/shared/src/VoxelTree.cpp index 085315ad86..b811f77b72 100644 --- a/shared/src/VoxelTree.cpp +++ b/shared/src/VoxelTree.cpp @@ -463,7 +463,7 @@ void VoxelTree::loadVoxelsFile(const char* fileName, bool wantColorRandomizer) { // Description: Creates a sphere of voxels in the local system at a given location/radius // To Do: Move this function someplace better? // Complaints: Brad :) -void VoxelTree::createSphere(float r,float xc, float yc, float zc, float s, bool solid) { +void VoxelTree::createSphere(float r,float xc, float yc, float zc, float s, bool solid, bool wantColorRandomizer) { // About the color of the sphere... we're going to make this sphere be a gradient // between two RGB colors. We will do the gradient along the phi spectrum unsigned char r1 = randomColorValue(165); @@ -504,18 +504,19 @@ void VoxelTree::createSphere(float r,float xc, float yc, float zc, float s, bool // If you also iterate form the interior of the sphere to the radius, makeing // larger and larger sphere's you'd end up with a solid sphere. And lots of voxels! for (; ri <= r; ri+=s) { + //printf("radius: %f\n",ri); for (float theta=0.0; theta <= 2*M_PI; theta += angleDelta) { for (float phi=0.0; phi <= M_PI; phi += angleDelta) { t++; // total voxels - float x = xc+r*cos(theta)*sin(phi); - float y = yc+r*sin(theta)*sin(phi); - float z = zc+r*cos(phi); + float x = xc+ri*cos(theta)*sin(phi); + float y = yc+ri*sin(theta)*sin(phi); + float z = zc+ri*cos(phi); // gradient color data float gradient = (phi/M_PI); - unsigned char red = r1+((r2-r1)*gradient); - unsigned char green = g1+((g2-g1)*gradient); - unsigned char blue = b1+((b2-b1)*gradient); + unsigned char red = wantColorRandomizer ? randomColorValue(165) : r1+((r2-r1)*gradient); + unsigned char green = wantColorRandomizer ? randomColorValue(165) : g1+((g2-g1)*gradient); + unsigned char blue = wantColorRandomizer ? randomColorValue(165) : b1+((b2-b1)*gradient); unsigned char* voxelData = pointToVoxel(x,y,z,s,red,green,blue); this->readCodeColorBufferToTree(voxelData); @@ -523,4 +524,5 @@ void VoxelTree::createSphere(float r,float xc, float yc, float zc, float s, bool } } } + this->reaverageVoxelColors(this->rootNode); } \ No newline at end of file diff --git a/shared/src/VoxelTree.h b/shared/src/VoxelTree.h index 6b0da733e2..1f027111fc 100644 --- a/shared/src/VoxelTree.h +++ b/shared/src/VoxelTree.h @@ -39,7 +39,7 @@ public: unsigned char * octalCode = NULL); void loadVoxelsFile(const char* fileName, bool wantColorRandomizer); - void createSphere(float r,float xc, float yc, float zc, float s, bool solid); + void createSphere(float r,float xc, float yc, float zc, float s, bool solid, bool wantColorRandomizer); }; #endif /* defined(__hifi__VoxelTree__) */ diff --git a/voxel/src/main.cpp b/voxel/src/main.cpp index 90ae4aff53..879248ddb5 100644 --- a/voxel/src/main.cpp +++ b/voxel/src/main.cpp @@ -47,21 +47,23 @@ const int MAX_VOXEL_TREE_DEPTH_LEVELS = 4; AgentList agentList('V', VOXEL_LISTEN_PORT); VoxelTree randomTree; -void addRandomSphere(VoxelTree * tree) { - float r = randFloatInRange(0.05,0.1); - float xc = randFloatInRange(r,(1-r)); - float yc = randFloatInRange(r,(1-r)); - float zc = randFloatInRange(r,(1-r)); - float s = 0.001; // size of voxels to make up surface of sphere +void addSphere(VoxelTree * tree,bool random, bool wantColorRandomizer) { + float r = random ? randFloatInRange(0.05,0.1) : 0.25; + float xc = random ? randFloatInRange(r,(1-r)) : 0.5; + float yc = random ? randFloatInRange(r,(1-r)) : 0.5; + float zc = random ? randFloatInRange(r,(1-r)) : 0.5; + float s = (1.0/256); // size of voxels to make up surface of sphere bool solid = true; - printf("random sphere\n"); - printf("radius=%f\n",r); + printf("adding sphere:"); + if (random) + printf(" random"); + printf("\nradius=%f\n",r); printf("xc=%f\n",xc); printf("yc=%f\n",yc); printf("zc=%f\n",zc); - tree->createSphere(r,xc,yc,zc,s,solid); + tree->createSphere(r,xc,yc,zc,s,solid,wantColorRandomizer); } void randomlyFillVoxelTree(int levelsToGo, VoxelNode *currentRootNode) { @@ -198,7 +200,8 @@ int main(int argc, const char * argv[]) setvbuf(stdout, NULL, _IOLBF, 0); // Handle Local Domain testing with the --local command line - bool wantLocalDomain = cmdOptionExists(argc, argv, "--local"); + const char* local = "--local"; + bool wantLocalDomain = cmdOptionExists(argc, argv,local); if (wantLocalDomain) { printf("Local Domain MODE!\n"); int ip = getLocalAddress(); @@ -213,22 +216,32 @@ int main(int argc, const char * argv[]) // Check to see if the user passed in a command line option for loading a local // Voxel File. If so, load it now. - bool wantColorRandomizer = !cmdOptionExists(argc, argv, "--NoColorRandomizer"); - const char* voxelsFilename = getCmdOption(argc, argv, "-i"); + const char* NO_COLOR_RANDOMIZER="--NoColorRandomizer"; + const char* INPUT_FILE="-i"; + bool wantColorRandomizer = !cmdOptionExists(argc, argv, NO_COLOR_RANDOMIZER); + const char* voxelsFilename = getCmdOption(argc, argv, INPUT_FILE); if (voxelsFilename) { randomTree.loadVoxelsFile(voxelsFilename,wantColorRandomizer); } - if (!cmdOptionExists(argc, argv, "--NoRandomVoxelSheet")) { + const char* NO_RANDOM_VOXELS="--NoRandomVoxels"; + if (!cmdOptionExists(argc, argv, NO_RANDOM_VOXELS)) { // create an octal code buffer and load it with 0 so that the recursive tree fill can give // octal codes to the tree nodes that it is creating randomlyFillVoxelTree(MAX_VOXEL_TREE_DEPTH_LEVELS, randomTree.rootNode); } - if (cmdOptionExists(argc, argv, "--AddRandomSpheres")) { - addRandomSphere(&randomTree); + const char* ADD_SPHERE="--AddSphere"; + const char* ADD_RANDOM_SPHERE="--AddRandomSphere"; + if (cmdOptionExists(argc, argv, ADD_SPHERE)) { +printf("adding sphere\n"); + addSphere(&randomTree,false,wantColorRandomizer); + } else if (cmdOptionExists(argc, argv, ADD_RANDOM_SPHERE)) { +printf("adding random sphere\n"); + addSphere(&randomTree,true,wantColorRandomizer); } +printf("past adding spheres...\n"); pthread_t sendVoxelThread; pthread_create(&sendVoxelThread, NULL, distributeVoxelsToListeners, NULL);