示例#1
0
void lemuria_tentacle_init(lemuria_tentacle_t * t,
                           int num_points, float length,
                           float frequency, float wavelength,
                           float phase, float amplitude)
  {
  t->segment_length = length / (float)(num_points - 1);
  t->num_points = num_points;
  t->frequency = frequency;
  t->wavelength = wavelength;
  t->phase = phase;
  t->points = malloc(num_points * sizeof(*(t->points)));
  t->amplitude = amplitude,
  t->points[0].coords[0] = 0.0;
  t->points[0].coords[1] = 0.0;

  calc_coords(t);
#if 0
  for(i = 1; i < t->num_points; i++)
    {
    t->points[i].coords[0] = t->points[i-1].coords[0] + t->segment_length;
    t->points[i].coords[1] = 0.0;
    }
#endif
  calc_normals(t);
  }
示例#2
0
文件: vlst.c 项目: rvba/minuit
void vlst_normal_4f(t_vlst *dst,t_vlst *vertex,t_vlst *face)
{
	int i;
	int pos=0;
	int _pos=0;

	float *v=(float *)vertex->data;
	float *d=(float *)dst->data;

	for(i=0;i<face->count;i++)
	{
		float v1[3]={v[pos],v[pos+1],v[pos+2]};
		float v2[3]={v[pos+3],v[pos+4],v[pos+5]};
		float v3[3]={v[pos+6],v[pos+7],v[pos+8]};

		float result[3];

		calc_normals(v1,v2,v3,result);

		int k;
		for(k=0;k<4;k++)
		{
			d[_pos+0]=result[0];
			d[_pos+1]=result[1];
			d[_pos+2]=result[2];

			_pos+=3;
		}

		pos+=12; // 4 vertices
	}	
}
示例#3
0
void lemuria_tentacle_update(lemuria_tentacle_t * t)
  {
  t->phase += t->frequency;
  if(t->phase > 2.0 * M_PI)
    t->phase -= 2.0 * M_PI;
  calc_coords(t);
  calc_normals(t);
  }
示例#4
0
文件: vlst.c 项目: rvba/minuit
void vlst_normal_4f_direct(t_vlst *dst,t_vlst *vertex,t_vlst *quads)
{
	int i,n,j;
	float vectors[3*4];
	int *q=quads->data;
	float *v=vertex->data;
	float *normal=dst->data;

	// calc normals
	j=0;
	for(i=0;i<quads->count;i++)
	{
		for(n=0;n<4;n++)
		{
			vectors[(n*3)+0]=v[(q[j]*3)];
			vectors[(n*3)+1]=v[(q[j]*3)+1];
			vectors[(n*3)+2]=v[(q[j]*3)+2];
			j++;
		}

		calc_normals(vectors,vectors+3,vectors+6,normal+(i*3));
	}
}