def CalculateColour(aTriangle): AmbColour = [0.0, 0.0, 0.0] AmbColour[R] = ambientMatR * ambientLightR AmbColour[G] = ambientMatG * ambientLightG AmbColour[B] = ambientMatB * ambientLightB DiffuseColour = [0.0, 0.0, 0.0] DiffuseFactor = Diffuse(aTriangle.normal, Triangle.AveragePoint(aTriangle)) #print(DiffuseFactor) DiffuseColour[R] = DiffuseFactor * diffuseMatR * lightSourceR DiffuseColour[G] = DiffuseFactor * diffuseMatG * lightSourceG DiffuseColour[B] = DiffuseFactor * diffuseMatB * lightSourceB #print(DiffuseColour[R],DiffuseColour[G],DiffuseColour[B]) SpecularColour = [0.0, 0.0, 0.0] SpecularFactor = Specular(aTriangle.normal, Triangle.AveragePoint(aTriangle)) #print(SpecularFactor) SpecularColour[R] = SpecularFactor * specularMatR * lightSourceR SpecularColour[G] = SpecularFactor * specularMatG * lightSourceG SpecularColour[B] = SpecularFactor * specularMatB * lightSourceB #print(SpecularColour[R],SpecularColour[G],SpecularColour[B]) endColour = [0.0, 0.0, 0.0] endColour[R] = AmbColour[R] + DiffuseColour[R] + SpecularColour[R] endColour[G] = AmbColour[G] + DiffuseColour[G] + SpecularColour[G] endColour[B] = AmbColour[B] + DiffuseColour[B] + SpecularColour[B] #if >1, clamp the values if endColour[R] > 1.0: endColour[R] = 1.0 if endColour[G] > 1.0: endColour[G] = 1.0 if endColour[B] > 1.0: endColour[B] = 1.0 return Colour.Colour(endColour[R], endColour[G], endColour[B])
triangleList = copyList copyList = [] #do perspective division for perspective for t in triangleList: t = AppInfo.PerspDiv(t) t = Triangle.MultiplyTriangle(t, AppInfo.ScreenMatrix) copyList.append(t) triangleList = copyList copyList = [] #clip in z for t in triangleList: averagePt = Triangle.AveragePoint(t) if averagePt[2] < 1.0 or averagePt[2] > 0.0: copyList.append(t) triangleList = copyList copyList = [] for t in triangleList: t.AveragePoint = Triangle.AveragePoint(t) #sort triangles by z triangleList = bubbleSortTriangles(triangleList) #draw triangles for t in triangleList: Triangle.drawTriangle(t, windowSurface, t.colour)