Пример #1
0
Файл: cylin.c Проект: cheque/s3d
iMesh *cylin_uv_decomp(Prim *p, Real level)
{
  int i, j, nu = 20 * level, nv = 20 * level;
  Real u, v, iu = ULEN/(Real)nu, iv = VLEN/(Real)nv;
  Vector3 *pts = NEWARRAY((nu+3)*(nv+1), Vector3);
  Vector3 *pvals = NEWARRAY((nu+3)*(nv+1), Vector3);
  iTri *tl = NULL;
  iMesh *m = NULL;

  for (u = UMIN - iu, i = 0; i <= nu+2; u += iu, i++) {
    for (v = VMIN, j = 0; j <= nv; v += iv, j++) {
      pts[IDX2(i,j,nu+3)] = v3_make(u,v,0);
      pvals[IDX2(i,j,nu+3)] = prim_point(p,u,v);
    }
  }
  m = imesh_alloc((nu+3) * (nv+1), NULL, NULL);
  m->m = pts;
  m->p = pvals;
  for (i = 0; i < nu+2; i++) {
    for (j = 0; j < nv; j++) {
      tl = itri_insert(tl,
		       itri_make(IDX2(i,j,nu+3),IDX2(i,j+1,nu+3),IDX2(i+1,j,nu+3), m));
      tl = itri_insert(tl,
		       itri_make(IDX2(i+1,j+1,nu+3),IDX2(i+1,j,nu+3),IDX2(i,j+1,nu+3), m));
    }
  }
  m->t = tl;
  return m;
}
Пример #2
0
Poly *prim_polys(Prim *s, Poly *p)
{
  int i;
  Poly *l = plist_alloc(3, p->n);
  for (i = 0; i < p->n; i++) {
    PL(l)->v[i] = SL(l)->v[i] = prim_point(s, p->v[i].x, p->v[i].y);
    NL(l)->v[i] = prim_normal(s, p->v[i].x, p->v[i].y);
  }
  return l;
}
Пример #3
0
Poly *prim_polys(Prim *s, Poly *p)
{
  int i;
  Poly *l = plist_alloc(7, p->n);

  for (i = 0; i < p->n; i++) {
    PL(l)->v[i] = SL(l)->v[i] = prim_point(s, p->v[i].x, p->v[i].y);
    NL(l)->v[i] = prim_normal(s, p->v[i].x, p->v[i].y);
    TL(l)->v[i] = prim_texc(s, p->v[i].x, p->v[i].y);
    DUL(l)->v[i] = v3_unit(prim_du(s, p->v[i].x, p->v[i].y));
    DVL(l)->v[i] = v3_unit(prim_dv(s, p->v[i].x, p->v[i].y));
  }
  return l;
}