mirror of
https://github.com/3b1b/manim.git
synced 2025-07-30 05:24:22 +08:00
Fixed division by zero bug in alpha compositing
This commit is contained in:
@ -430,10 +430,15 @@ class Camera(object):
|
|||||||
]
|
]
|
||||||
|
|
||||||
out_a = src_a + dst_a*(1.0-src_a)
|
out_a = src_a + dst_a*(1.0-src_a)
|
||||||
|
|
||||||
|
# When the output alpha is 0 for full transparency,
|
||||||
|
# we have a choice over what RGB value to use in our
|
||||||
|
# output representation. We choose 0.0 here.
|
||||||
out_rgb = fdiv(
|
out_rgb = fdiv(
|
||||||
src_rgb*src_a[..., None] + \
|
src_rgb*src_a[..., None] + \
|
||||||
dst_rgb*dst_a[..., None]*(1.0-src_a[..., None]),
|
dst_rgb*dst_a[..., None]*(1.0-src_a[..., None]),
|
||||||
out_a[..., None]
|
out_a[..., None],
|
||||||
|
zero_over_zero_value = 0.0
|
||||||
)
|
)
|
||||||
|
|
||||||
self.pixel_array[..., :3] = out_rgb*self.rgb_max_val
|
self.pixel_array[..., :3] = out_rgb*self.rgb_max_val
|
||||||
|
15
helpers.py
15
helpers.py
@ -694,8 +694,19 @@ class DictAsObject(object):
|
|||||||
self.__dict__ = dict
|
self.__dict__ = dict
|
||||||
|
|
||||||
# Just to have a less heavyweight name for this extremely common operation
|
# Just to have a less heavyweight name for this extremely common operation
|
||||||
def fdiv(a, b):
|
#
|
||||||
return np.true_divide(a,b)
|
# We may wish to have more fine-grained control over division by zero behavior
|
||||||
|
# in future (separate specifiable default values for 0/0 and x/0 with x != 0),
|
||||||
|
# but for now, we just allow the option to handle 0/0.
|
||||||
|
def fdiv(a, b, zero_over_zero_value = None):
|
||||||
|
if zero_over_zero_value != None:
|
||||||
|
out = np.full_like(a, zero_over_zero_value)
|
||||||
|
where = np.logical_or (a != 0, b != 0)
|
||||||
|
else:
|
||||||
|
out = None
|
||||||
|
where = True
|
||||||
|
|
||||||
|
return np.true_divide(a, b, out = out, where = where)
|
||||||
|
|
||||||
def add_extension_if_not_present(file_name, extension):
|
def add_extension_if_not_present(file_name, extension):
|
||||||
# This could conceivably be smarter about handling existing differing extensions
|
# This could conceivably be smarter about handling existing differing extensions
|
||||||
|
Reference in New Issue
Block a user