// 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; } }
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(); }