void Start() { var filter = GetComponent <MeshFilter>(); var source = filter.mesh; var mesh = GPUSubdivisionSurface.Subdivide(subdivCompute, SubdivisionSurface.Weld(source, float.Epsilon, source.bounds.size.x), details, weld); filter.sharedMesh = mesh; }
void Start() { var filter = GetComponent <MeshFilter>(); var source = filter.mesh; var model = SubdivisionSurface.Subdivide(SubdivisionSurface.Weld(source, float.Epsilon, source.bounds.size.x), details); Setup(filter, source, model); }
private void InteractionHandler() { //Add new Geometry if (Keyboard.GetKey(KeyCodes.D1) && _keyTimeout < 0) { _keyTimeout = 1; var geometry = CreatePrimitiveGeometry.CreateCuboidGeometry(1, 1, 1); AddGeometryToSceneNode(geometry, new float3(0, 0, 0)); } if (Keyboard.GetKey(KeyCodes.D2) && _keyTimeout < 0) { _keyTimeout = 1; var geometry = CreatePrimitiveGeometry.CreatePyramidGeometry(1, 1, 1); AddGeometryToSceneNode(geometry, new float3(0, 0, 0)); } if (Keyboard.GetKey(KeyCodes.D3) && _keyTimeout < 0) { _keyTimeout = 1; var geometry = CreatePrimitiveGeometry.CreateConeGeometry(1, 1, 15); AddGeometryToSceneNode(geometry, new float3(0, 0, 0)); } if (Keyboard.GetKey(KeyCodes.D4) && _keyTimeout < 0) { _keyTimeout = 1; var geometry = CreatePrimitiveGeometry.CreateSpehreGeometry(1, 30, 15); AddGeometryToSceneNode(geometry, new float3(0, 0, 0)); } _keyTimeout -= DeltaTime; //following actions are only allowed if something is selected if (_selectedNode == null) { return; } //Translate Geometry if (Keyboard.GetKey(KeyCodes.G)) { _isTranslating = true; } if (_isTranslating) { var worldPos = new float3(Mouse.Velocity.x * .0001f, Mouse.Velocity.y * -.0001f, Mouse.WheelVel * .001f); _selectedNode.GetTransform().Translation += worldPos.xyz; if (Mouse.LeftButton) { _isTranslating = false; } } //Scaling Geometry if (Keyboard.GetKey(KeyCodes.S)) { _isScaling = true; } if (_isScaling) { _selectedNode.GetTransform().Scale += new float3(Mouse.Velocity.y, Mouse.Velocity.y, Mouse.Velocity.y) * .0001f; if (Mouse.LeftButton) { _isScaling = false; } } //DeleteGeom if (Keyboard.GetKey(KeyCodes.Delete) && _keyTimeout < 0) { _keyTimeout = 1; int currentGeometryIndex = _parentNode.Children.IndexOf(_selectedNode); _activeGeometrys.Remove(currentGeometryIndex); var zwerg = new Dictionary <int, Geometry>(); foreach (var key in _activeGeometrys.Keys) { if (key > currentGeometryIndex) { var test = _activeGeometrys[key]; zwerg.Add(key - 1, test); } else { zwerg.Add(key, _activeGeometrys[key]); } } _activeGeometrys.Clear(); foreach (var item in zwerg) { _activeGeometrys.Add(item.Key, item.Value); } _parentNode.Children.RemoveAt(currentGeometryIndex); _selectedNode = null; _currentPick = null; } //Insert if (Keyboard.GetKey(KeyCodes.I) && _keyTimeout < 0) { _keyTimeout = .25f; var currentGeometryIndex = _parentNode.Children.IndexOf(_selectedNode); var currentSelection = _parentNode.Children[currentGeometryIndex]; var currentSelectedGeometry = _activeGeometrys[currentGeometryIndex]; currentSelectedGeometry.InsetFace(rng.Next(4, currentSelectedGeometry.GetAllFaces().Count()), .5f); var copy = currentSelectedGeometry.CloneGeometry(); _activeGeometrys[currentGeometryIndex] = copy; currentSelectedGeometry.Triangulate(); var geometryMesh = new JometriMesh(currentSelectedGeometry); var meshComponent = new Mesh { Vertices = geometryMesh.Vertices, Triangles = geometryMesh.Triangles, Normals = geometryMesh.Normals, }; currentSelection.Components[2] = meshComponent; } //Extrude if (Keyboard.GetKey(KeyCodes.E) && _keyTimeout < 0) { _keyTimeout = .25f; var currentGeometryIndex = _parentNode.Children.IndexOf(_selectedNode); var currentSelection = _parentNode.Children[currentGeometryIndex]; var currentSelectedGeometry = _activeGeometrys[currentGeometryIndex]; currentSelectedGeometry.ExtrudeFace(rng.Next(4, currentSelectedGeometry.GetAllFaces().Count()), 1); var copy = currentSelectedGeometry.CloneGeometry(); _activeGeometrys[currentGeometryIndex] = copy; currentSelectedGeometry.Triangulate(); var geometryMesh = new JometriMesh(currentSelectedGeometry); var meshComponent = new Mesh { Vertices = geometryMesh.Vertices, Triangles = geometryMesh.Triangles, Normals = geometryMesh.Normals, }; currentSelection.Components[2] = meshComponent; } //Add Catmull-Clark if (Keyboard.GetKey(KeyCodes.C) && _keyTimeout < 0) { _keyTimeout = .25f; var currentGeometryIndex = _parentNode.Children.IndexOf(_selectedNode); var currentSelection = _parentNode.Children[currentGeometryIndex]; var currentSelectedGeometry = _activeGeometrys[currentGeometryIndex]; currentSelectedGeometry = SubdivisionSurface.CatmullClarkSubdivision(currentSelectedGeometry); var copy = currentSelectedGeometry.CloneGeometry(); _activeGeometrys[currentGeometryIndex] = copy; currentSelectedGeometry.Triangulate(); var geometryMesh = new JometriMesh(currentSelectedGeometry); var meshComponent = new Mesh { Vertices = geometryMesh.Vertices, Triangles = geometryMesh.Triangles, Normals = geometryMesh.Normals, }; currentSelection.Components[2] = meshComponent; } }
public void StartSubdivion() { var mesh = GPUSubdivisionSurface.Subdivide(subdivCompute, SubdivisionSurface.Weld(source, float.Epsilon, source.bounds.size.x), details, weld); filter.sharedMesh = mesh; }