- glBegin (GL_TRIANGLE_FAN);
- glVertex3f(0., 0., 0.);
- glVertex3f(0., .5, 0.);
-
- int angle;
- for (angle = 1; angle <= 360; angle++) {
- double rad = (angle*M_PI)/180.0;
- double x = sin(rad);
- double y = cos(rad);
- //g_printf("tick.. %d - %5.3f: (%5.2f,%5.2f)\n", angle, rad, x, y);
- glColor3f((float)angle/360.0, 0., 0.);
- glVertex3f(x/2., y/2., 0.);
+ glBegin(GL_QUADS);
+
+ int rayi;
+ for (rayi = 0; rayi < sweep->h.nrays; rayi++) {
+ Ray *ray = sweep->ray[rayi];
+
+ /* right and left with respect to north */
+ double right = ((ray->h.azimuth + ray->h.beam_width)*M_PI)/180.0;
+ double left = ((ray->h.azimuth - ray->h.beam_width)*M_PI)/180.0;
+
+ double rx = sin(right), ry = cos(right);
+ double lx = sin(left), ly = cos(left);
+
+ int nbins = ray->h.nbins;
+ //int nbins = 20;
+ int max_dist = nbins * ray->h.gate_size + ray->h.range_bin1;
+ int bini, dist = ray->h.range_bin1;
+ for (bini = 0; bini < nbins; bini++, dist += ray->h.gate_size) {
+ if (ray->range[bini] == BADVAL) continue;
+
+ /* (find middle of bin) / scale for opengl */
+ double nd = ((double)dist - ((double)ray->h.gate_size)/2.) / (double)max_dist;
+ double fd = ((double)dist + ((double)ray->h.gate_size)/2.) / (double)max_dist;
+
+ glColor3ub(
+ red[(unsigned char)ray->h.f(ray->range[bini])],
+ green[(unsigned char)ray->h.f(ray->range[bini])],
+ blue[(unsigned char)ray->h.f(ray->range[bini])]
+ );
+
+ glVertex3f(lx*nd, ly*nd, 0.); // near left
+ glVertex3f(lx*fd, ly*fd, 0.); // far left
+ glVertex3f(rx*fd, ry*fd, 0.); // far right
+ glVertex3f(rx*nd, ry*nd, 0.); // near right
+
+ }
+
+ g_print("\n");