本文整理汇总了C#中Vector4d类的典型用法代码示例。如果您正苦于以下问题:C# Vector4d类的具体用法?C# Vector4d怎么用?C# Vector4d使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Vector4d类属于命名空间,在下文中一共展示了Vector4d类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetVisibility
public static Frustum.VISIBILTY GetVisibility(Vector4d clip, Vector3d2[] b, double f)
{
double o = b[0].x * clip.x + b[0].y * clip.y + b[0].z * clip.z;
bool p = o + clip.w > 0.0;
if ((o * f + clip.w > 0.0) == p)
{
o = b[1].x * clip.x + b[1].y * clip.y + b[1].z * clip.z;
if ((o + clip.w > 0.0) == p && (o * f + clip.w > 0.0) == p)
{
o = b[2].x * clip.x + b[2].y * clip.y + b[2].z * clip.z;
if ((o + clip.w > 0.0) == p && (o * f + clip.w > 0.0) == p)
{
o = b[3].x * clip.x + b[3].y * clip.y + b[3].z * clip.z;
return (o + clip.w > 0.0) == p && (o * f + clip.w > 0.0) == p ?
(p ? Frustum.VISIBILTY.FULLY : Frustum.VISIBILTY.INVISIBLE) :
Frustum.VISIBILTY.PARTIALLY;
}
}
}
return Frustum.VISIBILTY.PARTIALLY;
}
示例2: LocationToView
public bool LocationToView(Location location, out PointF point)
{
// Move location to 3D earth
var pos3d = new Vector4d (location.Position, 1);
// Camera model
var m = Matrix4d.Mult (modelViewMatrix, projectionMatrix);
// Project into homogeneous 2D point
var pos2h = Vector4d.Transform (pos3d, m);
// Perform the perspective divide
var pos2 = pos2h / pos2h.W;
// Ignore points behind us
if (pos2h.W < 0) {
point = PointF.Empty;
return false;
}
// Console.WriteLine ("{0} = {1}", "W", pos2h.W);
// Stretch into our view
var fr = videoCameraView.Frame;
point = new PointF (
fr.X + (float)((pos2.X + 1) * 0.5) * fr.Width,
fr.Y + (float)((-pos2.Y + 1) * 0.5) * fr.Height
);
return true;
}
示例3: Project
private static bool Project(ref Vector3d world, ref Matrix4d modelviewMatrix, ref Matrix4d projectionMatrix, int[] viewport, out Vector3d screen)
{
Vector4d _in = new Vector4d(world, 1.0);
Vector4d _out = new Vector4d();
Vector4d.Transform(ref _in, ref modelviewMatrix, out _out);
Vector4d.Transform(ref _out, ref projectionMatrix, out _in);
if (_in.W == 0.0)
{
screen = Vector3d.Zero;
return false;
}
_in.X /= _in.W;
_in.Y /= _in.W;
_in.Z /= _in.W;
/* Map x, y and z to range 0-1 */
_in.X = _in.X * 0.5 + 0.5;
_in.Y = _in.Y * 0.5 + 0.5;
_in.Z = _in.Z * 0.5 + 0.5;
/* Map x,y to viewport */
_in.X = _in.X * viewport[2] + viewport[0];
_in.Y = _in.Y * viewport[3] + viewport[1];
screen = new Vector3d(_in);
return true;
}
示例4: Vector4d
public Vector4d(Vector4d v)
{
x = v.x;
y = v.y;
z = v.z;
w = v.w;
}
示例5: GetOpenGLPNameInfo
public List<KeyValuePair<string, string>> GetOpenGLPNameInfo()
{
List<KeyValuePair<string, string>> info =
new List<KeyValuePair<string, string>>();
foreach (GetPName pname in Enum.GetValues(typeof(GetPName)))
{
double[] buff = new double[32];
GL.GetDouble(pname, buff);
int last = 0;
for (int i = 0; i < 32; i++)
{
if (buff[i] != 0.0)
{
last = i + 1;
}
}
string str = null;
switch (last)
{
case 0:
str = "0";
break;
case 1:
str = buff[0].ToString();
break;
case 2:
Vector2d v2 = new Vector2d(buff[0], buff[1]);
str = v2.ToString();
break;
case 3:
Vector3d v3 = new Vector3d(buff[0], buff[1], buff[2]);
str = v3.ToString();
break;
case 4:
Vector4d v4 = new Vector4d(buff[0], buff[1], buff[2], buff[3]);
str = v4.ToString();
break;
case 16:
Matrix4d m4 = new Matrix4d(buff[0], buff[1], buff[2], buff[3],
buff[4], buff[5], buff[6], buff[7],
buff[8], buff[9], buff[10], buff[11],
buff[12], buff[13], buff[14], buff[15]);
str = m4.ToString();
break;
default:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < last; i++)
{
sb.Append(buff[i]);
sb.Append(',');
}
str = sb.ToString();
break;
}
info.Add(new KeyValuePair<string, string>(pname.ToString(), str));
}
return info;
}
示例6: Project
// https://gist.github.com/871099/8d37734ba22737c69173c2e44eaa332f9c85bcde
// http://www.opentk.com/node/1892
// http://www.opentk.com/node/1276
// http://www.opentk.com/node/887
// http://mesa3d.org/
/// <summary>
/// Projects a coordinate from world space into screen space.
/// </summary>
/// <param name="coordinate">The coordinate to project</param>
/// <param name="viewport">The viewport dimensions</param>
/// <param name="projection">The projection matrix</param>
/// <param name="modelview">The modelview matrix</param>
/// <returns>The coordinate in screen space.</returns>
public static Coordinate Project(Coordinate coordinate, int[] viewport, Matrix4d projection, Matrix4d modelview)
{
var source = new Vector4d(coordinate.DX, coordinate.DY, coordinate.DZ, 1);
var imed = Vector4d.Transform(source, modelview);
var vector = Vector4d.Transform(imed, projection);
if (Math.Abs(vector.W - 0) < 0.00001) return null;
var result = Vector3d.Divide(vector.Xyz, vector.W);
result.X = viewport[0] + viewport[2] * (result.X + 1) / 2;
result.Y = viewport[1] + viewport[3] * (result.Y + 1) / 2;
result.Z = (result.Z + 1) / 2;
return new Coordinate((decimal) result.X, (decimal) result.Y, (decimal) result.Z);
}
示例7: Draw
public void Draw(TriMesh front, TriMesh back, Vector3D light)
{
Vector4d light4d = new Vector4d(light.x, light.y, light.z, 0);
Vector3D frontPos = new Vector3D(0.5, 0.5, 0.8);
Vector3D backPos = new Vector3D(0, 0, 0);
GL.Enable(EnableCap.Lighting);
GL.Enable(EnableCap.Light0);
GL.Light(LightName.Light0, LightParameter.Diffuse, Color.White);
GL.Light(LightName.Light0, LightParameter.Position, (Vector4)light4d);
GL.Enable(EnableCap.CullFace);
GL.CullFace(CullFaceMode.Back);
GL.Enable(EnableCap.DepthTest);
GL.DepthFunc(DepthFunction.Lequal);
GL.Clear(ClearBufferMask.DepthBufferBit);
GL.Enable(EnableCap.StencilTest);
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Replace);
GL.StencilFunc(StencilFunction.Always, 1, 1);
GL.Clear(ClearBufferMask.StencilBufferBit);
GL.MatrixMode(MatrixMode.Modelview);
GL.PushMatrix();
Matrix4d m = Matrix4d.LookAt(light4d.Xyz, Vector3d.Zero, Vector3d.UnitY);
GL.MultMatrix(ref m);
GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, Color.Red);
GL.ColorMask(false, false, false, false);
DrawMesh(front, frontPos);
GL.ColorMask(true, true, true, true);
GL.PopMatrix();
GL.StencilFunc(StencilFunction.Equal, 1, 1);
GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, Color.Black);
DrawMesh(back, backPos);
GL.StencilFunc(StencilFunction.Equal, 0, 1);
GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, Color.CornflowerBlue);
DrawMesh(back, backPos);
GL.Disable(EnableCap.StencilTest);
GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, Color.CornflowerBlue);
DrawMesh(front, frontPos);
GL.Material(MaterialFace.FrontAndBack,
MaterialParameter.Diffuse, Color.Red);
DrawMesh(this.sphere, light);
GL.Disable(EnableCap.DepthTest);
}
示例8: Unproject
/// <summary>
/// Converts a screen space point into a corresponding point in world space.
/// </summary>
/// <param name="coordinate">The coordinate to project</param>
/// <param name="viewport">The viewport dimensions</param>
/// <param name="projection">The projection matrix</param>
/// <param name="modelview">The modelview matrix</param>
/// <returns>The coordinate in world space.</returns>
public static Coordinate Unproject(Coordinate coordinate, int[] viewport, Matrix4d projection, Matrix4d modelview)
{
var matrix = Matrix4d.Invert(Matrix4d.Mult(modelview, projection));
var source = new Vector4d(
(coordinate.DX - viewport[0]) * 2 / viewport[2] - 1,
(coordinate.DY - viewport[1]) * 2 / viewport[3] - 1,
2 * coordinate.DZ - 1,
1);
var vector = Vector4d.Transform(source, matrix);
if (Math.Abs(vector.W - 0) < 0.00001) return null;
var result = Vector3d.Divide(vector.Xyz, vector.W);
return new Coordinate((decimal) result.X, (decimal) result.Y, (decimal) result.Z);
}
示例9: Calculate
public List<ChunkedLodTreeFactory.ChunkedLodTreeNode> Calculate(
ChunkedLodTreeFactory.ChunkedLodTreeNode root,
double viewportWidth,
double horizontalFieldOfView,
Vector3d cameraPosition,
double allowedScreenSpaceError,
Vector4d[] frustumPlanes)
{
_frustumPlanes = frustumPlanes;
_allowedScreenSpaceError = allowedScreenSpaceError;
_cameraPosition = cameraPosition;
_visibleNodes = new List<ChunkedLodTreeFactory.ChunkedLodTreeNode>();
_k = viewportWidth / (Math.Tan(horizontalFieldOfView / 2));
CalculateVisibleNodes(root);
return _visibleNodes;
}
示例10: GetFrustumPlanes
static public Vector4d[] GetFrustumPlanes(Matrix4x4d mat)
{
//extract frustum planes from a projection matrix
Vector4d[] frustumPlanes = new Vector4d[6];
// Extract the LEFT plane
frustumPlanes[0] = new Vector4d();
frustumPlanes[0].x = mat.m[3,0] + mat.m[0,0];
frustumPlanes[0].y = mat.m[3,1] + mat.m[0,1];
frustumPlanes[0].z = mat.m[3,2] + mat.m[0,2];
frustumPlanes[0].w = mat.m[3,3] + mat.m[0,3];
// Extract the RIGHT plane
frustumPlanes[1] = new Vector4d();
frustumPlanes[1].x = mat.m[3,0] - mat.m[0,0];
frustumPlanes[1].y = mat.m[3,1] - mat.m[0,1];
frustumPlanes[1].z = mat.m[3,2] - mat.m[0,2];
frustumPlanes[1].w = mat.m[3,3] - mat.m[0,3];
// Extract the BOTTOM plane
frustumPlanes[2] = new Vector4d();
frustumPlanes[2].x = mat.m[3,0] + mat.m[1,0];
frustumPlanes[2].y = mat.m[3,1] + mat.m[1,1];
frustumPlanes[2].z = mat.m[3,2] + mat.m[1,2];
frustumPlanes[2].w = mat.m[3,3] + mat.m[1,3];
// Extract the TOP plane
frustumPlanes[3] = new Vector4d();
frustumPlanes[3].x = mat.m[3,0] - mat.m[1,0];
frustumPlanes[3].y = mat.m[3,1] - mat.m[1,1];
frustumPlanes[3].z = mat.m[3,2] - mat.m[1,2];
frustumPlanes[3].w = mat.m[3,3] - mat.m[1,3];
// Extract the NEAR plane
frustumPlanes[4] = new Vector4d();
frustumPlanes[4].x = mat.m[3,0] + mat.m[2,0];
frustumPlanes[4].y = mat.m[3,1] + mat.m[2,1];
frustumPlanes[4].z = mat.m[3,2] + mat.m[2,2];
frustumPlanes[4].w = mat.m[3,3] + mat.m[2,3];
// Extract the FAR plane
frustumPlanes[5] = new Vector4d();
frustumPlanes[5].x = mat.m[3,0] - mat.m[2,0];
frustumPlanes[5].y = mat.m[3,1] - mat.m[2,1];
frustumPlanes[5].z = mat.m[3,2] - mat.m[2,2];
frustumPlanes[5].w = mat.m[3,3] - mat.m[2,3];
return frustumPlanes;
}
示例11: TestVector4Constructor
public static void TestVector4Constructor()
{
Vector4d v0 = new Vector4d();
v0.x.ShouldBe(0); v0.y.ShouldBe(0); v0.z.ShouldBe(0); v0.w.ShouldBe(0);
Vector4d v1 = new Vector4d(5);
v1.x.ShouldBe(5); v1.y.ShouldBe(0); v1.z.ShouldBe(0); v1.w.ShouldBe(0);
Vector4d v2 = new Vector4d(5, 6);
v2.x.ShouldBe(5); v2.y.ShouldBe(6); v2.z.ShouldBe(0); v2.w.ShouldBe(0);
Vector4d v3 = new Vector4d(5, 6, 7);
v3.x.ShouldBe(5); v3.y.ShouldBe(6); v3.z.ShouldBe(7); v3.w.ShouldBe(0);
Vector4d v4 = new Vector4d(5, 6, 7, 8);
v4.x.ShouldBe(5); v4.y.ShouldBe(6); v4.z.ShouldBe(7); v4.w.ShouldBe(8);
Vector4d v5 = new Vector4d(5, 6, 7, 8, 9);
v5.x.ShouldBe(5); v5.y.ShouldBe(6); v5.z.ShouldBe(7); v5.w.ShouldBe(8);
Vector4d v6 = new Vector4d(v4);
v6.ShouldBe(v4);
}
示例12: GetVisibility
static public VISIBILTY GetVisibility(Vector4d[] frustumPlanes, Box3d box)
{
VISIBILTY v0 = GetVisibility(frustumPlanes[0], box);
if (v0 == VISIBILTY.INVISIBLE) {
return VISIBILTY.INVISIBLE;
}
VISIBILTY v1 = GetVisibility(frustumPlanes[1], box);
if (v1 == VISIBILTY.INVISIBLE) {
return VISIBILTY.INVISIBLE;
}
VISIBILTY v2 = GetVisibility(frustumPlanes[2], box);
if (v2 == VISIBILTY.INVISIBLE) {
return VISIBILTY.INVISIBLE;
}
VISIBILTY v3 = GetVisibility(frustumPlanes[3], box);
if (v3 == VISIBILTY.INVISIBLE) {
return VISIBILTY.INVISIBLE;
}
VISIBILTY v4 = GetVisibility(frustumPlanes[4], box);
if (v4 == VISIBILTY.INVISIBLE) {
return VISIBILTY.INVISIBLE;
}
if (v0 == VISIBILTY.FULLY && v1 == VISIBILTY.FULLY &&
v2 == VISIBILTY.FULLY && v3 == VISIBILTY.FULLY &&
v4 == VISIBILTY.FULLY)
{
return VISIBILTY.FULLY;
}
return VISIBILTY.PARTIALLY;
}
示例13: Unproject
/// <summary>
/// Projects a 2d screenspace coordinate to world coordinates.
/// </summary>
public static Vector3d Unproject(Vector3d Point, Matrix4d View, Matrix4d Proj)
{
Matrix4d ma = Matrix4d.Mult(View, Proj);
Matrix4d ima = Matrix4d.Invert(ma);
Vector4d coord = new Vector4d(Point.X, Point.Y, Point.Z, 1.0);
Vector4d res = Vector4d.Transform(coord, ima);
return new Vector3d(res.X / res.W, res.Y / res.W, res.Z / res.W);
}
示例14: TransformPlaneToIndices
private Vector4d TransformPlaneToIndices(Vector4d plane)
{
Vector4d newPlane = new Vector4d();
newPlane.x = plane.x * elementSize;
newPlane.y = plane.y * elementSize;
newPlane.z = plane.z * elementSize;
newPlane.w = plane.w + plane.x * lowerRightCorner.x + plane.y * lowerRightCorner.y + plane.z * lowerRightCorner.z;
return newPlane;
}
示例15: CalculateEquationOfPlane
private Vector4d CalculateEquationOfPlane(Vector3d pt1, Vector3d pt2, Vector3d pt3)
{
Vector3d p1p2 = pt2 - pt1;
Vector3d p1p3 = pt3 - pt1;
Vector3d tmp = Vector3d.Cross(p1p2, p1p3);
Vector4d result = new Vector4d(tmp.x, tmp.y, tmp.z);
result.w = -(pt1.x * result.x + pt1.y * result.y + pt1.z * result.z);
return result;
}