|
GRASS Programmer's Manual
6.5.svn(2012)-r51648
|
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 00043 data->light[num].id = num; 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, x, y, z, w); 00051 GS_setlight_position(num, 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 data->light[num].brt = value; 00068 00069 r = data->light[num].r * data->light[num].brt; 00070 g = data->light[num].g * data->light[num].brt; 00071 b = data->light[num].b * data->light[num].brt; 00072 00073 G_debug(1, "Nviz_set_light_bright(): num = %d value = %f r = %f g = %f b = %f", 00074 num, value, r, g, b); 00075 GS_setlight_color(num, r, g, b); 00076 00077 return 1; 00078 } 00079 00087 int Nviz_set_light_color(nv_data * data, int num, 00088 int red, int green, int blue) 00089 { 00090 double r, g, b; 00091 00092 data->light[num].r = red / 255.; 00093 data->light[num].g = green / 255.; 00094 data->light[num].b = blue / 255.; 00095 00096 r = data->light[num].r * data->light[num].brt; 00097 g = data->light[num].g * data->light[num].brt; 00098 b = data->light[num].b * data->light[num].brt; 00099 00100 G_debug(1, "Nviz_set_light_color(): num = %d r = %d/%f g = %d/%f b = %d/%f", 00101 num, red, r, green, g, blue, b); 00102 GS_setlight_color(num, r, g, b); 00103 00104 return 1; 00105 } 00106 00114 int Nviz_set_light_ambient(nv_data * data, int num, double value) 00115 { 00116 data->light[num].ar = value; 00117 data->light[num].ag = value; 00118 data->light[num].ab = value; 00119 00120 G_debug(1, "Nviz_set_light_ambient(): num = %d value = %f", 00121 num, value); 00122 GS_setlight_ambient(num, value, value, value); 00123 00124 return 1; 00125 } 00126 00133 int Nviz_init_light(nv_data * data, int num) 00134 { 00135 G_debug(1, "Nviz_init_light(): num = %d", num); 00136 if (num > MAX_LIGHTS) { 00137 return 0; 00138 } 00139 00140 data->light[num].id = 0; 00141 data->light[num].brt = 0.8; 00142 data->light[num].ar = 0.3; 00143 data->light[num].ag = 0.3; 00144 data->light[num].ab = 0.3; 00145 data->light[num].r = 1.0; 00146 data->light[num].b = 1.0; 00147 data->light[num].g = 1.0; 00148 data->light[num].x = 1.0; 00149 data->light[num].y = 1.0; 00150 data->light[num].z = 1.0; 00151 data->light[num].w = 1.0; 00152 00153 return 1; 00154 } 00155 00164 int Nviz_new_light(nv_data * data) 00165 { 00166 int num; 00167 00168 num = GS_new_light(); 00169 00170 if (num < 1) { 00171 G_warning(_("Unable to define new light")); 00172 return 0; 00173 } 00174 00175 Nviz_init_light(data, num); 00176 00177 return 1; 00178 } 00179 00185 void Nviz_draw_model(nv_data * data) 00186 { 00187 GS_set_draw(GSD_FRONT); 00188 GS_ready_draw(); 00189 GS_draw_lighting_model(); 00190 GS_done_draw(); 00191 GS_set_draw(GSD_BACK); 00192 }