private void Update() { if (_geoObjectsNamesInScene == null) { InitNavigationDropdown(); } if (_lineRenderer != null && _lineRenderer.positionCount > 0) { if (_lineRenderer.positionCount == 1) { _userArrivedToPlace = true; _lineRenderer.positionCount--; displayDropdownMessage.text = "Вы успешно дошли до пункта назначения"; } else if (_lineRenderer.positionCount >= 2) { var positions = new Vector3[_lineRenderer.positionCount]; _lineRenderer.GetPositions(positions); var distanceToClosestPoint = Vector3.Distance(_mainCamera.transform.position, positions[1]); if (distanceToClosestPoint < _maxDistanceToClosestObjectInDirectionPoint) { var positionsList = positions.ToList(); positionsList.RemoveAt(0); _lineRenderer.positionCount--; _lineRenderer.SetPositions(positionsList.ToArray()); } } } }
void GenerateSquareVBO() { Vector3[] vecs = new Vector3[4]; uint[] inds = new uint[4]; Vector3[] texs = new Vector3[4]; Vector4[] cols = new Vector4[4]; Vector3[] nrms = new Vector3[4]; for (uint u = 0; u < 4; u++) { inds[u] = u; } for (int c = 0; c < 4; c++) { cols[c] = new Vector4(1, 1, 1, 1); nrms[c] = new Vector3(0, 0, 1); } vecs[0] = new Vector3(1, 0, 0); texs[0] = new Vector3(1, 0, 0); vecs[1] = new Vector3(1, 1, 0); texs[1] = new Vector3(1, 1, 0); vecs[2] = new Vector3(0, 0, 0); texs[2] = new Vector3(0, 0, 0); vecs[3] = new Vector3(0, 1, 0); texs[3] = new Vector3(0, 1, 0); Square = new VBO() { Vertices = vecs.ToList(), Indices = inds.ToList(), TexCoords = texs.ToList(), Colors = cols.ToList(), Normals = nrms.ToList() }; Square.GenerateVBO(); }
public void CalculateNormals() { Vector3[] normals = new Vector3[Vertices.Count]; Vector3[] verts = Vertices.Select(x => x.Position).ToArray(); int[] inds = Indices.ToArray(); for (int i = 0; i < Indices.Count; i += 3) { if (inds[i] < verts.Length && inds[i + 1] < verts.Length && inds[i + 2] < verts.Length) { Vector3 v1 = verts[inds[i]]; Vector3 v2 = verts[inds[i + 1]]; Vector3 v3 = verts[inds[i + 2]]; // The normal is the cross-product of two sides of the triangle normals[inds[i]] += Vector3.Cross(v2 - v1, v3 - v1); normals[inds[i + 1]] += Vector3.Cross(v2 - v1, v3 - v1); normals[inds[i + 2]] += Vector3.Cross(v2 - v1, v3 - v1); } } for (int i = 0; i < Vertices.Count; i++) { normals[i] = normals[i].Normalized(); } CalculatedNormals = normals.ToList(); }
void CreateMesh() { MeshFilter mf = gameObject.AddComponent <MeshFilter>(); MeshRenderer mr = gameObject.AddComponent <MeshRenderer>(); Material unityMat = Resources.Load("Material_WP") as Material; mr.material = unityMat; Mesh meshUnity = new Mesh(); Vector3[] vertices = new Vector3[4]; vertices[0] = new Vector3(0, -1, -1); vertices[1] = new Vector3(0, -1, 1); vertices[2] = new Vector3(0, 1, -1); vertices[3] = new Vector3(0, 1, 1); Vector3[] normals = new Vector3[4]; normals[0] = Vector3.forward; normals[1] = Vector3.forward; normals[2] = Vector3.forward; normals[3] = Vector3.forward; Vector3[] uvs = new Vector3[4]; uvs[0] = new Vector3(0, 0, 1); uvs[1] = new Vector3(1, 0, 1); uvs[2] = new Vector3(0, 1, 1); uvs[3] = new Vector3(1, 1, 1); int[] triangles = new int[] { 0, 2, 1, 1, 2, 3 }; meshUnity.vertices = vertices; meshUnity.normals = normals; meshUnity.triangles = triangles; meshUnity.SetUVs(0, uvs.ToList()); mf.mesh = meshUnity; }
void getDescriotionImageStartPos() { for (int i = 0; i < itemDate["config"]["DescriotionImageStartPos"].Count; i++) { for (int j = 0; j < itemDate["config"]["DescriotionImageStartPos"][i.ToString()].Count; j++) { for (int k = 0; k < itemDate["config"]["DescriotionImageStartPos"][i.ToString()][j.ToString()].Count; k++) { tempStartPosfloat.Add(float.Parse(itemDate["config"]["DescriotionImageStartPos"][i.ToString()][j.ToString()][k].ToString())); } Vector3 pos = new Vector3(tempStartPosfloat[0], tempStartPosfloat[1], 4.54f); tempStartPosVector3.Add(pos); tempStartPosfloat.Clear(); } Vector3[] thepos = new Vector3[tempStartPosVector3.Count]; tempStartPosVector3.CopyTo(thepos); ValueSheet.DescriptionImageID_PosList.Add(i, thepos.ToList()); tempStartPosVector3.Clear(); } //for (int i = 0; i < itemDate["config"]["DescriotionImageStartPos"].Count; i++) //{ // for (int j = 0; j < ValueSheet.DescriptionImageID_PosList[i].Count; j++) // { // Debug.Log("VIDEO ID : " + i.ToString() + "Image num : " + j.ToString() + "position" + ValueSheet.DescriptionImageID_PosList[i][j].ToString()); // } //} }
public void OrientedMinimumBoundingBox_WithIrregularPolygon() { var boxPoints = new Vector3[4]; GeometryUtils.OrientedMinimumBoundingBox2D(k_IrregularConvexPolygon, boxPoints); Random.InitState(0); DebugDraw.Polygon(k_IrregularConvexPolygon, Random.ColorHSV(), 2.5f); DebugDraw.Polygon(boxPoints, Color.black, 3f); var boxPointsList = boxPoints.ToList(); var pointsOnBounds = new List <Vector3>(); foreach (var vertex in k_IrregularConvexPolygon) { var onBounds = GeometryUtils.PointOnPolygonBoundsXZ(vertex, boxPointsList, k_PointOnBoundsSmallEpsilon); if (onBounds) { pointsOnBounds.Add(vertex); } var inPolygon = GeometryUtils.PointInPolygon(vertex, boxPointsList); Assert.True(onBounds || inPolygon); } Assert.GreaterOrEqual(pointsOnBounds.Count, 2); }
/// <summary> /// Create a customized Quad from a standart Unity Quad mesh /// </summary> /// <param name="rect">Position and size</param> /// <param name="customMaterial">Apply an user-made material</param> /// <returns></returns> public static GameObject Create(Rect rect, Material customMaterial = null) { GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad); Mesh mesh = (Mesh)Object.Instantiate(quad.GetComponent <MeshFilter>().sharedMesh); // Each Quad vertex have x: -0.5 and y: -0.5 units Vector2 adjust = (Vector2.one / 2); var vertices = new Vector3[] { rect.position - adjust, rect.position + rect.size - adjust, new Vector2(rect.position.x + rect.size.x, rect.position.y) - adjust, new Vector2(rect.position.x, rect.position.y + rect.size.y) - adjust }; mesh.SetVertices(vertices.ToList()); mesh.RecalculateBounds(); quad.GetComponent <MeshFilter>().mesh = mesh; // Remove collider // TODO: add collider that actually works Object.DestroyImmediate(quad.GetComponent <Collider>()); if (customMaterial != null) { var renderer = quad.GetComponent <MeshRenderer>(); renderer.material = customMaterial; } return(quad); }
/* * // Update is called once per frame * public void cableUpdate() { * * foreach (var cable in MapUtility.Cables) * { * //aggiorno e salvo la posizione del cavo solo se questo � maneggiato da Cip * if (cable.IsConnectedToCip) * { * var trail = cable.Instance.GetComponent<TrailRenderer>(); * var positions = new Vector3[trail.positionCount]; * trail.GetPositions(positions); * var positionsList = positions.ToList(); * if (positionsList.Count == 0) * { * positionsList.Add(target.transform.position); * } * else if (positionsList.Last() == target.transform.position) * { * //positionsList.Remove(target.transform.position); * } * else if (positionsList.Count() > 1) * { * if (positionsList[positionsList.Count() - 2] == target.transform.position) * { * positionsList.RemoveAt(positionsList.Count() - 1); * } * else if (positionsList.Last().x != target.transform.position.x && positionsList.Last().z != target.transform.position.z) * { * positionsList.Add(new Vector3(positionsList.Last().x, positionsList.Last().y, target.transform.position.z)); * positionsList.Add(new Vector3(target.transform.position.x, positionsList.Last().y, positionsList.Last().z)); * } * else if (positionsList.Last().x != target.transform.position.x) * { * positionsList.Add(new Vector3(target.transform.position.x, positionsList.Last().y, positionsList.Last().z)); * } * else if (positionsList.Last().z != target.transform.position.z) * { * positionsList.Add(new Vector3(positionsList.Last().x, positionsList.Last().y, target.transform.position.z)); * } * else * { * Debug.LogError("Something wrong with movement"); * } * } * else * { * if (positionsList.Last().x != target.transform.position.x && positionsList.Last().z != target.transform.position.z) * { * positionsList.Add(new Vector3(positionsList.Last().x, positionsList.Last().y, target.transform.position.z)); * positionsList.Add(new Vector3(target.transform.position.x, positionsList.Last().y, positionsList.Last().z)); * } * else if (positionsList.Last().x != target.transform.position.x) * { * positionsList.Add(new Vector3(target.transform.position.x, positionsList.Last().y, positionsList.Last().z)); * } * else if (positionsList.Last().z != target.transform.position.z) * { * positionsList.Add(new Vector3(positionsList.Last().x, positionsList.Last().y, target.transform.position.z)); * } * else * { * Debug.LogError("Something wrong with movement"); * } * } * trail.Clear(); * trail.AddPositions(positionsList.ToArray()); * //var positionas = new Vector3[trail.positionCount]; * //trail.GetPositions(positionas); * //foreach (var vec in positionas) * // //Debug.Log(vec); * /////Debug.Log(""); * } * } * } */ public bool isLastMove(Vector3 move) { foreach (var cable in MapUtility.Cables) { // if (cable.IsConnectedToCip) { var trail = cable.Instance.GetComponent <TrailRenderer>(); var positions = new Vector3[trail.positionCount]; trail.GetPositions(positions); var positionsList = positions.ToList(); if (trail.positionCount > 1) { if (positionsList.ElementAt(trail.positionCount - 2).x == move.x && (positionsList.ElementAt(trail.positionCount - 2).z == move.z)) { return(true); } else { return(false); } } else { return(false); } } } return(false); }
public void addPoints(List <Vector3> newPoints) { foreach (var cable in MapUtility.Cables) { //aggiorno e salvo la posizione del cavo solo se questo � maneggiato da Cip if (cable.IsConnectedToCip) { var trail = cable.Instance.GetComponent <TrailRenderer>(); var oldPoints = new Vector3[trail.positionCount]; trail.GetPositions(oldPoints); var oldPointsList = oldPoints.ToList(); foreach (var point in newPoints) { if (trail.positionCount > 1) { if (point == oldPointsList[trail.positionCount - 2]) { oldPointsList.RemoveAt(trail.positionCount); } else { oldPointsList.Add(point); } } else { oldPointsList.Add(point); } } trail.Clear(); trail.AddPositions(oldPointsList.ToArray()); } } }
void Start() { // Get the points. var lineRenderer = GetComponent <LineRenderer>(); //lineRenderer.positionCount = 100; //for (int i = 0; i < 100; i++) //{ // lineRenderer.SetPosition(i, new Vector3(0, Random.Range(0, 5f), transform.position.z + i)); //} int pointsBefore = lineRenderer.positionCount; var points = new Vector3[pointsBefore]; lineRenderer.GetPositions(points); // Simplify. var simplifiedPoints = new List <Vector3>(); LineUtility.Simplify(points.ToList(), tolerance, simplifiedPoints); // Assign back to the line renderer. lineRenderer.positionCount = simplifiedPoints.Count; lineRenderer.SetPositions(simplifiedPoints.ToArray()); Debug.Log("Line reduced from " + pointsBefore + " to " + lineRenderer.positionCount); }
List <Vector3> GetTrajectoryPointsReflect(Vector3 startPosition, Vector3 initialVelocity) { Vector3[] segments = new Vector3[segmentsCount]; segments[0] = startPosition; Vector3 velocity = initialVelocity; var gravityScale = objectPrefab.GetComponent <Rigidbody2D>().gravityScale; for (int i = 1; i < segmentsCount; i++) { float segTime = (velocity.sqrMagnitude != 0) ? segmentLength / velocity.magnitude : 0; RaycastHit2D hit = Physics2D.CircleCast(segments[i - 1], 0.5f, velocity, segmentLength); if (hit.collider != null && (Vector2)segments[i - 1] != hit.centroid) { var hitSegTime = hit.distance / velocity.magnitude; segments[i] = segments[i - 1] + velocity * hitSegTime + Physics.gravity * gravityScale * hitSegTime * hitSegTime / 2; velocity += Physics.gravity * gravityScale * hitSegTime; velocity = Vector2.Reflect(velocity, hit.normal); } else { segments[i] = segments[i - 1] + velocity * segTime + Physics.gravity * gravityScale * segTime * segTime / 2; velocity += Physics.gravity * gravityScale * segTime; } } return(segments.ToList()); }
/// <summary> /// 指定したメッシュのすべてのシェイプキーを取得します。 /// </summary> /// <param name="mesh"></param> /// <param name="useShapeKeyNormalsAndTangents"></param> /// <returns></returns> internal static IEnumerable <BlendShape> GetAllShapeKeys(Mesh mesh, bool useShapeKeyNormalsAndTangents) { var shapeKeys = new List <BlendShape>(); var meshVertexCount = mesh.vertexCount; for (var i = 0; i < mesh.blendShapeCount; i++) { var deltaVertices = new Vector3[meshVertexCount]; var deltaNormals = new Vector3[meshVertexCount]; var deltaTangents = new Vector3[meshVertexCount]; mesh.GetBlendShapeFrameVertices( i, 0, deltaVertices, useShapeKeyNormalsAndTangents ? deltaNormals : null, useShapeKeyNormalsAndTangents ? deltaTangents : null ); shapeKeys.Add(new BlendShape(name: mesh.GetBlendShapeName(i)) { Positions = deltaVertices.ToList(), Normals = deltaNormals.ToList(), Tangents = deltaTangents.ToList(), }); } return(shapeKeys); }
public Mesh GetBasicMesh() { //NOTE: unoptimized var ret = new Mesh(); var vertices = new Vector3[4 * tiles.Length]; var triangles = new int[6 * tiles.Length]; var offset = new Vector3(); var count = 0; for (var i = 0; i < tiles.GetLength(1); ++i) { for (var j = 0; j < tiles.GetLength(0); ++j) { var k = count * 4; vertices[k] = (Quaternion.Euler(0, 0, 45) * Vector3.up) / (float)Math.Sqrt(2) + offset; vertices[k + 1] = (Quaternion.Euler(0, 0, 135) * Vector3.up) / (float)Math.Sqrt(2) + offset; vertices[k + 2] = (Quaternion.Euler(0, 0, 225) * Vector3.up) / (float)Math.Sqrt(2) + offset; vertices[k + 3] = (Quaternion.Euler(0, 0, 315) * Vector3.up) / (float)Math.Sqrt(2) + offset; offset += new Vector3(1f, 0); triangles[count * 6] = k; triangles[count * 6 + 1] = k + 1; triangles[count * 6 + 2] = k + 2; triangles[count * 6 + 3] = k + 2; triangles[count * 6 + 4] = k + 3; triangles[count * 6 + 5] = k; ++count; } offset += new Vector3(-tiles.GetLength(0), 1f); } ret.SetVertices(vertices.ToList()); ret.SetTriangles(triangles, 0); return(ret); }
/// <summary> /// Loads in positions saved on file /// </summary> private static void LoadPositions() { var sandboxConfig = EloBuddy.Sandbox.SandboxConfig.DataDirectory + @"\PandaTeemoReborn\"; var xFile = sandboxConfig + Game.MapId + @"\" + "xFile" + ".txt"; var yFile = sandboxConfig + Game.MapId + @"\" + "yFile" + ".txt"; var zFile = sandboxConfig + Game.MapId + @"\" + "zFile" + ".txt"; if (!File.Exists(xFile) || !File.Exists(yFile) || !File.Exists(zFile)) { SavePositions(); } string[] xPositions = null; string[] yPositions = null; string[] zPositions = null; if (File.Exists(xFile) && File.Exists(yFile) && File.Exists(zFile)) { xPositions = File.ReadAllLines(xFile); yPositions = File.ReadAllLines(yFile); zPositions = File.ReadAllLines(zFile); } if (xPositions == null) { return; } var xFloat = new float[xPositions.Length]; var yFloat = new float[yPositions.Length]; var zFloat = new float[zPositions.Length]; for (var i = 0; i < xPositions.Length; i++) { var x = xPositions[i]; float.TryParse(x, out xFloat[i]); } for (var i = 0; i < yPositions.Length; i++) { var y = yPositions[i]; float.TryParse(y, out yFloat[i]); } for (var i = 0; i < zPositions.Length; i++) { var z = zPositions[i]; float.TryParse(z, out zFloat[i]); } var positions = new Vector3[xFloat.Length]; for (var i = 0; i < positions.Length; i++) { positions[i] = new Vector3(xFloat[i], yFloat[i], zFloat[i]); } AddShroomLocations(positions.ToList()); AssignPosition(); }
List <Vector3> GetPath() { Vector3[] positions = new Vector3[LR.positionCount]; LR.GetPositions(positions); List <Vector3> PositionList = positions.ToList(); return(PositionList); }
public static List <Vector3> GetCopy(List <Vector3> pSet) { Vector3[] setAorig = new Vector3[pSet.Count]; pSet.CopyTo(setAorig); List <Vector3> setAorigV = setAorig.ToList(); return(setAorigV); }
public override void Run(VectorTileFeature feature, MeshData md) { var count = md.Vertices.Count; var tempList = new Vector3[count * 2]; var uvList = new Vector2[count * 2]; Vector3 lastPos = Vector3.zero; Vector3 norm; var lastUv = 0f; for (int i = 1; i < count; i++) { var p1 = md.Vertices[i - 1]; var p2 = md.Vertices[i]; var p3 = p2; if (i + 1 < md.Vertices.Count) { p3 = md.Vertices[i + 1]; } if (lastPos == Vector3.zero) { lastPos = Vector3.Lerp(p1, p2, 0f); norm = GetNormal(p1, lastPos, p2) * Width; //road width tempList[0] = (lastPos + norm); tempList[count * 2 - 1] = (lastPos - norm); uvList[0] = new Vector2(0, 0); uvList[count * 2 - 1] = new Vector2(1, 0); } var dist = Vector3.Distance(lastPos, p2); lastUv += dist; lastPos = p2; //lastPos = Vector3.Lerp(p1, p2, 1f); norm = GetNormal(p1, lastPos, p3) * Width; tempList[i] = (lastPos + norm); tempList[2 * count - 1 - i] = (lastPos - norm); uvList[i] = new Vector2(0, lastUv); uvList[2 * count - 1 - i] = new Vector2(1, lastUv); } md.Vertices = tempList.ToList(); md.UV[0].AddRange(uvList); var lineTri = new List <int>(); var n = md.Vertices.Count / 2; for (int i = 0; i < n - 1; i++) { lineTri.Add(i); lineTri.Add(i + 1); lineTri.Add(2 * n - 1 - i); lineTri.Add(i + 1); lineTri.Add(2 * n - i - 2); lineTri.Add(2 * n - i - 1); } md.Triangles.Add(lineTri); }
public void CreateMeshCollider() { PolygonCollider2D polygonCollider = GetComponent <PolygonCollider2D>(); if (polygonCollider == null) { Debug.LogError("You need a polygon collider on this game object"); return; } GameObject parentGO = new GameObject(MESH_NAME); parentGO.layer = gameObject.layer; Transform parent = parentGO.transform; parent.parent = transform; parent.localPosition = Vector3.zero; parent.localScale = Vector3.one; MeshFilter meshFilter = parentGO.AddComponent <MeshFilter>(); int polyLength = polygonCollider.points.Length; Vector3[] vertices = new Vector3[polyLength * 2]; int[] triangles = new int[polyLength * 6 + (polyLength - 2) * 3 * 2]; for (int i = 0; i < polyLength; i++) { vertices[i * 2] = new Vector3(polygonCollider.points[i].x, polygonCollider.points[i].y, zThickness * 0.5f); vertices[i * 2 + 1] = new Vector3(polygonCollider.points[i].x, polygonCollider.points[i].y, -zThickness * 0.5f); triangles[i * 6] = i * 2; triangles[i * 6 + 1] = i * 2 + 1; triangles[i * 6 + 2] = (i * 2 + 2) % (polyLength * 2); triangles[i * 6 + 3] = (i * 2 + 2) % (polyLength * 2); triangles[i * 6 + 4] = i * 2 + 1; triangles[i * 6 + 5] = (i * 2 + 3) % (polyLength * 2); } for (int i = 0; i < polyLength - 2; i++) { triangles[polyLength * 6 + i * 6] = 0; triangles[polyLength * 6 + i * 6 + 1] = (i + 1) * 2; triangles[polyLength * 6 + i * 6 + 2] = (i + 2) * 2; triangles[polyLength * 6 + i * 6 + 3] = 1; triangles[polyLength * 6 + i * 6 + 4] = (i + 2) * 2 + 1; triangles[polyLength * 6 + i * 6 + 5] = (i + 1) * 2 + 1; } Debug.Log(string.Format("points : {0} ; triangles : {1}", vertices.ToList().ListToString(), triangles.ToList().ListToString())); meshFilter.mesh = new Mesh(); meshFilter.mesh.vertices = vertices; meshFilter.mesh.triangles = triangles; meshFilter.mesh.RecalculateBounds(); meshFilter.mesh.RecalculateNormals(); MeshCollider mc = parentGO.AddComponent <MeshCollider>(); mc.convex = true; mc.isTrigger = polygonCollider.isTrigger; }
List <Vector3> GetTrajectoryPoints(Vector3 startPosition, Vector3 initialVelocity) { Vector3[] segments = new Vector3[segmentsCount]; segments[0] = startPosition; Vector3 velocity = initialVelocity; var collider = objectPrefab.GetComponent <Collider>(); var rigidbody = objectPrefab.GetComponent <Rigidbody>(); var drag = rigidbody.drag; var gravityScale = rigidbody.useGravity ? 1 : 0; var bounciness = collider.material.bounciness; var bounceCombine = collider.material.bounceCombine; for (int i = 1; i < segmentsCount; i++) { bool hasHit = Physics.SphereCast(segments[i - 1], 0.5f, velocity, out RaycastHit hit, segmentLength); if (hasHit) { var hitSegTime = hit.distance / velocity.magnitude; segments[i] = segments[i - 1] + velocity * hitSegTime + Physics.gravity * gravityScale * hitSegTime * hitSegTime / 2; velocity += Physics.gravity * gravityScale * hitSegTime; var normalVelocity = Vector3.Project(velocity, hit.normal); var tangentVelocity = velocity - normalVelocity; var otherBounciness = hit.collider.material.bounciness; var otherBounceCombine = hit.collider.material.bounceCombine; var hitBounceCombine = (PhysicMaterialCombine)Mathf.Max((int)bounceCombine, (int)otherBounceCombine); var hitBounciness = hitBounceCombine == PhysicMaterialCombine.Average ? (bounciness + otherBounciness) / 2 : hitBounceCombine == PhysicMaterialCombine.Maximum ? Mathf.Max(bounciness, otherBounciness) : hitBounceCombine == PhysicMaterialCombine.Minimum ? Mathf.Min(bounciness, otherBounciness) : bounciness * otherBounciness; velocity = tangentVelocity - normalVelocity * hitBounciness; velocity *= Mathf.Clamp01(1f - drag * hitSegTime); } else { float segTime = (velocity.sqrMagnitude != 0) ? segmentLength / velocity.magnitude : 0; segments[i] = segments[i - 1] + velocity * segTime + Physics.gravity * gravityScale * segTime * segTime / 2; velocity += Physics.gravity * gravityScale * segTime; velocity *= Mathf.Clamp01(1f - drag * segTime); } } return(segments.ToList()); }
public void When_DrawHandLine_Work() { LineRenderer lineRenderer = GenerateLineRenderer(50); List <Vector3> handJoint = GenerateFullHandJoint(1); _handVizualiser.DrawHandLine(handJoint, lineRenderer); Vector3[] actualPositions = new Vector3[50]; lineRenderer.GetPositions(actualPositions); List <Vector3> expectedPositions = ExpectedLineRendererPositions(1); Assert.AreEqual(expectedPositions, actualPositions.ToList()); }
private List <Vector3> buildNormals() { Vector3[] normals = new Vector3[x_dim * z_dim]; for (int i = 0; i < x_dim; i++) { for (int j = 0; j < z_dim; j++) { normals[i * z_dim + j] = new Vector3(0.0f, 1.0f, 0.0f); } } return(normals.ToList()); }
/// <summary> /// Generates a line. /// </summary> void GenerateLineVBO() { Vector3[] vecs = new Vector3[2]; uint[] inds = new uint[2]; Vector3[] norms = new Vector3[2]; Vector3[] texs = new Vector3[2]; Vector4[] cols = new Vector4[2]; Vector3[] tangs = new Vector3[2]; for (uint u = 0; u < 2; u++) { inds[u] = u; tangs[u] = new Vector3(1f, 0f, 0f); } for (int n = 0; n < 2; n++) { norms[n] = new Vector3(0, 0, 1); } for (int c = 0; c < 2; c++) { cols[c] = new Vector4(1, 1, 1, 1); } Vector4[] BoneIDs = new Vector4[2]; Vector4[] BoneWeights = new Vector4[2]; Vector4[] BoneIDs2 = new Vector4[2]; Vector4[] BoneWeights2 = new Vector4[2]; for (int n = 0; n < 2; n++) { BoneIDs[n] = new Vector4(0, 0, 0, 0); BoneWeights[n] = new Vector4(0, 0, 0, 0); BoneIDs2[n] = new Vector4(0, 0, 0, 0); BoneWeights2[n] = new Vector4(0, 0, 0, 0); } vecs[0] = new Vector3(0, 0, 0); texs[0] = new Vector3(0, 0, 0); vecs[1] = new Vector3(1, 0, 0); texs[1] = new Vector3(1, 0, 0); Line = new VBO() { Vertices = vecs.ToList(), Indices = inds.ToList(), Normals = norms.ToList(), Tangents = tangs.ToList(), TexCoords = texs.ToList(), Colors = cols.ToList(), BoneIDs = BoneIDs.ToList(), BoneWeights = BoneWeights.ToList(), BoneIDs2 = BoneIDs2.ToList(), BoneWeights2 = BoneWeights2.ToList() }; Line.GenerateVBO(); }
private float CalculateTriangles(SerializedProperty originProp, SerializedProperty vertexesProp, SerializedProperty trianglesProp, SerializedProperty triangleAreasProp) { Vector3[] vertexes = new Vector3[vertexesProp.arraySize]; float area = 0; for (int i = 0; i < vertexesProp.arraySize; ++i) { vertexes[i] = vertexesProp.GetArrayElementAtIndex(i).vector3Value; } originProp.vector3Value = PolygonAreaExtend.GetCentroid(vertexes.ToList()); Undo.RecordObject(((MonoBehaviour)target).gameObject, "Position"); ((MonoBehaviour)target).transform.position = originProp.vector3Value; PolygonHelper.Triangulate(vertexes, -GetPlane(originProp.vector3Value).normal, out var triangles); if (triangles.Count != trianglesProp.arraySize) { trianglesProp.ClearArray(); for (int i = 0; i < triangles.Count; ++i) { trianglesProp.InsertArrayElementAtIndex(i); } } if (triangles.Count != triangleAreasProp.arraySize) { triangleAreasProp.ClearArray(); for (int i = 0; i < triangles.Count; ++i) { triangleAreasProp.InsertArrayElementAtIndex(i); } } for (int i = 0; i < triangles.Count; ++i) { var prop = trianglesProp.GetArrayElementAtIndex(i); var tri = triangles[i]; prop.FindPropertyRelative("x").vector3Value = tri.x; prop.FindPropertyRelative("y").vector3Value = tri.y; prop.FindPropertyRelative("z").vector3Value = tri.z; var areaProp = triangleAreasProp.GetArrayElementAtIndex(i); areaProp.floatValue = tri.CalcTriangleArea(); area += areaProp.floatValue; } return(area); }
public void When_ShowHand_Work_OnLineRenderer() { LineRenderer lineRenderer = GenerateLineRenderer(50); GameObject handJointObject = Resources.Load <GameObject>("Prefabs/Hand_Joint"); _handVizualiser.InitVizualisation("Full_Hand_Positions_Mock"); _handVizualiser.ShowHand(lineRenderer, handJointObject); Vector3[] actualPositions = new Vector3[50]; lineRenderer.GetPositions(actualPositions); List <Vector3> expectedPositions = ExpectedLineRendererPositions(3); Assert.AreEqual(expectedPositions, actualPositions.ToList()); }
/// <summary> /// Generates a square. /// </summary> void GenerateSquareVBO() { Vector3[] vecs = new Vector3[6]; uint[] inds = new uint[6]; Vector3[] norms = new Vector3[6]; Vector3[] texs = new Vector3[6]; Vector4[] cols = new Vector4[6]; Vector4[] BoneIDs = new Vector4[6]; Vector4[] BoneWeights = new Vector4[6]; Vector4[] BoneIDs2 = new Vector4[6]; Vector4[] BoneWeights2 = new Vector4[6]; Vector3[] tangs = new Vector3[6]; for (uint n = 0; n < 6; n++) { inds[n] = n; tangs[n] = new Vector3(1, 0, 0); norms[n] = new Vector3(0, 0, 1); cols[n] = new Vector4(1, 1, 1, 1); BoneIDs[n] = new Vector4(0, 0, 0, 0); BoneWeights[n] = new Vector4(0, 0, 0, 0); BoneIDs2[n] = new Vector4(0, 0, 0, 0); BoneWeights2[n] = new Vector4(0, 0, 0, 0); } vecs[0] = new Vector3(1, 0, 0); texs[0] = new Vector3(1, 0, 0); vecs[1] = new Vector3(1, 1, 0); texs[1] = new Vector3(1, 1, 0); vecs[2] = new Vector3(0, 1, 0); texs[2] = new Vector3(0, 1, 0); vecs[3] = new Vector3(1, 0, 0); texs[3] = new Vector3(1, 0, 0); vecs[4] = new Vector3(0, 1, 0); texs[4] = new Vector3(0, 1, 0); vecs[5] = new Vector3(0, 0, 0); texs[5] = new Vector3(0, 0, 0); Square = new VBO() { Vertices = vecs.ToList(), Indices = inds.ToList(), Normals = norms.ToList(), Tangents = tangs.ToList(), TexCoords = texs.ToList(), Colors = cols.ToList(), BoneIDs = BoneIDs.ToList(), BoneWeights = BoneWeights.ToList(), BoneIDs2 = BoneIDs2.ToList(), BoneWeights2 = BoneWeights2.ToList() }; Square.GenerateVBO(); }
public static List <Vector3> RotateAround(this List <Vector3> points, Vector3 pivot, Quaternion angle) { // This is likely dumb as f**k Vector3[] transformedPointsArray = new Vector3[] { }; points.CopyTo(transformedPointsArray); List <Vector3> transformedPoints = transformedPointsArray.ToList <Vector3>(); for (int i = 0; i < transformedPoints.Count; i++) { Vector3 direction = transformedPoints[i] - pivot; direction = angle * direction; transformedPoints[i] = direction + pivot; } return(transformedPoints); }
private void AlignNormals() { using (var t = new ScopeTimer("Mesh.AlignNormals")) { var alignedNormals = new Vector3[Vertices.Count]; foreach (var tri in Triangles) { UpdateNormal(ref alignedNormals, (int)tri.I1, (int)tri.In1); UpdateNormal(ref alignedNormals, (int)tri.I2, (int)tri.In2); UpdateNormal(ref alignedNormals, (int)tri.I3, (int)tri.In3); } Normals = alignedNormals.ToList(); } }
List <Vector3> GetTrajectoryPointsLinear(Vector3 startPosition, Vector3 initialVelocity) { Vector3[] segments = new Vector3[segmentsCount]; segments[0] = startPosition; Vector3 velocity = initialVelocity; for (int i = 1; i < segmentsCount; i++) { float segTime = (velocity.sqrMagnitude != 0) ? segmentLength / velocity.magnitude : 0; segments[i] = segments[i - 1] + velocity * segTime; } return(segments.ToList()); }
public void removeLastPoint() { foreach (var cable in MapUtility.Cables) { //aggiorno e salvo la posizione del cavo solo se questo � maneggiato da Cip if (cable.IsConnectedToCip) { var trail = cable.Instance.GetComponent <TrailRenderer>(); var oldPoints = new Vector3[trail.positionCount]; trail.GetPositions(oldPoints); var oldPointsList = oldPoints.ToList(); oldPointsList.RemoveAt(trail.positionCount - 1); trail.Clear(); trail.AddPositions(oldPointsList.ToArray()); } } }
/// <summary> /// 获取曲线上面的所有路径点 /// </summary> /// <returns>The list.</returns> /// <param name="wayPoints">路点列表</param> /// <param name="pointSize">两个点之间的节点数量</param> public static List <Vector3> GetPoints(List <Vector3> wayPoints) { Vector3[] controlPointList = PathControlPointGenerator(wayPoints.ToArray()); int smoothAmount = 0; // wayPoints.Length * pointSize; // 根据 路点 间的距离计算所需 路径点 的数量 for (int i = 0, length = wayPoints.Count - 1; i < length; i++) { smoothAmount += (int)Vector3.Distance(wayPoints[i + 1], wayPoints[i]) / 4; } Vector3[] pointArr = new Vector3[smoothAmount]; for (int index = 1; index <= smoothAmount; index++) { pointArr[index - 1] = Interp(controlPointList, (float)index / smoothAmount); } return(pointArr.ToList()); }
void GenerateLineVBO() { Vector3[] vecs = new Vector3[2]; uint[] inds = new uint[2]; Vector3[] norms = new Vector3[2]; Vector3[] texs = new Vector3[2]; Vector4[] cols = new Vector4[2]; for (uint u = 0; u < 2; u++) { inds[u] = u; } for (int n = 0; n < 2; n++) { norms[n] = new Vector3(0, 0, 1); } for (int c = 0; c < 2; c++) { cols[c] = new Vector4(1, 1, 1, 1); } Vector4[] BoneIDs = new Vector4[2]; Vector4[] BoneWeights = new Vector4[2]; Vector4[] BoneIDs2 = new Vector4[2]; Vector4[] BoneWeights2 = new Vector4[2]; for (int n = 0; n < 2; n++) { BoneIDs[n] = new Vector4(0, 0, 0, 0); BoneWeights[n] = new Vector4(0, 0, 0, 0); BoneIDs2[n] = new Vector4(0, 0, 0, 0); BoneWeights2[n] = new Vector4(0, 0, 0, 0); } vecs[0] = new Vector3(0, 0, 0); texs[0] = new Vector3(0, 0, 0); vecs[1] = new Vector3(1, 0, 0); texs[1] = new Vector3(1, 0, 0); Line = new VBO(); Line.Vertices = vecs.ToList(); Line.Indices = inds.ToList(); Line.Normals = norms.ToList(); Line.TexCoords = texs.ToList(); Line.Colors = cols.ToList(); Line.BoneIDs = BoneIDs.ToList(); Line.BoneWeights = BoneWeights.ToList(); Line.BoneIDs2 = BoneIDs2.ToList(); Line.BoneWeights2 = BoneWeights2.ToList(); Line.GenerateVBO(); }
void GenerateSquareVBO() { Vector3[] vecs = new Vector3[6]; uint[] inds = new uint[6]; Vector3[] norms = new Vector3[6]; Vector3[] texs = new Vector3[6]; Vector4[] cols = new Vector4[6]; Vector4[] BoneIDs = new Vector4[6]; Vector4[] BoneWeights = new Vector4[6]; Vector4[] BoneIDs2 = new Vector4[6]; Vector4[] BoneWeights2 = new Vector4[6]; for (uint n = 0; n < 6; n++) { inds[n] = n; norms[n] = new Vector3(0, 0, 1); cols[n] = new Vector4(1, 1, 1, 1); BoneIDs[n] = new Vector4(0, 0, 0, 0); BoneWeights[n] = new Vector4(0, 0, 0, 0); BoneIDs2[n] = new Vector4(0, 0, 0, 0); BoneWeights2[n] = new Vector4(0, 0, 0, 0); } vecs[0] = new Vector3(1, 0, 0); texs[0] = new Vector3(1, 0, 0); vecs[1] = new Vector3(1, 1, 0); texs[1] = new Vector3(1, 1, 0); vecs[2] = new Vector3(0, 1, 0); texs[2] = new Vector3(0, 1, 0); vecs[3] = new Vector3(1, 0, 0); texs[3] = new Vector3(1, 0, 0); vecs[4] = new Vector3(0, 1, 0); texs[4] = new Vector3(0, 1, 0); vecs[5] = new Vector3(0, 0, 0); texs[5] = new Vector3(0, 0, 0); Square = new VBO(); Square.Vertices = vecs.ToList(); Square.Indices = inds.ToList(); Square.Normals = norms.ToList(); Square.TexCoords = texs.ToList(); Square.Colors = cols.ToList(); Square.BoneIDs = BoneIDs.ToList(); Square.BoneWeights = BoneWeights.ToList(); Square.BoneIDs2 = BoneIDs2.ToList(); Square.BoneWeights2 = BoneWeights2.ToList(); Square.GenerateVBO(); }
/// <summary> /// Changes terrain geometry in realtime based on new path. Path can be obtained from <see cref="GetPath()"/> method /// </summary> /// <param name="newPath">Array of new terrain path points</param> public void ApplyDeform(Vector3[] newPath, bool applySmoothly = false) { if (!RealtimeDeformEnabled) return; Mesh pathMesh = gameObject.GetComponent<MeshFilter>().mesh; if (FixSides) { newPath[0].y = LeftFixedPoint; newPath[newPath.Length - 1].y = RightFixedPoint; } #region Generate vertices Vector3[] vertices = GetVertsPos(); Vector3[] backupVertices = null; if (applySmoothly) { DesiredVertices = newPath.ToList<Vector3>(); backupVertices = vertices; } else { int pathIndex = 0; for (int i = 0; i < vertices.Length; i += 2) { if (newPath[pathIndex].y < 0) newPath[pathIndex].y = 0; if (newPath[pathIndex].y > Height) newPath[pathIndex].y = Height; vertices[i] = newPath[pathIndex]; pathIndex++; } pathMesh.vertices = vertices; } #endregion if (!applySmoothly && RealtimeDeformUpdateUv) { #region Generate UV Vector2[] uv = new Vector2[vertices.Length]; for (int i = 0; i < uv.Length; i += 2) { uv[i] = new Vector2((float)i / (uv.Length - 2) * MainTextureSize, (vertices[i].y / Height) * ((float)Height / Width) * MainTextureSize); uv[i + 1] = new Vector2((float)i / (uv.Length - 2) * MainTextureSize, (vertices[i + 1].y / Height) * ((float)Height / Width) * MainTextureSize); } pathMesh.uv = uv; #endregion } pathMesh.RecalculateBounds(); UpdateCap(false); if (RealtimeDeformUpdateColliders) { UpdateCollider2D(); UpdateCollider3D(false); } if (applySmoothly && backupVertices != null) { pathMesh.vertices = vertices; pathMesh.RecalculateBounds(); UpdateCap(false); } }
void setVertices(Vector3[] vertices) { TargetMesh.SetVertices(vertices.ToList()); }
void GenerateBoxVBO() { // TODO: Optimize? Vector3[] vecs = new Vector3[24]; uint[] inds = new uint[24]; Vector3[] norms = new Vector3[24]; Vector3[] texs = new Vector3[24]; Vector4[] cols = new Vector4[24]; for (uint u = 0; u < 24; u++) { inds[u] = u; } for (int t = 0; t < 24; t++) { texs[t] = new Vector3(0, 0, 0); } for (int n = 0; n < 24; n++) { norms[n] = new Vector3(0, 0, 1); // TODO: Accurate normals somehow? Do lines even have normals? } for (int c = 0; c < 24; c++) { cols[c] = new Vector4(1, 1, 1, 1); } Vector4[] BoneIDs = new Vector4[24]; Vector4[] BoneWeights = new Vector4[24]; Vector4[] BoneIDs2 = new Vector4[24]; Vector4[] BoneWeights2 = new Vector4[24]; for (int n = 0; n < 24; n++) { BoneIDs[n] = new Vector4(0, 0, 0, 0); BoneWeights[n] = new Vector4(0, 0, 0, 0); BoneIDs2[n] = new Vector4(0, 0, 0, 0); BoneWeights2[n] = new Vector4(0, 0, 0, 0); } int i = 0; int zero = -1; // Ssh. vecs[i] = new Vector3(zero, zero, zero); i++; vecs[i] = new Vector3(1, zero, zero); i++; vecs[i] = new Vector3(1, zero, zero); i++; vecs[i] = new Vector3(1, 1, zero); i++; vecs[i] = new Vector3(1, 1, zero); i++; vecs[i] = new Vector3(zero, 1, zero); i++; vecs[i] = new Vector3(zero, 1, zero); i++; vecs[i] = new Vector3(zero, zero, zero); i++; vecs[i] = new Vector3(zero, zero, 1); i++; vecs[i] = new Vector3(1, zero, 1); i++; vecs[i] = new Vector3(1, zero, 1); i++; vecs[i] = new Vector3(1, 1, 1); i++; vecs[i] = new Vector3(1, 1, 1); i++; vecs[i] = new Vector3(zero, 1, 1); i++; vecs[i] = new Vector3(zero, 1, 1); i++; vecs[i] = new Vector3(zero, zero, 1); i++; vecs[i] = new Vector3(zero, zero, zero); i++; vecs[i] = new Vector3(zero, zero, 1); i++; vecs[i] = new Vector3(1, zero, zero); i++; vecs[i] = new Vector3(1, zero, 1); i++; vecs[i] = new Vector3(1, 1, zero); i++; vecs[i] = new Vector3(1, 1, 1); i++; vecs[i] = new Vector3(zero, 1, zero); i++; vecs[i] = new Vector3(zero, 1, 1); i++; Box = new VBO(); Box.Vertices = vecs.ToList(); Box.Indices = inds.ToList(); Box.Normals = norms.ToList(); Box.TexCoords = texs.ToList(); Box.Colors = cols.ToList(); Box.BoneIDs = BoneIDs.ToList(); Box.BoneWeights = BoneWeights.ToList(); Box.BoneIDs2 = BoneIDs2.ToList(); Box.BoneWeights2 = BoneWeights2.ToList(); Box.GenerateVBO(); }