Advertisement
Guest User

Untitled

a guest
Nov 18th, 2012
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. typedef glLib::Math::LA::Vec2f Vec2;
  2.  
  3. #if 1 /*toggle to see problem*/
  4.     vector<int>** rotated_squares;
  5.     rotated_squares = new vector<int>*[size2[1]];
  6.     for (int i=0;i<size2[1];++i) {
  7.         rotated_squares[i] = new vector<int>[size2[0]];
  8.     }
  9. #endif
  10.  
  11. int i = 0;
  12. for (int angle=0;angle<CR_TEX_ANGLES;++angle) {
  13.     printf("\r%d (%f%% complete)      \n",angle,(float)(angle)/(float)(CR_TEX_ANGLES));
  14.     float theta = 2.0f * glLib::Math::Misc::pi * (float)(angle)/(float)(CR_TEX_ANGLES);
  15.     float rots_elem[2][2] = {
  16.         { cos(theta),-sin(theta)},
  17.         { sin(theta), cos(theta)},
  18.     };
  19.     glLib::Math::Matrix::Matrix<float,2,2> rot_matrix(rots_elem);
  20.  
  21.     for (int x=0;x<CR_TEX_DIM;++x) {
  22.         float texel[3] = {0.0f,0.0f,0.0f};
  23.         vector<const Vec2> beam;
  24.         beam.push_back(Vec2( (float)(x  )/(float)(CR_TEX_DIM), -100.0f ));
  25.         beam.push_back(Vec2( (float)(x+1)/(float)(CR_TEX_DIM), -100.0f ));
  26.         beam.push_back(Vec2( (float)(x+1)/(float)(CR_TEX_DIM),  100.0f ));
  27.         beam.push_back(Vec2( (float)(x  )/(float)(CR_TEX_DIM),  100.0f ));
  28.         for (int y2=0;y2<size2[1];++y2) {
  29.             for (int x2=0;x2<size2[0];++x2) {
  30.                 vector<const Vec2> rotated_square;
  31.                 rotated_square.push_back(Vec2( (float)(x2  )/(float)(size2[0]), (float)(y2  )/(float)(size2[1]) ));
  32.                 rotated_square.push_back(Vec2( (float)(x2+1)/(float)(size2[0]), (float)(y2  )/(float)(size2[1]) ));
  33.                 rotated_square.push_back(Vec2( (float)(x2+1)/(float)(size2[0]), (float)(y2+1)/(float)(size2[1]) ));
  34.                 rotated_square.push_back(Vec2( (float)(x2  )/(float)(size2[0]), (float)(y2+1)/(float)(size2[1]) ));
  35.                 for (int j=0;j<4;++j) {
  36.                     Vec2& point = rotated_square[j];
  37.                     point -= Vec2(0.5f,0.5f);
  38.                     point *= 0.70710678118654746; //1/sqrt(2)
  39.                     point = rot_matrix * point;
  40.                     point += Vec2(0.5f,0.5f);
  41.                 }
  42.                 vector<const Vec2> result = glLib::Math::LA::intersect_polygons(beam,rotated_square);
  43.                 if (result.size()!=0) {
  44.                     float area = glLib::Math::LA::area_polygon(result);
  45.                     const float* sample = data + (y2*size2[0]+x2)*3;
  46.                     for (int j=0;j<3;++j) texel[j]+=area*sample[j];
  47.                 }
  48.             }
  49.         }
  50.         //Copy into the data2 texel
  51.         for (int j=0;j<3;++j) data2[i++]=CR_TEX_DIM*texel[j];
  52.     }
  53. }
  54. printf("\rComplete!         \n");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement