Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef glLib::Math::LA::Vec2f Vec2;
- #if 1 /*toggle to see problem*/
- vector<int>** rotated_squares;
- rotated_squares = new vector<int>*[size2[1]];
- for (int i=0;i<size2[1];++i) {
- rotated_squares[i] = new vector<int>[size2[0]];
- }
- #endif
- int i = 0;
- for (int angle=0;angle<CR_TEX_ANGLES;++angle) {
- printf("\r%d (%f%% complete) \n",angle,(float)(angle)/(float)(CR_TEX_ANGLES));
- float theta = 2.0f * glLib::Math::Misc::pi * (float)(angle)/(float)(CR_TEX_ANGLES);
- float rots_elem[2][2] = {
- { cos(theta),-sin(theta)},
- { sin(theta), cos(theta)},
- };
- glLib::Math::Matrix::Matrix<float,2,2> rot_matrix(rots_elem);
- for (int x=0;x<CR_TEX_DIM;++x) {
- float texel[3] = {0.0f,0.0f,0.0f};
- vector<const Vec2> beam;
- beam.push_back(Vec2( (float)(x )/(float)(CR_TEX_DIM), -100.0f ));
- beam.push_back(Vec2( (float)(x+1)/(float)(CR_TEX_DIM), -100.0f ));
- beam.push_back(Vec2( (float)(x+1)/(float)(CR_TEX_DIM), 100.0f ));
- beam.push_back(Vec2( (float)(x )/(float)(CR_TEX_DIM), 100.0f ));
- for (int y2=0;y2<size2[1];++y2) {
- for (int x2=0;x2<size2[0];++x2) {
- vector<const Vec2> rotated_square;
- rotated_square.push_back(Vec2( (float)(x2 )/(float)(size2[0]), (float)(y2 )/(float)(size2[1]) ));
- rotated_square.push_back(Vec2( (float)(x2+1)/(float)(size2[0]), (float)(y2 )/(float)(size2[1]) ));
- rotated_square.push_back(Vec2( (float)(x2+1)/(float)(size2[0]), (float)(y2+1)/(float)(size2[1]) ));
- rotated_square.push_back(Vec2( (float)(x2 )/(float)(size2[0]), (float)(y2+1)/(float)(size2[1]) ));
- for (int j=0;j<4;++j) {
- Vec2& point = rotated_square[j];
- point -= Vec2(0.5f,0.5f);
- point *= 0.70710678118654746; //1/sqrt(2)
- point = rot_matrix * point;
- point += Vec2(0.5f,0.5f);
- }
- vector<const Vec2> result = glLib::Math::LA::intersect_polygons(beam,rotated_square);
- if (result.size()!=0) {
- float area = glLib::Math::LA::area_polygon(result);
- const float* sample = data + (y2*size2[0]+x2)*3;
- for (int j=0;j<3;++j) texel[j]+=area*sample[j];
- }
- }
- }
- //Copy into the data2 texel
- for (int j=0;j<3;++j) data2[i++]=CR_TEX_DIM*texel[j];
- }
- }
- printf("\rComplete! \n");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement