/// <summary> /// Creates a mesh with a horizontal and vertical resolution indicated /// by the input parameters. It will generate /// (precisionU-1)*(precisionV-1) quads. /// </summary> public MeshGeometry3D CreateMesh(int precisionU, int precisionV) { _lengthX = precisionU; _lengthY = precisionV; _du = (UMax - UMin) / (precisionU - 1); _dv = (VMax - VMin) / (precisionV - 1); _positions = new Point3D[_lengthX, _lengthY]; _normals = new Vector3D[_lengthX, _lengthY]; _textureCoords = new Point[_lengthX, _lengthY]; _indices = new ArrayList(); var v = VMin; for (var y = 0; y < _lengthY; y++) { var u = UMin; if (y == _lengthY - 1) { v = VMax; } for (var x = 0; x < _lengthX; x++) { if (x == _lengthX - 1) { u = UMax; } VariableExpression.Define("u", u); VariableExpression.Define("v", v); _positions[x, y] = Evaluate(); _normals[x, y] = GetNormal(u, v); u += _du; } v += _dv; } VariableExpression.Undefine("u"); VariableExpression.Undefine("v"); SetTextureCoordinates(); SetIndices(); var mesh = new MeshGeometry3D(); for (var y = 0; y < _lengthY; y++) { for (var x = 0; x < _lengthX; x++) { mesh.Positions.Add(_positions[x, y]); mesh.Normals.Add(_normals[x, y]); mesh.TextureCoordinates.Add(_textureCoords[x, y]); } } mesh.TriangleIndices = new Int32Collection(); foreach (int index in _indices) { mesh.TriangleIndices.Add(index); } return(mesh); }
/// <summary> /// Creates a mesh with a horizontal and vertical resolution indicated /// by the input parameters. It will generate /// (precisionU-1)*(precisionV-1) quads. /// </summary> public Model3DGroup CreateWireframeModel(int precisionU, int precisionV) { _lengthX = precisionU; _lengthY = precisionV; _du = (UMax - UMin) / (precisionU - 1); _dv = (VMax - VMin) / (precisionV - 1); _positions = new Point3D[_lengthX, _lengthY]; var v = VMin; for (var y = 0; y < _lengthY; y++) { var u = UMin; if (y == _lengthY - 1) { v = VMax; } for (var x = 0; x < _lengthX; x++) { if (x == _lengthX - 1) { u = UMax; } VariableExpression.Define("u", u); VariableExpression.Define("v", v); _positions[x, y] = Evaluate(); u += _du; } v += _dv; } VariableExpression.Undefine("u"); VariableExpression.Undefine("v"); var group = new Model3DGroup(); // TODO: Remove //ScreenSpaceLines3D lines; /* * // Create Horizontal lines * for ( int y = 0; y < lengthY; y++ ) * { * lines = new ScreenSpaceLines3D(); * lines.Color = Colors.Black; * lines.Thickness = 1; * for ( int x = 0; x < lengthX; x++ ) * { * lines.Points.Add( positions[ x,y ] ); * } * group.Children.Add( lines ); * } * * // Create Vertical lines * for ( int x = 0; x < lengthX; x++ ) * { * lines = new ScreenSpaceLines3D(); * lines.Color = Colors.Black; * lines.Thickness = 1; * for ( int y = 0; y < lengthY; y++ ) * { * lines.Points.Add( positions[ x,y ] ); * } * group.Children.Add( lines ); * } */ return(group); }