GRASS Programmer's Manual
6.4.2(2012)
|
00001 00015 #include <grass/glocale.h> 00016 #include <grass/nviz.h> 00017 00027 int Nviz_set_light_position(nv_data * data, int num, 00028 double x, double y, double z, double w) 00029 { 00030 /* 00031 double xpos, ypos; 00032 xpos = x; 00033 xpos = (xpos < 0) ? 0 : (xpos > 1.0) ? 1.0 : xpos; 00034 ypos = 1.0 - y; 00035 ypos = (ypos < 0) ? 0 : (ypos > 1.0) ? 1.0 : ypos; 00036 00037 if (x < 0.0 || x > 1.0 || y < 0.0 || y > 1.0) { 00038 G_debug(1, "Invalid light position coordinates (%f,%f), using %f,%f", 00039 x, y, xpos, 1.0 - ypos); 00040 } 00041 */ 00042 num--; 00043 data->light[num].id = num + 1; 00044 data->light[num].x = x; 00045 data->light[num].y = y; 00046 data->light[num].z = z; 00047 data->light[num].w = w; 00048 00049 G_debug(1, "Nviz_set_light_position(): num = %d x = %f y = %f z = %f w = %f", 00050 num + 1, x, y, z, w); 00051 GS_setlight_position(num + 1, x, y, z, w); 00052 00053 return 1; 00054 } 00055 00063 int Nviz_set_light_bright(nv_data * data, int num, double value) 00064 { 00065 double r, g, b; 00066 00067 num--; 00068 data->light[num].brt = value; 00069 00070 r = data->light[num].r * data->light[num].brt; 00071 g = data->light[num].g * data->light[num].brt; 00072 b = data->light[num].b * data->light[num].brt; 00073 00074 G_debug(1, "Nviz_set_light_bright(): num = %d value = %f r = %f g = %f b = %f", 00075 num + 1, value, r, g, b); 00076 GS_setlight_color(num + 1, r, g, b); 00077 00078 return 1; 00079 } 00080 00088 int Nviz_set_light_color(nv_data * data, int num, 00089 int red, int green, int blue) 00090 { 00091 double r, g, b; 00092 00093 num--; 00094 data->light[num].r = red / 255.; 00095 data->light[num].g = green / 255.; 00096 data->light[num].b = blue / 255.; 00097 00098 r = data->light[num].r * data->light[num].brt; 00099 g = data->light[num].g * data->light[num].brt; 00100 b = data->light[num].b * data->light[num].brt; 00101 00102 G_debug(1, "Nviz_set_light_color(): num = %d r = %d/%f g = %d/%f b = %d/%f", 00103 num + 1, red, r, green, g, blue, b); 00104 GS_setlight_color(num + 1, r, g, b); 00105 00106 return 1; 00107 } 00108 00116 int Nviz_set_light_ambient(nv_data * data, int num, double value) 00117 { 00118 num--; 00119 data->light[num].ar = value; 00120 data->light[num].ag = value; 00121 data->light[num].ab = value; 00122 00123 G_debug(1, "Nviz_set_light_ambient(): num = %d value = %f", 00124 num + 1, value); 00125 GS_setlight_ambient(num + 1, value, value, value); 00126 00127 return 1; 00128 } 00129 00136 int Nviz_init_light(nv_data * data, int num) 00137 { 00138 num--; 00139 if (num >= MAX_LIGHTS) { 00140 return 0; 00141 } 00142 00143 data->light[num].id = 0; 00144 data->light[num].brt = 0.8; 00145 data->light[num].ar = 0.3; 00146 data->light[num].ag = 0.3; 00147 data->light[num].ab = 0.3; 00148 data->light[num].r = 1.0; 00149 data->light[num].b = 1.0; 00150 data->light[num].g = 1.0; 00151 data->light[num].x = 1.0; 00152 data->light[num].y = 1.0; 00153 data->light[num].z = 1.0; 00154 data->light[num].w = 1.0; 00155 00156 return 1; 00157 } 00158 00167 int Nviz_new_light(nv_data * data) 00168 { 00169 int num; 00170 00171 num = GS_new_light(); 00172 00173 if (num < 1) { 00174 G_warning(_("Unable to define new light")); 00175 return 0; 00176 } 00177 00178 Nviz_init_light(data, num); 00179 00180 return 1; 00181 } 00182