GRASS Programmer's Manual  6.4.2(2012)
lights.c
Go to the documentation of this file.
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 
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines