/// <summary> /// Creates a quad from screen coordinates. /// </summary> /// <param name="position">Position.</param> /// <param name="size">Size.</param> /// <param name="deviceNormalized">If set to <c>true</c> the position and size are already device normalized.</param> public void CreateQuad(Vector2 position, Vector2 size, bool deviceNormalized) { RVertexData2D[] vertices = new RVertexData2D[4]; short[] indices = new short[6] { 0, 1, 2, 0, 2, 3 }; if (!deviceNormalized) { // Kinda like a 2d unproject, screen coords to device normal coords... RViewport viewport = REngine.Instance._viewport; Vector2 w = new Vector2(viewport.Width, viewport.Height); Vector2 l = size; Vector2 d = (l / w); size.X = d.X; size.Y = d.Y; Vector2 p = (position / w); position.X = p.X; position.Y = p.Y; } vertices[0] = new RVertexData2D(new Vector2(position.X, position.Y), new Vector2(0, 0)); vertices[1] = new RVertexData2D(new Vector2(position.X, position.Y + size.Y), new Vector2(0, 1)); vertices[2] = new RVertexData2D(new Vector2(position.X + size.X, position.Y + size.Y), new Vector2(1, 1)); vertices[3] = new RVertexData2D(new Vector2(position.X + size.X, position.Y), new Vector2(1, 0)); VertexBuffer = new RVertexBuffer(vertices[0].Declaration, 4, RBufferUsage.WriteOnly); VertexBuffer.SetData <RVertexData2D>(vertices); _index = new RIndexBuffer(typeof(short), 6, RBufferUsage.WriteOnly); _index.SetData <short>(indices); }
public void CreateFullscreenQuad() { RViewport viewport = REngine.Instance._viewport; //CreateQuad(new Vector2(0, 0), new Vector2(1,1), true); CreateQuad(new Vector2(0, 0), new Vector2(viewport.Width, viewport.Height), true); }
public override void Init() { mainViewport = new RViewport(1920, 1080); // Initialization Code Here Engine.InitGameWindow((int)mainViewport.Width, (int)mainViewport.Height, RWindowStyle.Normal, "Red"); Engine.SetClearColor(RColor.DarkGray); Engine.SetShowFPS(true); }
public virtual Ray MousePick(RViewport viewport, int x, int y) { Vector3 nearPoint = Unproject(viewport, x, y, 0.0f); Vector3 farPoint = Unproject(viewport, x, y, 1.0f); Vector3 direction = farPoint - nearPoint; direction.Normalize(); return(new Ray(nearPoint, direction)); }
public virtual Vector3 Project(RViewport viewport, Vector3 worldPoint) { Matrix matrix = Matrix.Multiply(View, Projection); Vector3 vector = Vector3.Transform(worldPoint, matrix); float a = (((worldPoint.X * matrix.M14) + (worldPoint.Y * matrix.M24)) + (worldPoint.Z * matrix.M34)) + matrix.M44; if (!WithinEpsilon(a, 1f)) { vector /= a; } vector.X = (((vector.X + 1f) * 0.5f) * viewport.Width) + viewport.X; vector.Y = (((-vector.Y + 1f) * 0.5f) * viewport.Height) + viewport.Y; vector.Z = (vector.Z * (Near - Far)) + Near; return(vector); }
public virtual Vector3 Unproject(RViewport viewport, int x, int y, float depth) { Vector4 screen = new Vector4((x - viewport.X) / viewport.Width, (y - viewport.Y) / viewport.Height, depth, 1.0f); screen.X = screen.X * 2.0f - 1.0f; screen.Y = screen.Y * 2.0f - 1.0f; screen.Z = screen.Z * 2.0f - 1.0f; var inverseViewProjection = Matrix.Invert(Matrix.Multiply(View, Projection)); screen = inverseViewProjection * screen; if (screen.W != 0.0f) { screen.X /= screen.W; screen.Y /= screen.W; screen.Z /= screen.W; } return(new Vector3(screen.X, screen.Y, screen.Z)); }