Ejemplo n.º 1
0
void cloud_visualixer::add_cloud(const PointCloud & cloud){
	const double *x, *y, *z;
	num_vertices = cloud.pointcount();
	num_per_vertex = 6;
	num_vertex_points = 3;
	x = &cloud.x();
	y = &cloud.y();
	z = &cloud.z();
	vertices = new GLfloat[num_vertices*num_per_vertex];
	for (unsigned int i=0; i<num_vertices; i++){
		vertices[i*num_per_vertex] = x[i];
		vertices[i*num_per_vertex + 1] = y[i];
		vertices[i*num_per_vertex + 2] = z[i];

	}

	num_elements = num_vertices;
	num_per_element = 1;
	elements = new GLuint[num_elements];
	for (unsigned int i=0; i<num_vertices; i++){
		elements[i] = i;
	}

	
  if (cloud.RGB_present()){
  	const rgb48 * RGB = &cloud.RGB();
    for (unsigned int i=0; i<num_vertices; i){
      vertices[i*num_per_vertex + 3] = RGB[i].R/65,535;
      vertices[i*num_per_vertex + 4] = RGB[i].G/65,535;
      vertices[i*num_per_vertex + 5] = RGB[i].B/65,535;
    }
  }
  else {
    //rgb ptcolor;
    for (unsigned int i=0; i<num_vertices; i++){
      //ptcolor = color_ramp.get_ramp_color((cloud->z[i]-cloud->zmin)/(cloud->zmax - cloud->zmin));
      vertices[i*num_per_vertex + 3] = 0.0;
      vertices[i*num_per_vertex + 4] = 0.0;
      vertices[i*num_per_vertex + 5] = 1.0;
    }
  }

	model_centroid[0] = (cloud.xmax() + cloud.xmin())/2.0;
	model_centroid[1] = (cloud.ymax() + cloud.ymin())/2.0;
	model_centroid[2] = (cloud.zmax() + cloud.zmin())/2.0;
	xmax = cloud.xmax();
	ymax = cloud.ymax();
	zmax = cloud.zmax();
	xmin = cloud.xmin();
	ymin = cloud.ymin();
	zmin = cloud.zmin();

	// default color by Z
	colorby = new float[num_vertices];
	for (auto i=0; i<num_vertices; i++){
		colorby[i] = z[i];
	}
	colorby_max = zmax;
	colorby_min = zmin;

	return;
}