public void Draw(CanvasContext2D ctx, Matrix3d wvp)
        {
            Vector3d a = wvp.Transform(A.Position);
            Vector3d b = wvp.Transform(B.Position);
            Vector3d c = wvp.Transform(C.Position);

            if (CheckBackface(a, b, c) != CullInside)
            {
                TrianglesCulled++;
                return;
            }

            TrianglesRendered++;

            bool rendered;
            if (factor == 1.0)
            {
                rendered = DrawTriangle(ctx, texture, (a.X + .5) * Width, (-a.Y + .5) * Height, (b.X + .5) * Width, (-b.Y + .5) * Height, (c.X + .5) * Width, (-c.Y + .5) * Height, A.Tu * 256.0, A.Tv * 256.0, B.Tu * 256.1, B.Tv * 256.0, C.Tu * 256.0, C.Tv * 256.0);
            }
            else
            {
                rendered = DrawTriangle(ctx, texture, (a.X * factor + .5) * Width, (-a.Y * factor + .5) * Height, (b.X * factor + .5) * Width, (-b.Y * factor + .5) * Height, (c.X * factor + .5) * Width, (-c.Y * factor + .5) * Height, A.Tu * 255, A.Tv * 255, B.Tu * 255, B.Tv * 255, C.Tu * 255, C.Tv * 255);
            }
            if (rendered)
            {
                TrianglesRendered++;
            }
            else
            {
                TrianglesCulled++;
            }
        }
Beispiel #2
0
 internal void TransformByMatrics(Matrix3d lookAtAdjust)
 {
     Vector3d temp = lookAtAdjust.Transform(this);
     this.X = temp.X;
     this.Y = temp.Y;
     this.Z = temp.Z;
 }
Beispiel #3
0
 internal static Vector3d TransformCoordinate(Vector3d vector3d, Matrix3d mat)
 {
     return mat.Transform(vector3d);
 }