Mercurial > hg > octave-lyh
comparison scripts/plot/surfl.m @ 8460:e4c9ecb64411
diffuse.m, specular.m, surfl.m: style fixes
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 12 Jan 2009 11:47:09 -0500 |
parents | 6c4e2fc14beb |
children | cf2163418140 |
comparison
equal
deleted
inserted
replaced
8459:d17874a6f161 | 8460:e4c9ecb64411 |
---|---|
66 oldh = gca (); | 66 oldh = gca (); |
67 unwind_protect | 67 unwind_protect |
68 axes (h); | 68 axes (h); |
69 newplot (); | 69 newplot (); |
70 | 70 |
71 ## check for lighting type | 71 ## Check for lighting type. |
72 use_cdata = true; | 72 use_cdata = true; |
73 if (ischar (varargin{end})) | 73 if (ischar (varargin{end})) |
74 lstr = varargin{end}; | 74 lstr = varargin{end}; |
75 if strncmp (tolower (lstr), "light", 5) | 75 if (strncmp (tolower (lstr), "light", 5)) |
76 warning ("light method not supported (yet), using cdata method instead"); | 76 warning ("light method not supported (yet), using cdata method instead"); |
77 # this can be implemented when light objects are being | 77 ## This can be implemented when light objects are supported. |
78 # supported. | |
79 use_cdata = false; | 78 use_cdata = false; |
80 elseif (strncmp (tolower (lstr), "cdata", 5)) | 79 elseif (strncmp (tolower (lstr), "cdata", 5)) |
81 use_cdata = true; | 80 use_cdata = true; |
82 else | 81 else |
83 usage ("unknown lighting method"); | 82 error ("surfl: unknown lighting method"); |
84 endif | 83 endif |
85 varargin(end) = []; | 84 varargin(end) = []; |
86 endif | 85 endif |
87 | 86 |
88 ## check for reflection properties argument | 87 ## Check for reflection properties argument. |
88 ## | |
89 ## r = [ambient light strength, | 89 ## r = [ambient light strength, |
90 ## diffuse reflection strength, | 90 ## diffuse reflection strength, |
91 ## specular reflection strength, | 91 ## specular reflection strength, |
92 ## specular shine] | 92 ## specular shine] |
93 if ((length (varargin{end}) == 4) && isnumeric (varargin{end})) | 93 if (length (varargin{end}) == 4 && isnumeric (varargin{end})) |
94 r = varargin{end}; | 94 r = varargin{end}; |
95 varargin(end) = []; | 95 varargin(end) = []; |
96 else | 96 else |
97 ## default values | 97 ## Default values. |
98 r = [0.55, 0.6, 0.4, 10]; | 98 r = [0.55, 0.6, 0.4, 10]; |
99 endif | 99 endif |
100 | |
101 | 100 |
102 ## check for light vector (lv) argument | 101 ## Check for light vector (lv) argument. |
103 have_lv = false; | 102 have_lv = false; |
104 if (isnumeric (varargin{end})) | 103 if (isnumeric (varargin{end})) |
105 len = numel (varargin{end}); | 104 len = numel (varargin{end}); |
106 lastarg = varargin{end}; | 105 lastarg = varargin{end}; |
107 if (len == 3) | 106 if (len == 3) |
119 if (! ishold ()) | 118 if (! ishold ()) |
120 set (h, "view", [-37.5, 30], | 119 set (h, "view", [-37.5, 30], |
121 "xgrid", "on", "ygrid", "on", "zgrid", "on", "clim", [0 1]); | 120 "xgrid", "on", "ygrid", "on", "zgrid", "on", "clim", [0 1]); |
122 endif | 121 endif |
123 | 122 |
124 ## get view vector (vv) | 123 ## Get view vector (vv). |
125 a = axis; | 124 a = axis; |
126 [az, el] = view; | 125 [az, el] = view; |
127 [vv(1), vv(2), vv(3)] = sph2cart ((az - 90) * pi/180.0, el * pi/180.0, 1.0); | 126 [vv(1), vv(2), vv(3)] = sph2cart ((az - 90) * pi/180.0, el * pi/180.0, 1.0); |
128 vv /= norm (vv); | 127 vv /= norm (vv); |
129 | 128 |
130 if (!have_lv) | 129 if (!have_lv) |
131 ## calculate light vector (lv) from view vector | 130 ## Calculate light vector (lv) from view vector. |
132 Phi = 45.0 / 180.0 * pi; | 131 Phi = 45.0 / 180.0 * pi; |
133 R = [cos(Phi), -sin(Phi), 0;\ | 132 R = [cos(Phi), -sin(Phi), 0; |
134 sin(Phi), cos(Phi), 0;\ | 133 sin(Phi), cos(Phi), 0; |
135 0, 0, 1]; | 134 0, 0, 1]; |
136 lv = (R * vv.').'; | 135 lv = (R * vv.').'; |
137 endif | 136 endif |
138 | 137 |
139 vn = get (tmp, "vertexnormals"); | 138 vn = get (tmp, "vertexnormals"); |
140 dar = get (h, "dataaspectratio"); | 139 dar = get (h, "dataaspectratio"); |
141 vn(:, :, 1) *= dar(1); | 140 vn(:,:,1) *= dar(1); |
142 vn(:, :, 2) *= dar(2); | 141 vn(:,:,2) *= dar(2); |
143 vn(:, :, 3) *= dar(3); | 142 vn(:,:,3) *= dar(3); |
144 | 143 |
145 ## normalize vn | 144 ## Normalize vn. |
146 vn = vn ./ repmat (sqrt (sumsq (vn, 3)), [1, 1, 3]); | 145 vn = vn ./ repmat (sqrt (sumsq (vn, 3)), [1, 1, 3]); |
147 [nr, nc] = size(get(tmp, "zdata")); | 146 [nr, nc] = size(get(tmp, "zdata")); |
148 | 147 |
149 ## ambient, diffuse, and specular term | 148 ## Ambient, diffuse, and specular term. |
150 cdata = r(1) * ones (nr, nc) \ | 149 cdata = (r(1) * ones (nr, nc) |
151 + r(2) * diffuse (vn(:, :, 1), vn(:, :, 2), vn(:, :, 3), lv) \ | 150 + r(2) * diffuse (vn(:,:,1), vn(:,:,2), vn(:,:,3), lv) |
152 + r(3) * specular (vn(:, :, 1), vn(:, :, 2), vn(:, :, 3), lv, vv, r(4)); | 151 + r(3) * specular (vn(:,:,1), vn(:,:,2), vn(:,:,3), lv, vv, r(4))); |
153 | 152 |
154 set (tmp, "cdata", cdata ./ sum (r(1:3))); | 153 set (tmp, "cdata", cdata ./ sum (r(1:3))); |
155 | 154 |
156 unwind_protect_cleanup | 155 unwind_protect_cleanup |
157 axes (oldh); | 156 axes (oldh); |