source: GTP/trunk/Lib/Vis/Preprocessing/src/Halton.cpp @ 2105

Revision 2105, 1.8 KB checked in by bittner, 17 years ago (diff)

simple ray separated

Line 
1#include "Halton.h"
2#include "PerfTimer.h"
3
4#define PREGENERATE_HALTON 0
5
6namespace GtpVisibilityPreprocessor {
7
8PerfTimer haltonTimer;
9
10// global halton generator
11
12  Halton2 halton2;
13  float Halton2::_invBases[2];
14
15  float Halton<1>::_invBases[1];
16  float Halton<2>::_invBases[2];
17  float Halton<3>::_invBases[3];
18  float Halton<4>::_invBases[4];
19  float Halton<5>::_invBases[5];
20  float Halton<6>::_invBases[6];
21 
22
23  Halton<1> dummmyHalton1(true);
24  Halton<2> dummmyHalton2(true);
25  Halton<3> dummmyHalton3(true);
26  Halton<4> dummmyHalton4(true);
27  Halton<5> dummmyHalton5(true);
28  Halton<6> dummmyHalton6(true);
29
30
31  int HaltonSequence::sPregeneratedDim = 0;
32  int HaltonSequence::sPregeneratedNumber = 0;
33  float *HaltonSequence::sPregeneratedValues = NULL;
34 
35#if PREGENERATE_HALTON
36  // pregenerate first 100k numbers for 6 dimensions
37  static HaltonSequence staticHalton(6, 200000);
38#endif
39 
40  // special construtor for pregenerating static halton sequences
41  HaltonSequence::HaltonSequence(const int dim,
42                                                                 const int number) {
43
44        sPregeneratedDim = 0;
45        sPregeneratedNumber = 0;
46        sPregeneratedValues = new float[number*dim];
47
48        float *p = sPregeneratedValues;
49        int i;
50        for (i=0; i < number; i++, p+=dim) {
51          GetNext(dim, p);
52        }
53       
54        sPregeneratedDim = dim;
55        sPregeneratedNumber = number;
56  }
57
58void
59HaltonSequence::GetNext(const int dimensions, float *p)
60{
61  //  haltonTimer.Entry();
62#if PREGENERATE_HALTON
63  if (index <= sPregeneratedNumber && dimensions <= sPregeneratedDim) {
64        float *pp = sPregeneratedValues + (sPregeneratedDim*(index-1));
65        for (int i=0; i < dimensions; i++)
66          p[i] = pp[i];
67  } else
68#endif
69        {
70          for (int i=0; i < dimensions; i++)
71                p[i] = (float)GetNumber(i+1);
72        }
73  GenerateNext();
74  //  haltonTimer.Exit();
75}
76
77}
Note: See TracBrowser for help on using the repository browser.