예제 #1
0
static void recalc_light(world_t w)
{
	static const vec3_t c_noon = {1.0, 0.87, 1.0};
	static const vec3_t c_dusk = {0.8, 0.4, 0.24};
	static const vec3_t c_night = {0.05, 0.05, 0.2};
	vec3_t color;
	float lerp;

	w->lpos[0] = 0.0;
	w->lpos[1] = sin(w->lightAngle);
	w->lpos[2] = cos(w->lightAngle);
	if ( w->lpos[1] >= 0.0 ) {
		lerp = w->lpos[1];
		color[0] = c_dusk[0] + (c_noon[0] - c_dusk[0]) * lerp;
		color[1] = c_dusk[1] + (c_noon[1] - c_dusk[1]) * lerp;
		color[2] = c_dusk[2] + (c_noon[2] - c_dusk[2]) * lerp;
	}else{
		lerp = -(w->lpos[1] * 4);
		if ( lerp > 1.0 )
			lerp = 1.0;
		w->lpos[1] = sin(-w->lightAngle);
		w->lpos[2] = cos(-w->lightAngle);
		color[0] = c_dusk[0] + (c_night[0] - c_dusk[0]) * lerp;
		color[1] = c_dusk[1] + (c_night[1] - c_dusk[1]) * lerp;
		color[2] = c_dusk[2] + (c_night[2] - c_dusk[2]) * lerp;
	}

	light_set_color(w->light, color[0], color[1], color[2]);
	light_set_pos(w->light, w->lpos);
}
예제 #2
0
파일: app.c 프로젝트: 937132ztf/BLE_Demos
void ble_device_on_message(uint8_t type, uint16_t length, uint8_t* value)
{
  uint8_t onoff = value[0];
  uint8_t * rgb = value+1;                                     
  
  if(onoff == 1)
  {
    light_off();
    light_set_color(rgb);
    light_on();

  }
  else if(onoff == 0)
  {
    light_off();
  }
  else if(onoff == 2)
  {
    light_off();
    light_set_color(rgb_color);
    light_on();
  }
}