def apply(self, vertex): v = [vertex[0], vertex[1]] sin = math.sin(self.rotation) cos = math.cos(self.rotation) # rotate x = v[0] y = v[1] v[0] = x * cos - y * sin v[1] = x * sin + y * cos # scale v[0] *= self.scale[0] v[1] *= self.scale[1] # translate v[0] += self.translation[0] v[1] += self.translation[1] return Vec2(round(v[0]), round(v[1]))
def renderShadows(mesh): renderer.setTransform(mesh.transform) renderer.color = Color(20, 21, 22) light = Vec2.fromTuple(mousePosition) - Vec2.fromTuple( mesh.transform.translation) Shadow.renderShadow(renderer, mesh.vertices, light)
import sys import pygame from pygame.locals import * from pygame.time import Clock from game.Renderer import Renderer from game import Shadow from game.Geometry import Vec2 from game.components.Transform import * from game.Mesh import * renderer = Renderer() triangle_vertices = [Vec2(0, 50), Vec2(-50, -30), Vec2(50, -30)] quad_vertices = [Vec2(-20, -20), Vec2(20, -20), Vec2(20, 20), Vec2(-20, 20)] Triangle1 = Mesh(triangle_vertices) Triangle1.transform = Transform(translation=(400, 300)) meshes = [Triangle1] mousePosition = (0, 0) def initialize(): global renderer pygame.init() pygame.display.set_caption("Shadow") pygame.mouse.set_visible(False)
def projectVertices(vertices, origin): newVertices = vertices[:] for v in reversed(vertices): v2 = Vec2.fromTuple(v) newVertices.append(projectVertex(v2, origin).toTuple()) return newVertices
def renderShadows(mesh): renderer.setTransform( mesh.transform ) renderer.color = Color(20, 21, 22) light = Vec2.fromTuple(mousePosition) - Vec2.fromTuple(mesh.transform.translation) Shadow.renderShadow(renderer, mesh.vertices, light)
def setUp(self): self.v0 = Vec2(0, 0) self.v1 = Vec2(1, 1) self.v2 = Vec2(2, 3)
def testCrossProduct(self): v3 = self.v2.cross(Vec2(4, 5)) self.assertEqual(v3, -2)
def testDotProduct(self): v3 = self.v2.dot(Vec2(4, 5)) self.assertEqual(v3, 4 * 2 + 3 * 5)
def testScalarMultiplication(self): v3 = self.v2 * 3 self.assertEqual(v3, Vec2(6, 9))
def testAddition(self): v3 = self.v1 + self.v2 self.assertEqual(v3, Vec2(3, 4))
def testEdgeNormal(self): normal = Vec2.fromTuple(Shadow.getEdgeNormal(Vec2(5, 5), Vec2(5, 6))) self.assertEqual(normal, Vec2(-1, 0))