yeah, this algorithm worked quite fine, here's snipped from the class that does that in Python (just in case someone would need that in the future)
CODE
# returns double area for the triangle
def triangleArea(self,pts,n):
#N dot ((B-A)cross(C-A))
return n*((pts[1]-pts[0])^(pts[2]-pts[0]))
# calculates barycentric coords for a point on a given triangle
# triangle MVector[3]: source triangle
# pt MVector: source point
# returns float[3]
def calcBary(self,triangle,pt):
normal = (triangle[1]-triangle[0])^(triangle[2]-triangle[0])
normal = normal.normal()
fullArea = self.triangleArea(triangle,normal)
area23 = self.triangleArea([pt,triangle[1],triangle[2]], normal)
area13 = self.triangleArea([pt,triangle[2],triangle[0]], normal)
bary1 = area23/fullArea
bary2 = area13/fullArea
bary3 = 1.0-bary1-bary2
return [bary1,bary2,bary3]