示例#1
0
void PrimitiveMeshHelper::PointCube(float width, float height, float depth) {
  SR_ASSERT(width > 0 && height > 0 && depth > 0);
  width = width/2;
  height = height/2;
  depth = depth/2;

  vec3 v0(-width, height, -depth);
  vec3 v1(width, height, -depth);
  vec3 v2(-width, height, depth);
  vec3 v3(width, height, depth);

  vec3 v4(-width, -height, -depth);
  vec3 v5(width, -height, -depth);
  vec3 v6(-width, -height, depth);
  vec3 v7(width, -height, depth);

  vector<vec3> pos_list(8);
  pos_list[0] = v0;
  pos_list[1] = v1;
  pos_list[2] = v2;
  pos_list[3] = v3;
  pos_list[4] = v4;
  pos_list[5] = v5;
  pos_list[6] = v6;
  pos_list[7] = v7;

  DrawCmdData<Vertex> cmd;
  cmd.draw_mode = kDrawPoints;
  for(size_t i = 0 ; i < pos_list.size() ; ++i) {
    Vertex vert;
    vert.set_pos(pos_list[i]);
    cmd.vertex_list.push_back(vert);
  }
  this->cmd_list_->push_back(cmd);
}
示例#2
0
void StarFinder::fitStellarSizes(
    Function2D *f, int order, double sig_clip,
    const std::vector<PotentialStar*>& star_list, double *out_sigma)
{
    // Make list of positions
    std::vector<Position> pos_list(star_list.size());
    std::transform(star_list.begin(),star_list.end(),pos_list.begin(),
                   std::mem_fun(&PotentialStar::getPos));

    // Make list of sizes
    std::vector<double> sizelist(star_list.size());
    std::transform(star_list.begin(),star_list.end(),sizelist.begin(),
                   std::mem_fun(&PotentialStar::getSize));

    // Use all stars in list (to start with anyway), so all true
    std::vector<bool> use_list(star_list.size(),true);

    if (int(star_list.size()) <= (order+1)*(order+2)/2) {
        std::ostringstream err;
        err<<"Not enough stars to do fit.  ";
        err<<"Increase stars_per_bin or decrease fit_order.";
        throw StarFinderException(err.str());
    }

    // Do the fit.
    double chisq;
    int dof;
    xdbg<<"before outlier fit\n";
    f->outlierFit(order,sig_clip,pos_list,sizelist,&use_list,0,&chisq,&dof,0);
    xdbg<<"after outlier fit\n";

    xdbg<<"chisq,dof,sigma = "<<chisq<<','<<dof<<','<<
        sqrt(chisq/dof)<<std::endl;
    *out_sigma = sqrt(chisq/dof);
}
示例#3
0
std::vector<DrawCmdData<Vertex_1P>> WireCubeFactory::CreateSimpleMesh()
{
	float width = width_ / 2.0f;
	float height = height_ / 2.0f;
	float depth = depth_ / 2.0f;

	Vec3 v0(-width, height, -depth);
	Vec3 v1(width, height, -depth);
	Vec3 v2(-width, height, depth);
	Vec3 v3(width, height, depth);

	Vec3 v4(-width, -height, -depth);
	Vec3 v5(width, -height, -depth);
	Vec3 v6(-width, -height, depth);
	Vec3 v7(width, -height, depth);

	std::vector<Vec3> pos_list(8);
	pos_list[0] = v0;
	pos_list[1] = v1;
	pos_list[2] = v2;
	pos_list[3] = v3;
	pos_list[4] = v4;
	pos_list[5] = v5;
	pos_list[6] = v6;
	pos_list[7] = v7;

	DrawCmdData<Vertex_1P> cmd;
	cmd.draw_mode = kDrawLines;
	for(size_t i = 0 ; i < pos_list.size() ; ++i) {
		Vertex_1P vert;
		vert.p = pos_list[i];
		cmd.vertex_list.push_back(vert);
	}

	//GL_LINES용 index list
	std::array<unsigned short, 24> index_list = {
		0,1,	1,3,	2,3,	0,2,
		4,5,	5,7,	6,7,	4,6,
		0,4,	1,5,	2,6,	3,7
	};
	cmd.index_list.resize(index_list.size());
	copy(index_list.begin(), index_list.end(), cmd.index_list.begin());

	std::vector<DrawCmdData<Vertex_1P>> cmd_list;
	cmd_list.push_back(cmd);
	return cmd_list;
}
示例#4
0
void PrimitiveMeshHelper::WireCube(float width, float height, float depth) {
  SR_ASSERT(width > 0 && height > 0 && depth > 0);
  width = width/2;
  height = height/2;
  depth = depth/2;

  vec3 v0(-width, height, -depth);
  vec3 v1(width, height, -depth);
  vec3 v2(-width, height, depth);
  vec3 v3(width, height, depth);

  vec3 v4(-width, -height, -depth);
  vec3 v5(width, -height, -depth);
  vec3 v6(-width, -height, depth);
  vec3 v7(width, -height, depth);

  vector<vec3> pos_list(8);
  pos_list[0] = v0;
  pos_list[1] = v1;
  pos_list[2] = v2;
  pos_list[3] = v3;
  pos_list[4] = v4;
  pos_list[5] = v5;
  pos_list[6] = v6;
  pos_list[7] = v7;

  DrawCmdData<Vertex> cmd;
  cmd.draw_mode = kDrawLines;
  for(size_t i = 0 ; i < pos_list.size() ; ++i) {
    Vertex vert;
    vert.set_pos(pos_list[i]);
    cmd.vertex_list.push_back(vert);
  }

  //GL_LINES용 index list
  std::array<GLushort, 24> index_list = {
    0,1,	1,3,	2,3,	0,2,
    4,5,	5,7,	6,7,	4,6,
    0,4,	1,5,	2,6,	3,7
  };
  cmd.index_list.resize(index_list.size());
  copy(index_list.begin(), index_list.end(), cmd.index_list.begin());
  this->cmd_list_->push_back(cmd);
}