public void Process() { Indexing = BeginMode.Triangles; foreach (GeometricObject geometricObj in _identity) { SetPolygonMode(geometricObj.Mode); } if (_polygonMode == GeometricObject.PolygonMode.Quadratic) { Indexing = BeginMode.Quads; } Vector polygonNormal = null; foreach (GeometricObject geometricObj in _identity) { foreach (Polygon polygon in geometricObj.Polygons) { if (_normalPackage == null) { polygonNormal = polygon.GetNormalVec(); } foreach (Coordinate coord in polygon.EdgeCoords) { int vertexIndex = _vertices.FindIndex(vertex => vertex.Coord.Equals(coord)); if (vertexIndex != -1 && _normalPackage == null) { _vertices[vertexIndex].IntegrateNormalVec(polygonNormal); } else { Vertex insert; Color4 color = ColorPackage.DefaultColor; Vector normal = polygonNormal; if (_colorPackage != null) { color = _colorPackage.ColorMap[coord]; } if (_normalPackage != null) { normal = _normalPackage.NormalMap[coord]; } insert = new Vertex(coord, color, normal, Vertex.DefaultJointIndex, Vertex.DefaultJointCoeff); _vertices.Add(insert); vertexIndex = _vertices.Count - 1; } Indices.Add((uint)vertexIndex); } } } foreach (Vertex vertex in _vertices) { Vertices.Add(vertex.GetVertexData()); } BufferData(); _vertices.Clear(); _polygonMode = GeometricObject.PolygonMode.Invalid; }
public RenderableIdentity(List <GeometricObject> identity, ColorPackage colorPackage = null, NormalPackage normalPackage = null) { this._identity = identity; this._colorPackage = colorPackage; this._normalPackage = normalPackage; this._jointTransforms = new Dictionary <ObjectModel.ComponentKey, JointTransform>(); this._vertices = new List <Vertex>(); this._polygonMode = GeometricObject.PolygonMode.Invalid; }
private void SetPolygonMode(GeometricObject.PolygonMode mode) { if (PolygonMode == GeometricObject.PolygonMode.Invalid) { PolygonMode = mode; } else if (PolygonMode != mode) { throw new InvalidSingularObjectModelConstructionException(); } }
private void SetPolygonMode(GeometricObject.PolygonMode mode) { if (_polygonMode == GeometricObject.PolygonMode.Invalid) { if (mode == GeometricObject.PolygonMode.Triangular || mode == GeometricObject.PolygonMode.Quadratic) { _polygonMode = mode; } else { throw new InvalidRenderableIdentityException(); } } else if (_polygonMode != mode) { throw new InvalidRenderableIdentityException(); } }
public void InsertIndex(int insert) { _indices.Add(insert); if (_indices.Count < Polygon.MinEdgeNumber) { _mode = GeometricObject.PolygonMode.Invalid; } if (_indices.Count == Triangle.EdgeNumber) { _mode = GeometricObject.PolygonMode.Triangular; } else if (_indices.Count == Quadrangle.EdgeNumber) { _mode = GeometricObject.PolygonMode.Quadratic; } else { _mode = GeometricObject.PolygonMode.Polygonal; } }
public void FlushGeometricObjs() { GeometricObjs.Clear(); PolygonMode = GeometricObject.PolygonMode.Invalid; }
public SingularObjectModel() { this.GeometricObjs = new List <GeometricObject>(); this.PolygonMode = GeometricObject.PolygonMode.Invalid; }