@@ -263,76 +263,129 @@ interface func_geometric {
263263
264264
265265 fun refract (i : Float , n : Float , eta : Float ): Float {
266- assert (eta >= - 1f && eta <= 1f )
267266 val dot = dot(n, i)
268267 val k = 1f - eta * eta * (1f - dot * dot)
269- return (eta * i - (eta * dot + sqrt(k)) * n) * if (k >= 0f ) 1f else 0f
268+ return when {
269+ k >= 0 -> eta * i - (eta * dot + sqrt(k)) * n
270+ else -> 0f
271+ }
270272 }
271273
272274 fun refract (i : Double , n : Double , eta : Double ): Double {
273- assert (eta >= - 1.0 && eta <= 1.0 )
274275 val dot = dot(n, i)
275276 val k = 1.0 - eta * eta * (1.0 - dot * dot)
276- return (eta * i - (eta * dot + sqrt(k)) * n) * if (k >= 0.0 ) 1.0 else 0.0
277+ return when {
278+ k >= 0 -> eta * i - (eta * dot + sqrt(k)) * n
279+ else -> 0.0
280+ }
277281 }
278282
279283 fun refract (i : Vec2 , n : Vec2 , eta : Float , res : Vec2 = Vec2 ()): Vec2 {
280- assert (eta >= - 1f && eta <= 1f )
281284 val dot = dot(n, i)
282285 val k = 1f - eta * eta * (1f - dot * dot)
283- res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x * if (k >= 0f ) 1f else 0f
284- res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y * if (k >= 0f ) 1f else 0f
286+ when {
287+ k >= 0 -> {
288+ res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x
289+ res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y
290+ }
291+ else -> {
292+ res.x = 0f
293+ res.y = 0f
294+ }
295+ }
285296 return res
286297 }
287298
288299 fun refract (i : Vec2d , n : Vec2d , eta : Double , res : Vec2d = Vec2d ()): Vec2d {
289- assert (eta >= - 1.0 && eta <= 1.0 )
290300 val dot = dot(n, i)
291301 val k = 1.0 - eta * eta * (1.0 - dot * dot)
292- res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x * if (k >= 0.0 ) 1.0 else 0.0
293- res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y * if (k >= 0.0 ) 1.0 else 0.0
302+ when {
303+ k >= 0 -> {
304+ res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x
305+ res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y
306+ }
307+ else -> {
308+ res.x = 0.0
309+ res.y = 0.0
310+ }
311+ }
294312 return res
295313 }
296314
297315 fun refract (i : Vec3 , n : Vec3 , eta : Float , res : Vec3 = Vec3 ()): Vec3 {
298- assert (eta >= - 1f && eta <= 1f )
299316 val dot = dot(n, i)
300317 val k = 1f - eta * eta * (1f - dot * dot)
301- res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x * if (k >= 0f ) 1f else 0f
302- res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y * if (k >= 0f ) 1f else 0f
303- res.z = eta * i.z - (eta * dot + sqrt(k)) * n.z * if (k >= 0f ) 1f else 0f
318+ when {
319+ k >= 0 -> {
320+ res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x
321+ res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y
322+ res.z = eta * i.z - (eta * dot + sqrt(k)) * n.z
323+ }
324+ else -> {
325+ res.x = 0f
326+ res.y = 0f
327+ res.z = 0f
328+ }
329+ }
304330 return res
305331 }
306332
307333 fun refract (i : Vec3d , n : Vec3d , eta : Double , res : Vec3d = Vec3d ()): Vec3d {
308- assert (eta >= - 1.0 && eta <= 1.0 )
309334 val dot = dot(n, i)
310335 val k = 1.0 - eta * eta * (1.0 - dot * dot)
311- res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x * if (k >= 0.0 ) 1.0 else 0.0
312- res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y * if (k >= 0.0 ) 1.0 else 0.0
313- res.z = eta * i.z - (eta * dot + sqrt(k)) * n.z * if (k >= 0.0 ) 1.0 else 0.0
336+ when {
337+ k >= 0 -> {
338+ res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x
339+ res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y
340+ res.z = eta * i.z - (eta * dot + sqrt(k)) * n.z
341+ }
342+ else -> {
343+ res.x = 0.0
344+ res.y = 0.0
345+ res.z = 0.0
346+ }
347+ }
314348 return res
315349 }
316350
317351 fun refract (i : Vec4 , n : Vec4 , eta : Float , res : Vec4 = Vec4 ()): Vec4 {
318- assert (eta >= - 1f && eta <= 1f )
319352 val dot = dot(n, i)
320353 val k = 1f - eta * eta * (1f - dot * dot)
321- res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x * if (k >= 0f ) 1f else 0f
322- res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y * if (k >= 0f ) 1f else 0f
323- res.z = eta * i.z - (eta * dot + sqrt(k)) * n.z * if (k >= 0f ) 1f else 0f
324- res.w = eta * i.w - (eta * dot + sqrt(k)) * n.w * if (k >= 0f ) 1f else 0f
354+ when {
355+ k >= 0 -> {
356+ res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x
357+ res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y
358+ res.z = eta * i.z - (eta * dot + sqrt(k)) * n.z
359+ res.w = eta * i.w - (eta * dot + sqrt(k)) * n.w
360+ }
361+ else -> {
362+ res.x = 0f
363+ res.y = 0f
364+ res.z = 0f
365+ res.w = 0f
366+ }
367+ }
325368 return res
326369 }
327370
328371 fun refract (i : Vec4d , n : Vec4d , eta : Double , res : Vec4d = Vec4d ()): Vec4d {
329372 assert (eta >= - 1.0 && eta <= 1.0 )
330373 val dot = dot(n, i)
331374 val k = 1.0 - eta * eta * (1.0 - dot * dot)
332- res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x * if (k >= 0.0 ) 1.0 else 0.0
333- res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y * if (k >= 0.0 ) 1.0 else 0.0
334- res.z = eta * i.z - (eta * dot + sqrt(k)) * n.z * if (k >= 0.0 ) 1.0 else 0.0
335- res.w = eta * i.w - (eta * dot + sqrt(k)) * n.w * if (k >= 0.0 ) 1.0 else 0.0
375+ when {
376+ k >= 0 -> {
377+ res.x = eta * i.x - (eta * dot + sqrt(k)) * n.x
378+ res.y = eta * i.y - (eta * dot + sqrt(k)) * n.y
379+ res.z = eta * i.z - (eta * dot + sqrt(k)) * n.z
380+ res.w = eta * i.w - (eta * dot + sqrt(k)) * n.w
381+ }
382+ else -> {
383+ res.x = 0.0
384+ res.y = 0.0
385+ res.z = 0.0
386+ res.w = 0.0
387+ }
388+ }
336389 return res
337390 }
338391}
0 commit comments