Commit 8303b04dc449cfd022dbf08a2bf0529e23540bd0

Authored by Pavel Govyadinov
1 parent 97508a2e

fixed the bug and added comments

Showing 1 changed file with 27 additions and 33 deletions   Show diff stats
stim/gl/gl_spider.h
... ... @@ -117,6 +117,7 @@ class gl_spider // : public virtual gl_texture<T>
117 117 std::vector< stim::vec3<float> > cL; //centerline up to the current point
118 118 std::vector< stim::vec3<float> > cD; //directions up to the current point (debugging)
119 119 std::vector< float > cM; //radius up to the current point
  120 + std::vector< float > cLen; //radius up to the current point
120 121  
121 122 stim::glnetwork<float> nt; //network object holding the currently traced centerlines
122 123 stim::glObj<float> sk; //OBJ file storing the network (identical to above)
... ... @@ -726,21 +727,21 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
726 727 GL_COLOR_ATTACHMENT0,
727 728 GL_TEXTURE_2D,
728 729 direction_texID,
729   - 0);
730   - glBindFramebuffer(GL_FRAMEBUFFER, direction_buffID);
731   - GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0};
732   - glDrawBuffers(1, DrawBuffers);
733   - glBindTexture(GL_TEXTURE_2D, direction_texID);
734   - glClearColor(1,1,1,1);
735   - glClear(GL_COLOR_BUFFER_BIT);
736   - glMatrixMode(GL_PROJECTION);
  730 + 0); ///Bind the texture to the 0th color attachement of the framebuffer
  731 + glBindFramebuffer(GL_FRAMEBUFFER, direction_buffID); ///Bind the buffer again (safety operation).
  732 + GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0}; ///Designate the texture to be the drawbuffer of the framebuffer
  733 + glDrawBuffers(1, DrawBuffers); ///Set the current drawbuffer to the texture.
  734 + glBindTexture(GL_TEXTURE_2D, direction_texID); ///Bind the Texture
  735 + glClearColor(1,1,1,1); ///Set clear color to white
  736 + glClear(GL_COLOR_BUFFER_BIT); ///Clear the texture
  737 + glMatrixMode(GL_PROJECTION);
737 738 glLoadIdentity();
738 739 glMatrixMode(GL_MODELVIEW);
739   - glLoadIdentity();
740   - glViewport(0,0,2.0*n_pixels, numSamples*n_pixels);
  740 + glLoadIdentity(); ///Load identity matrix into the projection and modelview
  741 + glViewport(0,0,2.0*n_pixels, numSamples*n_pixels); ///Designate the viewport and orth
741 742 gluOrtho2D(0.0,2.0*n_pixels,0.0,numSamples*n_pixels);
742 743 glEnable(GL_TEXTURE_3D);
743   - glBindTexture(GL_TEXTURE_3D, texID);
  744 + glBindTexture(GL_TEXTURE_3D, texID); ///Bind the larger 3D texture.
744 745  
745 746 CHECK_OPENGL_ERROR
746 747 }
... ... @@ -807,12 +808,12 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
807 808 getCost(cudaTextureObject_t tObj, float* result, int n)
808 809 {
809 810 #ifdef TIMING
810   - gpuStartTimer();
  811 + gpuStartTimer(); ///Add timing variables
811 812 #endif
812 813 stim::vec<int> cost =
813 814 stim::cuda::get_cost(tObj, result, n, 2*n_pixels, n_pixels); ///call the cuda function with the appropriate texture buffer.
814 815 #ifdef TIMING
815   - cost_time += gpuStopTimer();
  816 + cost_time += gpuStopTimer();
816 817 #endif
817 818 current_cost = cost[1]; ///current cost.
818 819 return cost[0];
... ... @@ -833,9 +834,6 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
833 834 stim::rect<float> ver;
834 835  
835 836 //Timing variables.
836   - #ifdef TESTING
837   - std::clock_t start;
838   - #endif
839 837  
840 838 //--------------------------------------------------------------------------//
841 839 //-----------------------------CONSTRUCTORS---------------------------------//
... ... @@ -917,7 +915,7 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
917 915 #endif
918 916 }
919 917  
920   - ///destructor
  918 + ///destructor deletes all the texture and buffer objects.
921 919 ~gl_spider
922 920 (void)
923 921 {
... ... @@ -966,7 +964,6 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
966 964 GenerateFBO(n_pixels*2, numSamplesPos*n_pixels, position_texID, position_buffID);
967 965 CHECK_OPENGL_ERROR
968 966 GenerateFBO(n_pixels*2, numSamplesMag*n_pixels, radius_texID, radius_buffID);
969   -
970 967 CHECK_OPENGL_ERROR
971 968 GenerateFBO(n_pixels*2, numSamplesMag*n_pixels, length_texID, length_buffID);
972 969 CHECK_OPENGL_ERROR
... ... @@ -978,10 +975,10 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
978 975 t_pos.Alloc(numSamplesPos);
979 976 t_mag.MapCudaTexture(radius_texID, GL_TEXTURE_2D);
980 977 t_mag.Alloc(numSamplesMag);
981   - t_mag.MapCudaTexture(length_texID, GL_TEXTURE_2D);
982   - t_mag.Alloc(numSamplesMag);
  978 + t_len.MapCudaTexture(length_texID, GL_TEXTURE_2D);
  979 + t_len.Alloc(numSamplesMag);
983 980 setMatrix();
984   - dList = glGenLists(4);//????????????????????????????
  981 + dList = glGenLists(4);
985 982 glListBase(dList);
986 983 Bind(direction_texID, direction_buffID, numSamples, n_pixels);
987 984 genDirectionVectors(5*stim::PI/4);
... ... @@ -995,9 +992,6 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
995 992 Bind(length_texID, length_buffID, numSamplesMag, n_pixels);
996 993 genLengthVectors();
997 994 Unbind();
998   - Bind(cylinder_texID, cylinder_buffID, 27);
999   -// DrawCylinder();
1000   - Unbind();
1001 995 }
1002 996  
1003 997 //--------------------------------------------------------------------------//
... ... @@ -1128,22 +1122,22 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
1128 1122 stim::vec<float>
1129 1123 getRotation(stim::vec3<float> dir)
1130 1124 {
1131   - stim::vec<float> out(0.0,0.0,0.0,0.0);
1132   - stim::vec3<float> from(0.0,0.0,1.0);
1133   - out[0] = acos(dir.dot(from))*180/stim::PI;
1134   - if(out[0] < 1.1){
  1125 + stim::vec<float> out(0.0,0.0,0.0,0.0); ///The 4D rotation matrix for GL rotation
  1126 + stim::vec3<float> from(0.0,0.0,1.0); ///Converting from template always involves 0,0,1 as a starting vector
  1127 + out[0] = acos(dir.dot(from))*180/stim::PI; ///angle of rotation
  1128 + if(out[0] < 1.0){
1135 1129 out[0] = 0.0;
1136 1130 out[1] = 0.0;
1137 1131 out[2] = 0.0;
1138 1132 out[3] = 1.0;
1139   - }
1140   - else if(out[0] < -179.0)
  1133 + } ///if we rotate less what one degree don't rotate
  1134 + else if(out[0] < -179.0) ///if we rotate more than -179 degrees rotate 180.
1141 1135 {
1142 1136 out[0] = 180.0;
1143 1137 out[1] = 1.0;
1144 1138 out[2] = 0.0;
1145 1139 out[3] = 0.0;
1146   - } else {
  1140 + } else { ///the rotational axis is the cross fromxdir.
1147 1141 stim::vec3<float> temp(0.0, 0.0, 0.0);;
1148 1142 temp = (from.cross(dir)).norm();
1149 1143 out[1] = temp[0];
... ... @@ -1300,13 +1294,13 @@ class gl_spider // : public virtual gl_texture&lt;T&gt;
1300 1294 void
1301 1295 setSeeds(std::string file)
1302 1296 {
1303   - std::ifstream myfile(file.c_str());
  1297 + std::ifstream myfile(file.c_str()); ///open a stream
1304 1298 string line;
1305 1299 if(myfile.is_open())
1306 1300 {
1307 1301 while (getline(myfile, line))
1308 1302 {
1309   - float x, y, z, u, v, w, m;
  1303 + float x, y, z, u, v, w, m; ///read the xyz uvw and m coordinates.
1310 1304 myfile >> x >> y >> z >> u >> v >> w >> m;
1311 1305 setSeed(x, y, z);
1312 1306 setSeedVec(u, v, w);
... ...