Fix all issues related to improperly rotated, lit, and culled models that use variant rotation

Buttons, levers, quartz pillars and others are now oriented, lit, and culled correctly
This commit is contained in:
David Vierra 2015-07-16 02:00:57 -10:00
parent e018234e6e
commit 6203847d77

View File

@ -548,15 +548,13 @@ cdef class BlockModels(object):
faceInfo.x2, faceInfo.y2, faceInfo.z2, faceInfo.x2, faceInfo.y2, faceInfo.z2,
quadface, u1, v1, u2, v2, faceInfo.textureRotation) quadface, u1, v1, u2, v2, faceInfo.textureRotation)
if faceInfo.variantYrot: quadface = rotateFaceByVariant(quadface,
quadface = rotateFace(quadface, 1, faceInfo.variantYrot) faceInfo.variantXrot,
if faceInfo.variantXrot: faceInfo.variantYrot)
quadface = rotateFace(quadface, 0, faceInfo.variantXrot)
if cullface != -1: if cullface != -1:
if faceInfo.variantYrot: cullface = rotateFaceByVariant(cullface,
cullface = rotateFace(cullface, 1, faceInfo.variantYrot) faceInfo.variantXrot,
if faceInfo.variantXrot: faceInfo.variantYrot)
cullface = rotateFace(cullface, 0, faceInfo.variantXrot)
applyRotations(faceInfo.ox, faceInfo.oy, faceInfo.oz, applyRotations(faceInfo.ox, faceInfo.oy, faceInfo.oz,
faceInfo.elementMatrix, faceInfo.variantMatrix, faceInfo.elementMatrix, faceInfo.variantMatrix,
@ -712,23 +710,23 @@ cdef short * _faceVector(char face):
faceRotations = ( faceRotations = (
( (
FaceYIncreasing, FaceNorth,
FaceZIncreasing, FaceDown,
FaceYDecreasing, FaceSouth,
FaceZDecreasing, FaceUp,
), ),
( (
FaceXIncreasing, FaceNorth,
FaceZIncreasing, FaceEast,
FaceXDecreasing, FaceSouth,
FaceZDecreasing, FaceWest,
),
(
FaceXIncreasing,
FaceYIncreasing,
FaceXDecreasing,
FaceYDecreasing,
), ),
# (
# FaceXIncreasing,
# FaceYIncreasing,
# FaceXDecreasing,
# FaceYDecreasing,
# ),
) )
@ -751,6 +749,12 @@ faceShades[:] = [
0x99, 0x99,
] ]
cdef short rotateFaceByVariant(short face, short variantXrot, short variantYrot):
if variantXrot:
face = rotateFace(face, 0, variantXrot)
if variantYrot:
face = rotateFace(face, 1, variantYrot)
return face
cdef short rotateFace(short face, short axis, int degrees): cdef short rotateFace(short face, short axis, int degrees):
@ -812,10 +816,10 @@ cdef elementRotation(dict rotation):
cdef variantRotation(variantXrot, variantYrot): cdef variantRotation(variantXrot, variantYrot):
if variantXrot or variantYrot: if variantXrot or variantYrot:
matrix = np.matrix(np.identity(4)) matrix = np.matrix(np.identity(4))
if variantYrot:
matrix *= npRotate("y", variantYrot)
if variantXrot: if variantXrot:
matrix *= npRotate("x", variantXrot) matrix *= npRotate("x", variantXrot)
if variantYrot:
matrix *= npRotate("y", variantYrot)
return matrix[:3, :3] return matrix[:3, :3]
@lru_cache() @lru_cache()