protected void BuildSideVertexes(CrossSection[] crossSection, int transforms) { V3ToV3Xna XnaOMV = new V3ToV3Xna(); float transformOffset = 1.0f / (float)transforms; float currentOffset = -0.5f; for (int i = 0; i < transforms; i++) { for (int j = 0; j < crossSection.Length; j++) { int pointCount = crossSection[j].GetNumPoints(); if (pointCount > 0) { for (int k = 0; k < pointCount - 1; k++) { Vector3 lower1, lower2, upper1, upper2; float lowerRatio = (float)i / (float)transforms; float upperRatio = (float)(i + 1) / (float)transforms; lower1 = XnaOMV.V3ToV3X(crossSection[j].GetRawVertex(k)); lower2 = XnaOMV.V3ToV3X(crossSection[j].GetRawVertex(k + 1)); lower1.Z = currentOffset; lower2.Z = currentOffset; upper1 = lower1; upper2 = lower2; upper1.Z = currentOffset + transformOffset; upper2.Z = currentOffset + transformOffset; lower1 = Transform(lower1, lowerRatio); lower2 = Transform(lower2, lowerRatio); upper1 = Transform(upper1, upperRatio); upper2 = Transform(upper2, upperRatio); Vertexes.Add(new VertexPositionColor(lower1, color)); Vertexes.Add(new VertexPositionColor(lower2, color)); Vertexes.Add(new VertexPositionColor(upper2, color)); Vertexes.Add(new VertexPositionColor(lower1, color)); Vertexes.Add(new VertexPositionColor(upper2, color)); Vertexes.Add(new VertexPositionColor(upper1, color)); } } } currentOffset += transformOffset; } }
protected void BuildEndCapCutNoHollow(bool top) { V3ToV3Xna XnaOMV = new V3ToV3Xna(); float z = top ? 0.5f : -0.5f; for (int i = FirstOuterFace; i <= LastOuterFace; i++) { int pointCount = OuterFaces[i].GetNumPoints(); for (int j = 0; j < pointCount - 1; j++) { Vector3 first = XnaOMV.V3ToV3X(OuterFaces[i].GetRawVertex(j)); first.Z = z; Vector3 second = XnaOMV.V3ToV3X(OuterFaces[i].GetRawVertex(j + 1)); second.Z = z; Vector3 center = new Vector3(0, 0, z); // TODO: Texturemapping stuff //Vector2 t1 = texturemapping.GetTextureCoordinate(new Vector2(1 - (p1.x + 0.5), p1.y + 0.5)); //Vector2 t2 = texturemapping.GetTextureCoordinate(new Vector2(1 - (p2.x + 0.5), p2.y + 0.5)); float transformRatio = top ? 1 : 0; first = Transform(first, transformRatio); second = Transform(second, transformRatio); center = Transform(center, transformRatio); Vertexes.Add(new VertexPositionColor(first, color)); Vertexes.Add(new VertexPositionColor(second, color)); Vertexes.Add(new VertexPositionColor(center, color)); } } }
protected void BuildEndCapNoCutNoHollow(bool top) { V3ToV3Xna XnaOMV = new V3ToV3Xna(); float z = top ? 0.5f : -0.5f; for (int i = 0; i < OuterFaces.Length; i++) { int pointCount = OuterFaces[i].GetNumPoints(); if (pointCount > 0) { for (int j = 0; j < pointCount - 1; j++) { Vector3 first = XnaOMV.V3ToV3X((OuterFaces[i].GetRawVertex(j))); first.Z = z; Vector3 second = XnaOMV.V3ToV3X(OuterFaces[i].GetRawVertex(j + 1)); second.Z = z; Vector3 center = new Vector3(0, 0, z); float transformRatio = top ? 1 : 0; // Apply the transformation to each vertex first = Transform(first, transformRatio); second = Transform(second, transformRatio); center = Transform(center, transformRatio); Vertexes.Add(new VertexPositionColor(first, color)); Vertexes.Add(new VertexPositionColor(second, color)); Vertexes.Add(new VertexPositionColor(center, color)); } } } }