Beispiel #1
0
        public void DrawTexturedSolidPolygon(SolidVertex[] vertices, Vector3 normal, Color color, Texture2D texture)
        {
            if (vertices.Length < 3)
            {
                return;
            }

            if (!texturedPolygonBuffer.ContainsKey(texture))
            {
                texturedPolygonBuffer[texture] = new List <PrimitiveVertex>();
            }

            List <PrimitiveVertex> vertexBuffer = texturedPolygonBuffer[texture];
            PrimitiveVertex        vertex       = new PrimitiveVertex
            {
                color  = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f),
                normal = normal
            };

            // trianglelize polygon and add to texture vertex polygon buffer
            for (int i = 3; i < vertices.Length + 1; i++)
            {
                vertex.position = vertices[0].Position;
                vertex.uv       = vertices[0].DiffuseUv;
                vertexBuffer.Add(vertex);

                vertex.position = vertices[i - 2].Position;
                vertex.uv       = vertices[i - 2].DiffuseUv;
                vertexBuffer.Add(vertex);

                vertex.position = vertices[i - 1].Position;
                vertex.uv       = vertices[i - 1].DiffuseUv;
                vertexBuffer.Add(vertex);
            }
        }
Beispiel #2
0
        public void DrawSolidPolygon(SolidVertex[] vertices, Vector3 normal, Color color)
        {
            if (vertices.Length < 3)
            {
                return;
            }

            PrimitiveVertex vertex = new PrimitiveVertex
            {
                color  = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f),
                normal = normal
            };

            // trianglelize polygon and add to lit polygon buffer
            for (int i = 3; i < vertices.Length + 1; i++)
            {
                vertex.position = vertices[0].Position;
                litPolygonBuffer.Add(vertex);

                vertex.position = vertices[i - 2].Position;
                litPolygonBuffer.Add(vertex);

                vertex.position = vertices[i - 1].Position;
                litPolygonBuffer.Add(vertex);
            }
        }
Beispiel #3
0
        private void DrawDashedLine(Vector3 start, Vector3 end, Color color, float zoomFactor = 1.0f)
        {
            PrimitiveVertex vStart = new PrimitiveVertex();
            PrimitiveVertex vEnd   = new PrimitiveVertex();

            float lineSize   = 4 * zoomFactor;
            float lineLength = (end - start).Length;

            int   linesToDraw = (int)(lineLength / lineSize) / 2;
            float emptySpace  = (lineLength - linesToDraw * lineSize) / (linesToDraw + 1);

            Vector3 lineDir = (end - start);

            lineDir.Normalize();

            // set colors
            vStart.color = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f);
            vEnd.color   = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f);

            start = start + lineDir * emptySpace;

            for (int i = 0; i < linesToDraw; i++)
            {
                vStart.position = start;
                vEnd.position   = start + lineDir * lineSize;
                start           = vEnd.position + lineDir * emptySpace;

                lineBuffer.Add(vStart);
                lineBuffer.Add(vEnd);
            }
        }
Beispiel #4
0
        private void DrawNormalLine(Vector3 start, Vector3 end, Color color)
        {
            PrimitiveVertex vStart = new PrimitiveVertex();
            PrimitiveVertex vEnd   = new PrimitiveVertex();

            // set positions
            vStart.position = start;
            vEnd.position   = end;

            // set colors
            vStart.color = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f);
            vEnd.color   = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f);

            lineBuffer.Add(vStart);
            lineBuffer.Add(vEnd);
        }
Beispiel #5
0
        public void DrawSolidCircle(Vector3 bottomLeft, Vector3 bottomRight, Vector3 topRight, Vector3 topLeft, Color color)
        {
            if (!beginEndPair)
            {
                // Begin must be called before end
                return;
            }

            Vector3 position   = (topLeft + bottomRight) * 0.5f;
            float   radius     = (topLeft - topRight).Length / 2.0f;
            Vector2 dimensions = new Vector2
            {
                X = radius,
                Y = radius
            };

            Vector3 hBase = (topRight - topLeft).Normalized();
            Vector3 vBase = (topLeft - bottomLeft).Normalized();

            int   piePieces = 12;
            float degToRad  = (float)(Math.PI / 180.0);
            float radPiece  = (360.0f / piePieces * degToRad);

            Vector3         lastVec = position + hBase * dimensions.X;
            PrimitiveVertex vert    = new PrimitiveVertex {
                color = new Vector3(color.R, color.G, color.B)
            };

            for (int i = 1; i <= piePieces; i++)
            {
                vert.position = position;
                polygonBuffer.Add(vert);

                vert.position = lastVec;
                polygonBuffer.Add(vert);

                float cos = (float)Math.Cos(i * radPiece) * dimensions.X;
                float sin = (float)Math.Sin(i * radPiece) * dimensions.Y;

                vert.position = position + hBase * cos + vBase * sin;
                polygonBuffer.Add(vert);

                lastVec = vert.position;
            }
        }
Beispiel #6
0
        public void DrawSolidRectangle(Vector3 bottomLeft, Vector3 bottomRight, Vector3 topRight, Vector3 topLeft, Color color)
        {
            if (!beginEndPair)
            {
                // Begin must be called before end
                return;
            }

            PrimitiveVertex a = new PrimitiveVertex();
            PrimitiveVertex b = new PrimitiveVertex();
            PrimitiveVertex c = new PrimitiveVertex();
            PrimitiveVertex d = new PrimitiveVertex();

            Vector3 rectangleColor = new Vector3(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f);

            a.color = rectangleColor;
            b.color = rectangleColor;
            c.color = rectangleColor;
            d.color = rectangleColor;

            // counter clockwise
            a.position = bottomLeft;
            b.position = bottomRight;
            c.position = topRight;
            d.position = topLeft;

            // create first polygon
            polygonBuffer.Add(a);
            polygonBuffer.Add(c);
            polygonBuffer.Add(d);

            // create second polygon
            polygonBuffer.Add(a);
            polygonBuffer.Add(b);
            polygonBuffer.Add(c);
        }