3D rotation adjustment for Bilibili
This commit is contained in:
parent
5eff4eb19c
commit
e49b2e1bb7
@ -275,8 +275,8 @@ def WriteCommentBilibiliPositioned(f, c, width, height, styleid):
|
|||||||
to_alpha = float(alpha.get(1, from_alpha))
|
to_alpha = float(alpha.get(1, from_alpha))
|
||||||
from_alpha = 255-round(from_alpha*255)
|
from_alpha = 255-round(from_alpha*255)
|
||||||
to_alpha = 255-round(to_alpha*255)
|
to_alpha = 255-round(to_alpha*255)
|
||||||
rotate_z = -int(comment_args.get(5, 0))
|
rotate_z = int(comment_args.get(5, 0))
|
||||||
rotate_y = -int(comment_args.get(6, 0))
|
rotate_y = int(comment_args.get(6, 0))
|
||||||
lifetime = float(comment_args.get(3, 4500))
|
lifetime = float(comment_args.get(3, 4500))
|
||||||
duration = int(comment_args.get(9, lifetime*1000))
|
duration = int(comment_args.get(9, lifetime*1000))
|
||||||
delay = int(comment_args.get(10, 0))
|
delay = int(comment_args.get(10, 0))
|
||||||
@ -287,13 +287,11 @@ def WriteCommentBilibiliPositioned(f, c, width, height, styleid):
|
|||||||
styles.append('\\pos(%s, %s)' % (from_x, from_y))
|
styles.append('\\pos(%s, %s)' % (from_x, from_y))
|
||||||
else:
|
else:
|
||||||
styles.append('\\move(%s, %s, %s, %s, %s, %s)' % (from_x, from_y, to_x, to_y, delay, delay+duration))
|
styles.append('\\move(%s, %s, %s, %s, %s, %s)' % (from_x, from_y, to_x, to_y, delay, delay+duration))
|
||||||
if rotate_z != 0:
|
styles.append('\\frx%s\\fry%s\\frz%s\\fax%s\\fay%s' % ConvertFlashRotation(rotate_y, rotate_z, (from_x-ZoomFactor[1])/(width-ZoomFactor[1]*2)))
|
||||||
styles.append('\\frz%s' % rotate_z)
|
if (from_x, from_y) != (to_x, to_y):
|
||||||
if rotate_y != 0:
|
styles.append('\\t(%s, %s, ' % (delay, delay+duration))
|
||||||
styles.append('\\frx%s' % (rotate_y*math.sin(rotate_z*math.pi/180.0)))
|
styles.append('\\frx%s\\fry%s\\frz%s\\fax%s\\fay%s' % ConvertFlashRotation(rotate_y, rotate_z, (to_x-ZoomFactor[1])/(width-ZoomFactor[1]*2)))
|
||||||
styles.append('\\fry%s' % (rotate_y*math.cos(rotate_z*math.pi/180.0)))
|
styles.append(')')
|
||||||
elif rotate_y != 0:
|
|
||||||
styles.append('\\fry%s' % rotate_y)
|
|
||||||
if fontface:
|
if fontface:
|
||||||
styles.append('\\fn%s' % ASSEscape(fontface))
|
styles.append('\\fn%s' % ASSEscape(fontface))
|
||||||
styles.append('\\fs%s' % round(c[6]*ZoomFactor[0]))
|
styles.append('\\fs%s' % round(c[6]*ZoomFactor[0]))
|
||||||
@ -513,10 +511,10 @@ def GetZoomFactor(SourceSize, TargetSize):
|
|||||||
# Result: (rotX, rotY, rotZ, shearX, shearY)
|
# Result: (rotX, rotY, rotZ, shearX, shearY)
|
||||||
def ConvertFlashRotation(rotY, rotZ, X, FOV=math.tan(2*math.pi/9.0)):
|
def ConvertFlashRotation(rotY, rotZ, X, FOV=math.tan(2*math.pi/9.0)):
|
||||||
X = 2*X-1;
|
X = 2*X-1;
|
||||||
rotY = 180-((180-rotY)%360)
|
rotY = 180-((180+rotY)%360) # Positive value means clockwise in Flash
|
||||||
rotZ = 180-((180-rotZ)%360)
|
rotZ = 180-((180+rotZ)%360)
|
||||||
if 0 <= rotY <= 180:
|
if 0 <= rotY <= 180:
|
||||||
costheta = (FOV*math.cos(rotY*math.pi/180.0)-X*math.sin(rotY*math.pi/180.0))/(FOV+max(2, abs(X)+1)*sin(rotY*math.pi/180.0))
|
costheta = (FOV*math.cos(rotY*math.pi/180.0)-X*math.sin(rotY*math.pi/180.0))/(FOV+max(2, abs(X)+1)*math.sin(rotY*math.pi/180.0))
|
||||||
try:
|
try:
|
||||||
if costheta > 1:
|
if costheta > 1:
|
||||||
costheta = 1
|
costheta = 1
|
||||||
@ -528,7 +526,7 @@ def ConvertFlashRotation(rotY, rotZ, X, FOV=math.tan(2*math.pi/9.0)):
|
|||||||
logging.error('Clipped rotation angle: (rotY=%s, rotZ=%s, X=%s), it is a bug!' % (rotY, rotZ, X))
|
logging.error('Clipped rotation angle: (rotY=%s, rotZ=%s, X=%s), it is a bug!' % (rotY, rotZ, X))
|
||||||
theta = math.acos(costheta)*180/math.pi
|
theta = math.acos(costheta)*180/math.pi
|
||||||
else:
|
else:
|
||||||
costheta = (FOV*math.cos(rotY*math.pi/180.0)+X*math.sin(rotY*math.pi/180.0))/(FOV-max(2, abs(X)+1)*sin(rotY*math.pi/180.0))
|
costheta = (FOV*math.cos(rotY*math.pi/180.0)+X*math.sin(rotY*math.pi/180.0))/(FOV-max(2, abs(X)+1)*math.sin(rotY*math.pi/180.0))
|
||||||
try:
|
try:
|
||||||
if costheta > 1:
|
if costheta > 1:
|
||||||
costheta = 1
|
costheta = 1
|
||||||
|
Loading…
Reference in New Issue
Block a user