public void CreateVertexBuffer(Device device) { if (VertexBuffer != null) { VertexBuffer.Dispose(); } var count = 0; count = Animated ? SkinnedVertices.Count : Vertices.Count; var desc = new BufferDescription() { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, Usage = ResourceUsage.Immutable, SizeInBytes = VertexStride * count }; //Create Vertex buffer VertexBuffer = Animated ? new Buffer(device, DataStream.Create(SkinnedVertices.ToArray(), false, false), desc) : new Buffer(device, DataStream.Create(Vertices.ToArray(), false, false), desc); }
private void UpdateVertexTransform() { if (meshVertexTransform != null) { SkinnedVertices.SetTransform(meshVertexTransform, bakedMesh, attachedVertexBones, attachedVertexIndex); } }
public void Attach() { bakedMesh = new Mesh(); skinnedMesh.BakeMesh(bakedMesh); attachedVertexIndex = bakedMesh.vertices.IndexOfMin(v => Vector3.SqrMagnitude(skinnedMesh.transform.TransformPoint(v) - transform.position)); //attachedVertexPosition = skinnedMesh.transform.TransformPoint(mesh.vertices[attachedVertexIndex]); attachedVertexBones = SkinnedVertices.VertexBones(skinnedMesh, attachedVertexIndex); DeleteVertexTransform(); CreateVertexTransform(); #if UNITY_EDITOR EditorUtility.SetDirty(this); #endif //Debug.LogFormat("closestVertexIndex = {0}", attachedVertexIndex); //var localAttachedVertexPosition = //transform.position = ; }
/// <summary> /// Clear all the things /// </summary> private void ResetMesh() { IsCreated = false; IsLoaded = false; if (Animator != null) { Animator.Reset(); Animator = null; } if (SkinnedVertices != null) { SkinnedVertices.Clear(); } if (Vertices != null) { Vertices.Clear(); } }