aboutsummaryrefslogtreecommitdiffstatsci
path: root/Tests/InterfaceControler.cs
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2017-01-24 12:46:43 +0100
committerjpbruyere <jp.bruyere@hotmail.com>2017-01-24 12:46:43 +0100
commitd8acaa909ce73e150827db9846cd8690fb93d68e (patch)
treec22aab77a5851aad79505a49dc6ac91ca4b0a106 /Tests/InterfaceControler.cs
parente39ac936765e88382d858ee6922293315a18b60d (diff)
parent1a4fe8bd37ed4a3e3324a134df4f90c14b315918 (diff)
Merge branch 'master' into CrowIDE
Diffstat (limited to 'Tests/InterfaceControler.cs')
-rw-r--r--Tests/InterfaceControler.cs33
1 files changed, 31 insertions, 2 deletions
diff --git a/Tests/InterfaceControler.cs b/Tests/InterfaceControler.cs
index 6cb13b2f..12ddf7d8 100644
--- a/Tests/InterfaceControler.cs
+++ b/Tests/InterfaceControler.cs
@@ -53,7 +53,12 @@ namespace Crow
public override void ProcessResize (Rectangle newSize)
{
}
-
+ public override void OpenGLDraw ()
+ {
+ GL.Enable (EnableCap.DepthTest);
+ base.OpenGLDraw ();
+ GL.Disable (EnableCap.DepthTest);
+ }
public void UpdateView (Matrix4 _projection, Matrix4 _modelview, int[] _viewport, Vector3 _vEyePosition)
{
projection = _projection;
@@ -64,7 +69,7 @@ namespace Crow
public override bool ProcessMouseMove (int x, int y)
{
Matrix4 mv = ifaceModelMat * modelview;
- Vector3 vMouse = Extensions.UnProject(ref projection, ref mv, viewport, new Vector2 (x, y)).Xyz;
+ Vector3 vMouse = UnProject(ref projection, ref mv, viewport, new Vector2 (x, y)).Xyz;
Vector3 vE = vEyePosition.Transform (ifaceModelMat.Inverted());
Vector3 vMouseRay = Vector3.Normalize(vMouse - vE);
float a = vE.Z / vMouseRay.Z;
@@ -76,6 +81,30 @@ namespace Crow
return mouseIsInInterface ? CrowInterface.ProcessMouseMove (localMousePos.X, localMousePos.Y) : false;
}
+ Vector4 UnProject(ref Matrix4 projection, ref Matrix4 view, int[] viewport, Vector2 mouse)
+ {
+ Vector4 vec;
+
+ vec.X = 2.0f * mouse.X / (float)viewport[2] - 1;
+ vec.Y = -(2.0f * mouse.Y / (float)viewport[3] - 1);
+ vec.Z = 0f;
+ vec.W = 1.0f;
+
+ Matrix4 viewInv = Matrix4.Invert(view);
+ Matrix4 projInv = Matrix4.Invert(projection);
+
+ Vector4.Transform(ref vec, ref projInv, out vec);
+ Vector4.Transform(ref vec, ref viewInv, out vec);
+
+ if (vec.W > float.Epsilon || vec.W < float.Epsilon)
+ {
+ vec.X /= vec.W;
+ vec.Y /= vec.W;
+ vec.Z /= vec.W;
+ }
+
+ return vec;
+ }
}
public class InterfaceControler {
public Interface CrowInterface;