mirror of
https://github.com/3b1b/manim.git
synced 2025-08-05 16:49:03 +00:00
Fixed division by zero bug in alpha compositing
This commit is contained in:
parent
652dab7f23
commit
c2b9417c6a
2 changed files with 19 additions and 3 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue