The next method that you add here will update the position of the object. It does this through a multiplication operation of the existing modelview matrix with a translation matrix:
def update position(self, position):
$[0,1,0,0]$,
$[0,0,1,0]$,
[position.x, position.y,
position.z, 1]])
The update_scale () method is similar to the update_position () method in that it performs a matrix calculation. But notice the format of the matrix is different to cater to scaling operations:
def update_scale(self, amount: pygame.Vector3):
self.MVM $=$ self.MVM @ $\mathrm{np} \cdot \operatorname{matrix}([$
[amount.x, $0,0,0]$,
$[0$, amount. $y, 0,0]$,
$[0,0$, amount. $z, 0]$,
$[0,0,0,1]$
])