예제 #1
0
        // desenha o número em uma face do dado
        private void desenhaNumeroDado(int numero, Face face)
        {
            // salva em quantas colunas os círculos aparecem para cada número (o número é indicado pelo índice)
            int[] intervaloA = new int[6] {
                2, 4, 6, 4, 6, 4
            };
            int[] intervaloB = new int[6] {
                2, 4, 6, 4, 6, 6
            };

            Eixos   eixos     = Eixos.X_Y;
            Ponto4D ptoCentro = null;
            Circulo c;
            double  somarA = 0;
            double  somarB = 0;

            for (int i = 0; i <= numero; i++)
            {
                // adiciona o ponto central do círculo de acordo com a face
                switch (face)
                {
                case Face.CIMA:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[2].Y + 0.01, base.pontosLista[0].Z - tamanhoDado / intervaloB[numero] - somarB);
                    eixos     = Eixos.X_Z;
                    break;

                case Face.BAIXO:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y - 0.01, base.pontosLista[0].Z - tamanhoDado / intervaloB[numero] - somarB);
                    eixos     = Eixos.X_Z;
                    break;

                case Face.FRENTE:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[0].Z + 0.01);
                    break;

                case Face.FUNDO:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[4].Z - 0.01);
                    break;

                case Face.DIREITA:
                    ptoCentro = new Ponto4D(base.pontosLista[1].X + 0.01, base.pontosLista[1].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[1].Z - tamanhoDado / intervaloA[numero] - somarA);
                    eixos     = Eixos.Y_Z;
                    break;

                case Face.ESQUERDA:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X - 0.01, base.pontosLista[4].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[4].Z + tamanhoDado / intervaloA[numero] + somarA);
                    eixos     = Eixos.Y_Z;
                    break;
                }

                // altera os valores que devem ser somados nas coordenadas do ponto central do próximo círculo
                if (((numero == 2 || numero == 4) && (i == 0 || i == 1)) ||
                    ((numero == 1 || numero == 3 || numero == 5) && i == 0))

                {
                    somarA += 2 * (tamanhoDado / intervaloA[numero]);
                    somarB += 2 * (tamanhoDado / intervaloB[numero]);
                }
                else if ((numero == 4 && i == 2) ||
                         ((numero == 3 || numero == 5) && i == 1))
                {
                    somarA = 0;
                }
                else if (numero == 4 && i == 3)
                {
                    somarA = 4 * (tamanhoDado / intervaloA[numero]);
                    somarB = 0;
                }
                else if ((numero == 3 || numero == 5) && i == 2)
                {
                    somarA = 2 * (tamanhoDado / intervaloA[numero]);
                    somarB = 0;
                }
                else if (numero == 5 && i == 3)
                {
                    somarA = 0;
                    somarB = 4 * (tamanhoDado / intervaloB[numero]);
                }
                else if (numero == 5 && i == 4)
                {
                    somarA = 2 * (tamanhoDado / intervaloA[numero]);
                }

                // adiciona o círculo
                c = new Circulo(Utilitario.charProximo(), this, 15, tamanhoDado / 8, ptoCentro, eixos);
                c.ObjetoCor.CorR = 0; c.ObjetoCor.CorG = 0; c.ObjetoCor.CorB = 0;
                c.PrimitivaTipo  = PrimitiveType.TriangleStrip;
            }
        }
예제 #2
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            base.OnRenderFrame(e);
            GL.Clear(ClearBufferMask.ColorBufferBit);
            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();

            //Eixo X
            GL.Color3(Color.Red);
            GL.LineWidth(3);
            GL.Begin(PrimitiveType.Lines);
            GL.Vertex2(0, 0);
            GL.Vertex2(200, 0);
            GL.End();

            //Eixo Y
            GL.Color3(Color.Green);
            GL.Begin(PrimitiveType.Lines);
            GL.Vertex2(0, 0);
            GL.Vertex2(0, 200);
            GL.End();

            //Circulos
            Ponto4D center1 = new Ponto4D();

            center1.X = 0;
            center1.Y = 100;
            Circulo.drawCircle(Color.Black, 5, 5, 100, center1);

            Ponto4D center2 = new Ponto4D();

            center2.X = 100;
            center2.Y = -100;
            Circulo.drawCircle(Color.Black, 5, 5, 100, center2);

            Ponto4D center3 = new Ponto4D();

            center3.X = -100;
            center3.Y = -100;
            Circulo.drawCircle(Color.Black, 5, 5, 100, center3);



            //Triângulo
            Ponto4D ponto1 = new Ponto4D();

            ponto1.X = 0;
            ponto1.Y = 100;

            Ponto4D ponto2 = new Ponto4D();

            ponto2.X = 100;
            ponto2.Y = -100;
            Ponto4D ponto3 = new Ponto4D();

            ponto3.X = -100;
            ponto3.Y = -100;
            SegReta.drawTriangle(ponto1, ponto2, ponto3, Color.Aqua, PrimitiveType.Lines);

            this.SwapBuffers();
        }