private void generate_ui_mesh(Vector2[] positions) { GD.Print("Generate new UI mesh", positions); var st = new SurfaceTool(); st.Begin(Mesh.PrimitiveType.Triangles); foreach (var p in positions) { GD.Print(p); _plane(st, p.x, p.y); } st.Index(); st.GenerateNormals(); st.GenerateTangents(); var mesh = st.Commit(); mesh.SurfaceSetMaterial(0, mouse_preview.GetSurfaceMaterial(0)); GetNode <MeshInstance>("MeshInstance3").Mesh = mesh; }
private void generate_mesh() { GD.Print("Update info mesh"); var tmpPoints = new List <Vector2>(); var st = new SurfaceTool(); st.Begin(Mesh.PrimitiveType.Triangles); Vector2 _test = (Vector2)start_pos - (Vector2)end_pos; if (Mathf.Abs(_test.x) > Mathf.Abs(_test.y)) { _test.y = 0; } else { _test.x = 0; } int size = (int)_test.Length(); if (_test.x != 0 && _test.y == 0) { GD.Print("X"); for (int i = 0; i < size + 1; i++) { if (_test.x < 0) { _plane(st, ((Vector2)start_pos).x + i, ((Vector2)start_pos).y); tmpPoints.Add(((Vector2)start_pos) + new Vector2(i, 0)); } else { _plane(st, ((Vector2)start_pos).x - i, ((Vector2)start_pos).y); tmpPoints.Add(((Vector2)start_pos) + new Vector2(-i, 0)); } } } else if (_test.y != 0 && _test.x == 0) { GD.Print("Y"); for (int i = 0; i < size + 1; i++) { if (_test.y < 0) { _plane(st, ((Vector2)start_pos).x, ((Vector2)start_pos).y + i); tmpPoints.Add(((Vector2)start_pos) + new Vector2(0, i)); } else { _plane(st, ((Vector2)start_pos).x, ((Vector2)start_pos).y - i); tmpPoints.Add(((Vector2)start_pos) + new Vector2(0, -i)); } } } st.Index(); st.GenerateNormals(); st.GenerateTangents(); var mesh = st.Commit(); mesh.SurfaceSetMaterial(0, mouse_preview.GetSurfaceMaterial(0)); GetNode <MeshInstance>("mouse_draw_preview").Mesh = mesh; curPoints = tmpPoints.ToArray(); GD.Print(_test, size); }
private Godot.Collections.Array createSurfaceByBones(ArrayMesh mesh, int surface, Skin newSkin, List <UMAReciepeBindPose> origBindPoses) { var mdt = new MeshDataTool(); mdt.CreateFromSurface(mesh, surface); var st = new SurfaceTool(); st.Begin(Mesh.PrimitiveType.Triangles); var newBindPoses = new List <UMAReciepeBindPose>(); if (newSkin != null) { for (int i = 0; i < newSkin.GetBindCount(); i++) { newBindPoses.Add(new UMAReciepeBindPose { boneName = newSkin.GetBindName(i), transform = newSkin.GetBindPose(i), boneIndex = newSkin.GetBindBone(i) }); } } var boneAmount = 0; for (int i = 0; i < mdt.GetVertexCount(); i++) { var oldVer = mdt.GetVertex(i); var oldNorm = mdt.GetVertexNormal(i); var newVer = new Vector3(); var newNorm = new Vector3(); var indexes = mdt.GetVertexBones(i); // st.AddTangent(mdt.GetVertexTangent(i)); st.AddBones(mdt.GetVertexBones(i)); st.AddWeights(mdt.GetVertexWeights(i)); int boneId = 0; foreach (var weight in mdt.GetVertexWeights(i)) { if (newBindPoses.Count >= indexes[boneId] && origBindPoses.Count >= indexes[boneId]) { var restBoneNew = newBindPoses[indexes[boneId]]; var restBoneTemplate = origBindPoses[indexes[boneId]]; var dataup = restBoneNew.transform.Xform(Vector3.Up); var dataright = restBoneNew.transform.Xform(Vector3.Right); var templateup = restBoneTemplate.transform.Xform(Vector3.Up); var templateright = restBoneTemplate.transform.Xform(Vector3.Right); if (Mathf.Abs(dataup.AngleTo(templateup)) > 1 || Mathf.Abs(dataright.AngleTo(templateright)) > 1) { Transform convertMatrix = restBoneTemplate.transform.Inverse() * restBoneNew.transform; newVer += convertMatrix.Xform(oldVer) * weight; newNorm += convertMatrix.basis.Xform(oldNorm) * weight; } else { newVer += oldVer * weight; newNorm += oldNorm * weight; } } else { newVer += oldVer * weight; newNorm += oldNorm * weight; } boneId++; } st.AddUv(mdt.GetVertexUv(i)); if (mdt.GetVertexColor(i) != null) { st.AddColor(mdt.GetVertexColor(i)); } if (mdt.GetVertexUv2(i) != null) { st.AddUv2(mdt.GetVertexUv2(i)); } st.AddNormal(newNorm); st.AddVertex(newVer); boneAmount += mdt.GetVertexBones(i).Length; } //creating indexes for (int face = 0; face < mdt.GetFaceCount(); face++) { for (int faceI = 0; faceI < 3; faceI++) { var ind = mdt.GetFaceVertex(face, faceI); st.AddIndex(ind); } } st.GenerateTangents(); return(st.CommitToArrays()); }