本文整理汇总了C#中System.Vector3.Unproject方法的典型用法代码示例。如果您正苦于以下问题:C# Vector3.Unproject方法的具体用法?C# Vector3.Unproject怎么用?C# Vector3.Unproject使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Vector3
的用法示例。
在下文中一共展示了Vector3.Unproject方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: getPicking
public Vector2 getPicking(Point pos, Viewport Viewport)
{
Vector3 v1 = new Vector3(pos.X, pos.Y, 1);
Vector3 v2 = new Vector3(pos.X, pos.Y, 0);
v1.Unproject(Viewport, m_Projection, m_View, Matrix.Identity);
v2.Unproject(Viewport, m_Projection, m_View, Matrix.Identity);
Vector3 v3 = v2 - v1;
v3.Scale(1.0f/v3.Y);
Vector3 v4 = v1 - v3 * v1.Y; // Y 값이 0이 되는 방정식 계산.
return new Vector2(v4.X, v4.Z);
}
示例2: GetMeshIntersect
/// <summary>
/// Get an intercept for the mesh .
/// </summary>
public bool GetMeshIntersect(out Ray foundRay, double WorldRadius,
Viewport viewPort,
Matrix pMatrix,
Matrix vMatrix,
Matrix wMatrix, int MouseX, int MouseY)
{
bool bIntersects = false;
Vector3 vDirection;
Vector3 vNear = new Vector3(MouseX, MouseY, 0);
Vector3 vFar = new Vector3(MouseX, MouseY, 1);
Vector3 sv = MathEngine.SphericalToCartesian(Angle.FromRadians(m_Lat),
Angle.FromRadians(m_Lon), WorldRadius + m_Alt*1000 );
vNear.Unproject(viewPort,
pMatrix,
vMatrix,
Matrix.Translation(sv));
vFar.Unproject(viewPort,
pMatrix,
vMatrix,
Matrix.Translation(sv));
foundRay = new Ray();
vDirection= Vector3.Subtract(vFar,vNear);
foundRay.origin = vNear;
foundRay.destination = vFar;
foundRay.direction =vDirection;
// Perform ray-box intersection test.
if (Geometry.BoxBoundProbe(meshBoundingBoxMinValue *m_scale,
meshBoundingBoxMaxValue*m_scale, vNear, vFar))
{
bIntersects = true;
}
return bIntersects;
}
示例3: Form1_MouseMove
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Coordinates.Coordinate projCoord = new MOBMAP.Coordinates.Coordinate(new Geometry.Point(e.X,e.Y),false);
Vector3 position = new Vector3(0,0,0);
position.Project(map.device.Viewport, map.device.Transform.Projection, map.device.Transform.View, map.device.Transform.World);
position.X = e.X;
position.Y = e.Y;
position.Unproject(map.device.Viewport, map.device.Transform.Projection, map.device.Transform.View, map.device.Transform.World);
}
示例4: PickingRayIntersection
/// <summary>
/// Calculates latitude/longitude for given screen coordinate.
/// </summary>
public virtual void PickingRayIntersection(int screenX, int screenY, out Angle latitude, out Angle longitude)
{
Vector3 v1 = new Vector3();
v1.X = screenX;
v1.Y = screenY;
v1.Z = viewPort.MinZ;
v1.Unproject(viewPort, m_absoluteProjectionMatrix, m_absoluteViewMatrix, m_absoluteWorldMatrix);
Vector3 v2 = new Vector3();
v2.X = screenX;
v2.Y = screenY;
v2.Z = viewPort.MaxZ;
v2.Unproject(viewPort, m_absoluteProjectionMatrix, m_absoluteViewMatrix, m_absoluteWorldMatrix);
Point3d p1 = new Point3d(v1.X, v1.Y, v1.Z);
Point3d p2 = new Point3d(v2.X, v2.Y, v2.Z);
double a = (p2.X - p1.X)*(p2.X - p1.X) + (p2.Y - p1.Y)*(p2.Y - p1.Y) + (p2.Z - p1.Z)*(p2.Z - p1.Z);
double b = 2.0*((p2.X - p1.X)*(p1.X) + (p2.Y - p1.Y)*(p1.Y) + (p2.Z - p1.Z)*(p1.Z));
double c = p1.X*p1.X + p1.Y*p1.Y + p1.Z*p1.Z - _worldRadius*_worldRadius;
double discriminant = b*b - 4*a*c;
if (discriminant <= 0) {
latitude = Angle.NaN;
longitude = Angle.NaN;
return;
}
// float t0 = ((-1.0f) * b + (float)Math.Sqrt(b*b - 4 * a * c)) / (2*a);
double t1 = ((-1.0)*b - Math.Sqrt(b*b - 4*a*c))/(2*a);
// Vector3 i0 = new Vector3(p1.X + t0*(p2.X - p1.X), p1.Y + t0*(p2.Y - p1.Y), p1.Z + t0 *(p2.Z - p1.Z));
Point3d i1 = new Point3d(p1.X + t1*(p2.X - p1.X), p1.Y + t1*(p2.Y - p1.Y), p1.Z + t1*(p2.Z - p1.Z));
// Vector3 i0t = MathEngine.CartesianToSpherical(i0.X, i0.Y, i0.Z);
Point3d i1t = MathEngine.CartesianToSphericalD(i1.X, i1.Y, i1.Z);
Point3d mousePointer = i1t;
latitude = Angle.FromRadians(mousePointer.Y);
longitude = Angle.FromRadians(mousePointer.Z);
}
示例5: IsMouseOver
/// <summary>
/// Check is mouse over a mesh.
/// </summary>
/// <param name="mesh">Mesh to check</param>
/// <param name="dev">device which is ready to render</param>
private bool IsMouseOver(Mesh mesh, Device dev)
{
Vector3 rayPos = new Vector3(DrawArgs.LastMousePosition.X, DrawArgs.LastMousePosition.Y, dev.Viewport.MinZ);
Vector3 rayDir = new Vector3(DrawArgs.LastMousePosition.X, DrawArgs.LastMousePosition.Y, dev.Viewport.MaxZ);
rayPos.Unproject(dev.Viewport, dev.Transform.Projection, dev.Transform.View, dev.Transform.World);
rayDir.Unproject(dev.Viewport, dev.Transform.Projection, dev.Transform.View, dev.Transform.World);
return mesh.Intersect(rayPos, rayDir);
}
示例6: TestIntersectWithMouse
public static bool TestIntersectWithMouse(Mesh mshMesh, object objViewport, Matrix mtxProjection, Matrix mtxView, Matrix mtxWorld, int iX, int iY, out IntersectInformation iiInfo)
{
// Create ray for intersection test
Vector3 near = new Vector3(iX, iY, 0);
Vector3 far = new Vector3(iX, iY, 1);
//unproject the near and far vectors to 3D space
near.Unproject(objViewport, mtxProjection, mtxView, mtxWorld);
far.Unproject(objViewport, mtxProjection, mtxView, mtxWorld);
//subtract the near vector from the far vector to get our ray
far.Subtract(near);
return mshMesh.Intersect(near,far, out iiInfo);
}
示例7: Mark3DCursorPosition
/// <summary>
/// The mark 3 d cursor position.
/// </summary>
/// <param name="x">The x.</param>
/// <param name="y">The y.</param>
/// <param name="m">The m.</param>
/// <returns></returns>
/// <remarks></remarks>
public Vector3 Mark3DCursorPosition(float x, float y, Matrix m)
{
Vector3 tempV3 = new Vector3();
tempV3.Project(device.Viewport, device.Transform.Projection, device.Transform.View, m);
tempV3.X = x;
tempV3.Y = y;
tempV3.Unproject(device.Viewport, device.Transform.Projection, device.Transform.View, m);
return tempV3;
}