@@ -263,68 +263,76 @@ interface func_geometric {
263263
264264
265265 fun refract (i : Float , n : Float , eta : Float ): Float {
266+ assert (eta >= - 1f && eta <= 1f )
266267 val dot = dot(n, i)
267268 val k = 1f - eta * eta * (1f - dot * dot)
268269 return (eta * i - (eta * dot + sqrt(k)) * n) * if (k >= 0f ) 1f else 0f
269270 }
270271
271272 fun refract (i : Double , n : Double , eta : Double ): Double {
273+ assert (eta >= - 1.0 && eta <= 1.0 )
272274 val dot = dot(n, i)
273275 val k = 1.0 - eta * eta * (1.0 - dot * dot)
274276 return (eta * i - (eta * dot + sqrt(k)) * n) * if (k >= 0.0 ) 1.0 else 0.0
275277 }
276278
277- fun refract (i : Vec2 , n : Vec2 , eta : Number , res : Vec2 = Vec2 ()): Vec2 {
279+ fun refract (i : Vec2 , n : Vec2 , eta : Float , res : Vec2 = Vec2 ()): Vec2 {
280+ assert (eta >= - 1f && eta <= 1f )
278281 val dot = dot(n, i)
279- val k = 1f - eta.f * eta.f * (1f - dot * dot)
280- res.x = eta.f * i.x - (eta.f * dot + sqrt(k)) * n.x * if (k >= 0f ) 1f else 0f
281- res.y = eta.f * i.y - (eta.f * dot + sqrt(k)) * n.y * if (k >= 0f ) 1f else 0f
282+ 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
282285 return res
283286 }
284287
285- fun refract (i : Vec2d , n : Vec2d , eta : Number , res : Vec2d = Vec2d ()): Vec2d {
288+ fun refract (i : Vec2d , n : Vec2d , eta : Double , res : Vec2d = Vec2d ()): Vec2d {
289+ assert (eta >= - 1.0 && eta <= 1.0 )
286290 val dot = dot(n, i)
287- val k = 1.0 - eta.d * eta.d * (1.0 - dot * dot)
288- res.x = eta.d * i.x - (eta.d * dot + sqrt(k)) * n.x * if (k >= 0.0 ) 1.0 else 0.0
289- res.y = eta.d * i.y - (eta.d * dot + sqrt(k)) * n.y * if (k >= 0.0 ) 1.0 else 0.0
291+ 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
290294 return res
291295 }
292296
293- fun refract (i : Vec3 , n : Vec3 , eta : Number , res : Vec3 = Vec3 ()): Vec3 {
297+ fun refract (i : Vec3 , n : Vec3 , eta : Float , res : Vec3 = Vec3 ()): Vec3 {
298+ assert (eta >= - 1f && eta <= 1f )
294299 val dot = dot(n, i)
295- val k = 1f - eta.f * eta.f * (1f - dot * dot)
296- res.x = eta.f * i.x - (eta.f * dot + sqrt(k)) * n.x * if (k >= 0f ) 1f else 0f
297- res.y = eta.f * i.y - (eta.f * dot + sqrt(k)) * n.y * if (k >= 0f ) 1f else 0f
298- res.z = eta.f * i.z - (eta.f * dot + sqrt(k)) * n.z * if (k >= 0f ) 1f else 0f
300+ 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
299304 return res
300305 }
301306
302- fun refract (i : Vec3d , n : Vec3d , eta : Number , res : Vec3d = Vec3d ()): Vec3d {
307+ fun refract (i : Vec3d , n : Vec3d , eta : Double , res : Vec3d = Vec3d ()): Vec3d {
308+ assert (eta >= - 1.0 && eta <= 1.0 )
303309 val dot = dot(n, i)
304- val k = 1.0 - eta.d * eta.d * (1.0 - dot * dot)
305- res.x = eta.d * i.x - (eta.d * dot + sqrt(k)) * n.x * if (k >= 0.0 ) 1.0 else 0.0
306- res.y = eta.d * i.y - (eta.d * dot + sqrt(k)) * n.y * if (k >= 0.0 ) 1.0 else 0.0
307- res.z = eta.d * i.z - (eta.d * dot + sqrt(k)) * n.z * if (k >= 0.0 ) 1.0 else 0.0
310+ 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
308314 return res
309315 }
310316
311- fun refract (i : Vec4 , n : Vec4 , eta : Number , res : Vec4 = Vec4 ()): Vec4 {
317+ fun refract (i : Vec4 , n : Vec4 , eta : Float , res : Vec4 = Vec4 ()): Vec4 {
318+ assert (eta >= - 1f && eta <= 1f )
312319 val dot = dot(n, i)
313- val k = 1f - eta.f * eta.f * (1f - dot * dot)
314- res.x = eta.f * i.x - (eta.f * dot + sqrt(k)) * n.x * if (k >= 0f ) 1f else 0f
315- res.y = eta.f * i.y - (eta.f * dot + sqrt(k)) * n.y * if (k >= 0f ) 1f else 0f
316- res.z = eta.f * i.z - (eta.f * dot + sqrt(k)) * n.z * if (k >= 0f ) 1f else 0f
317- res.w = eta.f * i.w - (eta.f * dot + sqrt(k)) * n.w * if (k >= 0f ) 1f else 0f
320+ 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
318325 return res
319326 }
320327
321- fun refract (i : Vec4d , n : Vec4d , eta : Number , res : Vec4d = Vec4d ()): Vec4d {
328+ fun refract (i : Vec4d , n : Vec4d , eta : Double , res : Vec4d = Vec4d ()): Vec4d {
329+ assert (eta >= - 1.0 && eta <= 1.0 )
322330 val dot = dot(n, i)
323- val k = 1.0 - eta.d * eta.d * (1.0 - dot * dot)
324- res.x = eta.d * i.x - (eta.d * dot + sqrt(k)) * n.x * if (k >= 0.0 ) 1.0 else 0.0
325- res.y = eta.d * i.y - (eta.d * dot + sqrt(k)) * n.y * if (k >= 0.0 ) 1.0 else 0.0
326- res.z = eta.d * i.z - (eta.d * dot + sqrt(k)) * n.z * if (k >= 0.0 ) 1.0 else 0.0
327- res.w = eta.d * i.w - (eta.d * dot + sqrt(k)) * n.w * if (k >= 0.0 ) 1.0 else 0.0
331+ 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
328336 return res
329337 }
330338}
0 commit comments