public static OrthoNormalBasis MakeFromW(Vector3D w) { OrthoNormalBasis onb = new OrthoNormalBasis(); w.Normalize(); onb.w = w; if ((Math.Abs(onb.w.X) < Math.Abs(onb.w.Y)) && (Math.Abs(onb.w.X) < Math.Abs(onb.w.Z))) { onb.v.X = 0; onb.v.Y = onb.w.Z; onb.v.Z = -onb.w.Y; } else if (Math.Abs(onb.w.Y) < Math.Abs(onb.w.Z)) { onb.v.X = onb.w.Z; onb.v.Y = 0; onb.v.Z = -onb.w.X; } else { onb.v.X = onb.w.Y; onb.v.Y = -onb.w.X; onb.v.Z = 0; } onb.v.Normalize(); onb.u = onb.v ^ onb.w; return(onb); }
public static OrthoNormalBasis MakeFromWV(Vector3D w, Vector3D v) { OrthoNormalBasis onb = new OrthoNormalBasis(); w.Normalize(); onb.w = w; onb.u = onb.w ^ v; onb.u.Normalize(); onb.v = (onb.w ^ onb.u); return onb; }
public static OrthoNormalBasis MakeFromWV(Vector3D w, Vector3D v) { OrthoNormalBasis onb = new OrthoNormalBasis(); w.Normalize(); onb.w = w; onb.u = onb.w ^ v; onb.u.Normalize(); onb.v = (onb.w ^ onb.u); return(onb); }
protected Camera(Point3D eye, Point3D lookAt, Vector3D up, float fov, float resX, float resY) { this.ResX = resX; this.ResY = resY; this.aspect = resX / resY; this.eye = eye; this.Fov = fov; this.up = up; this.LookAt = lookAt; this.basis = OrthoNormalBasis.MakeFromWV(eye - lookAt, up); this.au = (float) Math.Tan(fov * 0.5f); this.av = this.au * 1.0f / this.aspect; }
public static OrthoNormalBasis MakeFromW(Vector3D w) { OrthoNormalBasis onb = new OrthoNormalBasis(); w.Normalize(); onb.w = w; if ((Math.Abs(onb.w.X) < Math.Abs(onb.w.Y)) && (Math.Abs(onb.w.X) < Math.Abs(onb.w.Z))) { onb.v.X = 0; onb.v.Y = onb.w.Z; onb.v.Z = -onb.w.Y; } else if (Math.Abs(onb.w.Y) < Math.Abs(onb.w.Z)) { onb.v.X = onb.w.Z; onb.v.Y = 0; onb.v.Z = -onb.w.X; } else { onb.v.X = onb.w.Y; onb.v.Y = -onb.w.X; onb.v.Z = 0; } onb.v.Normalize(); onb.u = onb.v ^ onb.w; return onb; }