Represents a two-dimensional vector.
Ejemplo n.º 1
0
        internal static bool PerformCameraRestrictionTest()
        {
            if (World.CameraRestriction == Camera.RestrictionMode.On)
            {
                Vector3[] p = new Vector3[] { CameraRestrictionBottomLeft, CameraRestrictionTopRight };
                Vector2[] r = new Vector2[2];
                for (int j = 0; j < 2; j++)
                {
                    // determine relative world coordinates
                    p[j].Rotate(World.AbsoluteCameraDirection, World.AbsoluteCameraUp, World.AbsoluteCameraSide);
                    double rx = -Math.Tan(World.CameraCurrentAlignment.Yaw) - World.CameraCurrentAlignment.Position.X;
                    double ry = -Math.Tan(World.CameraCurrentAlignment.Pitch) - World.CameraCurrentAlignment.Position.Y;
                    double rz = -World.CameraCurrentAlignment.Position.Z;
                    p[j] += rx * World.AbsoluteCameraSide + ry * World.AbsoluteCameraUp + rz * World.AbsoluteCameraDirection;
                    // determine screen coordinates
                    double ez = AbsoluteCameraDirection.X * p[j].X + AbsoluteCameraDirection.Y * p[j].Y + AbsoluteCameraDirection.Z * p[j].Z;
                    if (ez == 0.0)
                    {
                        return(false);
                    }

                    double ex = AbsoluteCameraSide.X * p[j].X + AbsoluteCameraSide.Y * p[j].Y + AbsoluteCameraSide.Z * p[j].Z;
                    double ey = AbsoluteCameraUp.X * p[j].X + AbsoluteCameraUp.Y * p[j].Y + AbsoluteCameraUp.Z * p[j].Z;
                    r[j].X = ex / (ez * Math.Tan(0.5 * HorizontalViewingAngle));
                    r[j].Y = ey / (ez * Math.Tan(0.5 * VerticalViewingAngle));
                }
                return(r[0].X <= -1.0025 & r[1].X >= 1.0025 & r[0].Y <= -1.0025 & r[1].Y >= 1.0025);
            }
            return(true);
        }
Ejemplo n.º 2
0
 internal static void UpdateMouseGrab(double TimeElapsed)
 {
     if (MouseGrabEnabled)
     {
         double factor;
         if (CameraMode == CameraViewMode.Interior | CameraMode == CameraViewMode.InteriorLookAhead)
         {
             factor = 1.0;
         }
         else
         {
             factor = 3.0;
         }
         CameraAlignmentDirection.Yaw   += factor * MouseGrabTarget.X;
         CameraAlignmentDirection.Pitch -= factor * MouseGrabTarget.Y;
         MouseGrabTarget = new Vector2(0.0, 0.0);
     }
 }
Ejemplo n.º 3
0
 public void SetCoordinates(Vector2 coordinates)
 {
     GL.ProgramUniform2(handle, UniformLayout.Coordinates, (float)coordinates.X, (float)coordinates.Y);
 }
Ejemplo n.º 4
0
 public void SetSize(Vector2 size)
 {
     GL.ProgramUniform2(handle, UniformLayout.Size, (float)size.X, (float)size.Y);
 }
Ejemplo n.º 5
0
 public void SetPoint(Vector2 point)
 {
     GL.ProgramUniform2(handle, UniformLayout.Point, (float)point.X, (float)point.Y);
 }
Ejemplo n.º 6
0
        /// <summary>Draws a 3D cube in immediate mode</summary>
        /// <param name="Position">The position in world-space</param>
        /// <param name="Direction">The direction vector</param>
        /// <param name="Up">The up vector</param>
        /// <param name="Side">The side vector</param>
        /// <param name="Size">A 3D vector describing the size of the cube</param>
        /// <param name="Camera">The camera position</param>
        /// <param name="TextureIndex">The texture to apply</param>
        private void DrawImmediate(Vector3 Position, Vector3 Direction, Vector3 Up, Vector3 Side, Vector3 Size, Vector3 Camera, Texture TextureIndex)
        {
            renderer.LastBoundTexture = null;
            GL.MatrixMode(MatrixMode.Projection);
            GL.PushMatrix();
            GL.LoadIdentity();
            OpenTK.Matrix4d perspective = OpenTK.Matrix4d.Perspective(renderer.Camera.VerticalViewingAngle, -renderer.Screen.AspectRatio, 0.2, 1000.0);
            GL.MultMatrix(ref perspective);
            double dx = renderer.Camera.AbsoluteDirection.X;
            double dy = renderer.Camera.AbsoluteDirection.Y;
            double dz = renderer.Camera.AbsoluteDirection.Z;
            double ux = renderer.Camera.AbsoluteUp.X;
            double uy = renderer.Camera.AbsoluteUp.Y;
            double uz = renderer.Camera.AbsoluteUp.Z;

            OpenTK.Matrix4d lookat = OpenTK.Matrix4d.LookAt(0.0, 0.0, 0.0, dx, dy, dz, ux, uy, uz);
            GL.MatrixMode(MatrixMode.Modelview);
            GL.PushMatrix();
            GL.LoadMatrix(ref lookat);
            Vector3[] v = new Vector3[8];
            v[0] = new Vector3(Size.X, Size.Y, -Size.Z);
            v[1] = new Vector3(Size.X, -Size.Y, -Size.Z);
            v[2] = new Vector3(-Size.X, -Size.Y, -Size.Z);
            v[3] = new Vector3(-Size.X, Size.Y, -Size.Z);
            v[4] = new Vector3(Size.X, Size.Y, Size.Z);
            v[5] = new Vector3(Size.X, -Size.Y, Size.Z);
            v[6] = new Vector3(-Size.X, -Size.Y, Size.Z);
            v[7] = new Vector3(-Size.X, Size.Y, Size.Z);
            for (int i = 0; i < 8; i++)
            {
                v[i].Rotate(Direction, Up, Side);
                v[i] += Position - Camera;
            }
            int[][] Faces = new int[6][];
            Faces[0] = new[] { 0, 1, 2, 3 };
            Faces[1] = new[] { 0, 4, 5, 1 };
            Faces[2] = new[] { 0, 3, 7, 4 };
            Faces[3] = new[] { 6, 5, 4, 7 };
            Faces[4] = new[] { 6, 7, 3, 2 };
            Faces[5] = new[] { 6, 2, 1, 5 };
            if (TextureIndex == null || !renderer.currentHost.LoadTexture(ref TextureIndex, OpenGlTextureWrapMode.ClampClamp))
            {
                GL.Disable(EnableCap.Texture2D);
                for (int i = 0; i < 6; i++)
                {
                    GL.Begin(PrimitiveType.Quads);
                    for (int j = 0; j < 4; j++)
                    {
                        GL.Vertex3(v[Faces[i][j]].X, v[Faces[i][j]].Y, v[Faces[i][j]].Z);
                    }
                    GL.End();
                }
                GL.PopMatrix();

                GL.MatrixMode(MatrixMode.Projection);
                GL.PopMatrix();
                return;
            }
            GL.Enable(EnableCap.Texture2D);
            GL.BindTexture(TextureTarget.Texture2D, TextureIndex.OpenGlTextures[(int)OpenGlTextureWrapMode.ClampClamp].Name);
            Vector2[][] t = new Vector2[6][];
            t[0] = new[] { new Vector2(1.0, 0.0), new Vector2(1.0, 1.0), new Vector2(0.0, 1.0), new Vector2(0.0, 0.0) };
            t[1] = new[] { new Vector2(0.0, 0.0), new Vector2(1.0, 0.0), new Vector2(1.0, 1.0), new Vector2(0.0, 1.0) };
            t[2] = new[] { new Vector2(1.0, 1.0), new Vector2(0.0, 1.0), new Vector2(0.0, 0.0), new Vector2(1.0, 0.0) };
            t[3] = new[] { new Vector2(1.0, 1.0), new Vector2(0.0, 1.0), new Vector2(0.0, 0.0), new Vector2(1.0, 0.0) };
            t[4] = new[] { new Vector2(0.0, 1.0), new Vector2(0.0, 0.0), new Vector2(1.0, 0.0), new Vector2(1.0, 1.0) };
            t[5] = new[] { new Vector2(0.0, 1.0), new Vector2(0.0, 0.0), new Vector2(1.0, 0.0), new Vector2(1.0, 1.0) };
            for (int i = 0; i < 6; i++)
            {
                GL.Begin(PrimitiveType.Quads);
                GL.Color3(1.0, 1.0, 1.0);
                for (int j = 0; j < 4; j++)
                {
                    GL.TexCoord2(t[i][j].X, t[i][j].Y);
                    GL.Vertex3(v[Faces[i][j]].X, v[Faces[i][j]].Y, v[Faces[i][j]].Z);
                }
                GL.End();
            }
            GL.PopMatrix();

            GL.MatrixMode(MatrixMode.Projection);
            GL.PopMatrix();
        }
Ejemplo n.º 7
0
 // constructors
 /// <summary>Creates a new instance of this structure.</summary>
 /// <param name="spatialCoordinates">The spatial coordinates.</param>
 /// <param name="normal">The surface normal.</param>
 /// <param name="textureCoordinates">The texture coordinates.</param>
 /// <param name="reflectiveColor">The reflective color.</param>
 /// <param name="tag">A field to convey intermediate information.</param>
 public Vertex(Math.Vector3 spatialCoordinates, Math.Vector2 textureCoordinates, Math.Vector3 normal, Color.ColorRGBA reflectiveColor, int tag)
 {
     this.SpatialCoordinates = spatialCoordinates;
     this.TextureCoordinates = textureCoordinates;
     this.Normal = normal;
     this.ReflectiveColor = reflectiveColor;
     this.Tag = tag;
 }
Ejemplo n.º 8
0
		internal static bool PerformCameraRestrictionTest()
		{
			if (World.CameraRestriction == CameraRestrictionMode.On) {
				Vector3[] p = new Vector3[] { CameraRestrictionBottomLeft, CameraRestrictionTopRight };
				Vector2[] r = new Vector2[2];
				for (int j = 0; j < 2; j++) {
					// determine relative world coordinates
					World.Rotate(ref p[j].X, ref p[j].Y, ref p[j].Z, World.AbsoluteCameraDirection.X, World.AbsoluteCameraDirection.Y, World.AbsoluteCameraDirection.Z, World.AbsoluteCameraUp.X, World.AbsoluteCameraUp.Y, World.AbsoluteCameraUp.Z, World.AbsoluteCameraSide.X, World.AbsoluteCameraSide.Y, World.AbsoluteCameraSide.Z);
					double rx = -Math.Tan(World.CameraCurrentAlignment.Yaw) - World.CameraCurrentAlignment.Position.X;
					double ry = -Math.Tan(World.CameraCurrentAlignment.Pitch) - World.CameraCurrentAlignment.Position.Y;
					double rz = -World.CameraCurrentAlignment.Position.Z;
					p[j].X += rx * World.AbsoluteCameraSide.X + ry * World.AbsoluteCameraUp.X + rz * World.AbsoluteCameraDirection.X;
					p[j].Y += rx * World.AbsoluteCameraSide.Y + ry * World.AbsoluteCameraUp.Y + rz * World.AbsoluteCameraDirection.Y;
					p[j].Z += rx * World.AbsoluteCameraSide.Z + ry * World.AbsoluteCameraUp.Z + rz * World.AbsoluteCameraDirection.Z;
					// determine screen coordinates
					double ez = AbsoluteCameraDirection.X * p[j].X + AbsoluteCameraDirection.Y * p[j].Y + AbsoluteCameraDirection.Z * p[j].Z;
					if (ez == 0.0) return false;
					double ex = AbsoluteCameraSide.X * p[j].X + AbsoluteCameraSide.Y * p[j].Y + AbsoluteCameraSide.Z * p[j].Z;
					double ey = AbsoluteCameraUp.X * p[j].X + AbsoluteCameraUp.Y * p[j].Y + AbsoluteCameraUp.Z * p[j].Z;
					r[j].X = ex / (ez * Math.Tan(0.5 * HorizontalViewingAngle));
					r[j].Y = ey / (ez * Math.Tan(0.5 * VerticalViewingAngle));
				}
				return r[0].X <= -1.0025 & r[1].X >= 1.0025 & r[0].Y <= -1.0025 & r[1].Y >= 1.0025;
			}
			return true;
		}
Ejemplo n.º 9
0
		internal static void UpdateMouseGrab(double TimeElapsed) {
			if (MouseGrabEnabled) {
				double factor;
				if (CameraMode == CameraViewMode.Interior | CameraMode == CameraViewMode.InteriorLookAhead) {
					factor = 1.0;
				} else {
					factor = 3.0;
				}
				CameraAlignmentDirection.Yaw += factor * MouseGrabTarget.X;
				CameraAlignmentDirection.Pitch -= factor * MouseGrabTarget.Y;
				MouseGrabTarget = new Vector2(0.0, 0.0);
			}
		}
Ejemplo n.º 10
0
			internal Vertex(Vector3 Coordinates, Vector2 TextureCoordinates) {
				this.Coordinates = Coordinates;
				this.TextureCoordinates = TextureCoordinates;
			}
Ejemplo n.º 11
0
			internal Vertex(double X, double Y, double Z) {
				this.Coordinates = new Vector3(X, Y, Z);
				this.TextureCoordinates = new Vector2(0.0f, 0.0f);
			}