GRASS Programmer's Manual  6.4.2(2012)
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
lights.c
Go to the documentation of this file.
1 
15 #include <grass/glocale.h>
16 #include <grass/nviz.h>
17 
27 int Nviz_set_light_position(nv_data * data, int num,
28  double x, double y, double z, double w)
29 {
30  /*
31  double xpos, ypos;
32  xpos = x;
33  xpos = (xpos < 0) ? 0 : (xpos > 1.0) ? 1.0 : xpos;
34  ypos = 1.0 - y;
35  ypos = (ypos < 0) ? 0 : (ypos > 1.0) ? 1.0 : ypos;
36 
37  if (x < 0.0 || x > 1.0 || y < 0.0 || y > 1.0) {
38  G_debug(1, "Invalid light position coordinates (%f,%f), using %f,%f",
39  x, y, xpos, 1.0 - ypos);
40  }
41  */
42  num--;
43  data->light[num].id = num + 1;
44  data->light[num].x = x;
45  data->light[num].y = y;
46  data->light[num].z = z;
47  data->light[num].w = w;
48 
49  G_debug(1, "Nviz_set_light_position(): num = %d x = %f y = %f z = %f w = %f",
50  num + 1, x, y, z, w);
51  GS_setlight_position(num + 1, x, y, z, w);
52 
53  return 1;
54 }
55 
63 int Nviz_set_light_bright(nv_data * data, int num, double value)
64 {
65  double r, g, b;
66 
67  num--;
68  data->light[num].brt = value;
69 
70  r = data->light[num].r * data->light[num].brt;
71  g = data->light[num].g * data->light[num].brt;
72  b = data->light[num].b * data->light[num].brt;
73 
74  G_debug(1, "Nviz_set_light_bright(): num = %d value = %f r = %f g = %f b = %f",
75  num + 1, value, r, g, b);
76  GS_setlight_color(num + 1, r, g, b);
77 
78  return 1;
79 }
80 
88 int Nviz_set_light_color(nv_data * data, int num,
89  int red, int green, int blue)
90 {
91  double r, g, b;
92 
93  num--;
94  data->light[num].r = red / 255.;
95  data->light[num].g = green / 255.;
96  data->light[num].b = blue / 255.;
97 
98  r = data->light[num].r * data->light[num].brt;
99  g = data->light[num].g * data->light[num].brt;
100  b = data->light[num].b * data->light[num].brt;
101 
102  G_debug(1, "Nviz_set_light_color(): num = %d r = %d/%f g = %d/%f b = %d/%f",
103  num + 1, red, r, green, g, blue, b);
104  GS_setlight_color(num + 1, r, g, b);
105 
106  return 1;
107 }
108 
116 int Nviz_set_light_ambient(nv_data * data, int num, double value)
117 {
118  num--;
119  data->light[num].ar = value;
120  data->light[num].ag = value;
121  data->light[num].ab = value;
122 
123  G_debug(1, "Nviz_set_light_ambient(): num = %d value = %f",
124  num + 1, value);
125  GS_setlight_ambient(num + 1, value, value, value);
126 
127  return 1;
128 }
129 
136 int Nviz_init_light(nv_data * data, int num)
137 {
138  num--;
139  if (num >= MAX_LIGHTS) {
140  return 0;
141  }
142 
143  data->light[num].id = 0;
144  data->light[num].brt = 0.8;
145  data->light[num].ar = 0.3;
146  data->light[num].ag = 0.3;
147  data->light[num].ab = 0.3;
148  data->light[num].r = 1.0;
149  data->light[num].b = 1.0;
150  data->light[num].g = 1.0;
151  data->light[num].x = 1.0;
152  data->light[num].y = 1.0;
153  data->light[num].z = 1.0;
154  data->light[num].w = 1.0;
155 
156  return 1;
157 }
158 
167 int Nviz_new_light(nv_data * data)
168 {
169  int num;
170 
171  num = GS_new_light();
172 
173  if (num < 1) {
174  G_warning(_("Unable to define new light"));
175  return 0;
176  }
177 
178  Nviz_init_light(data, num);
179 
180  return 1;
181 }
182