示例#1
0
        public Cilindro(string rotulo, Objeto paiRef) : base(rotulo, paiRef)
        {
            int segments = 10; // Números mais altos melhoram a qualidade
            int radius   = 1;  // O raio (largura) do cilindro
            int height   = 1;  // A altura do cilindro

            for (double y = 0; y < 2; y++)
            {
                for (double x = 0; x < segments; x++)
                {
                    double theta = (x / (segments - 1)) * 2 * Math.PI;
                    base.PontosAdicionar(new Ponto4D(
                                             (float)(radius * Math.Cos(theta)),
                                             (float)(height * y),
                                             (float)(radius * Math.Sin(theta))));
                }
            }
            // ponto do centro da base
            base.PontosAdicionar(new Ponto4D(0, 0, 0));
            // ponto do centro da topo
            base.PontosAdicionar(new Ponto4D(0, height, 0));

            for (int x = 0; x < segments - 1; x++)
            {
                // lados
                listaTopologia.Add(x);
                listaTopologia.Add(x + segments);
                listaTopologia.Add(x + segments + 1);
                listaTopologia.Add(x + segments + 1);
                listaTopologia.Add(x + 1);
                listaTopologia.Add(x);
                // base
                listaTopologia.Add(x);
                listaTopologia.Add(x + 1);
                listaTopologia.Add(segments - 1);
                // topo
                listaTopologia.Add(x + segments + 1);
                listaTopologia.Add(x + segments);
                listaTopologia.Add(segments);
            }
        }
示例#2
0
        public Cubo(string rotulo, Objeto paiRef, Bitmap bitmap) : base(rotulo, paiRef)
        {
            GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
            GL.GenTextures(1, out texture);
            GL.BindTexture(TextureTarget.Texture2D, texture);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);

            BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                              ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0,
                          OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
            bitmap.UnlockBits(data);
            base.PontosAdicionar(new Ponto4D(-0.5, -0.5, 0.5));  // PtoA listaPto[0]
            base.PontosAdicionar(new Ponto4D(0.5, -0.5, 0.5));   // PtoB listaPto[1]
            base.PontosAdicionar(new Ponto4D(0.5, 0.5, 0.5));    // PtoC listaPto[2]
            base.PontosAdicionar(new Ponto4D(-0.5, 0.5, 0.5));   // PtoD listaPto[3]
            base.PontosAdicionar(new Ponto4D(-0.5, -0.5, -0.5)); // PtoE listaPto[4]
            base.PontosAdicionar(new Ponto4D(0.5, -0.5, -0.5));  // PtoF listaPto[5]
            base.PontosAdicionar(new Ponto4D(0.5, 0.5, -0.5));   // PtoG listaPto[6]
            base.PontosAdicionar(new Ponto4D(-0.5, 0.5, -0.5));  // PtoH listaPto[7]
        }
示例#3
0
 public Poligono(char rotulo, Objeto paiRef) : base(rotulo, paiRef)
 {
 }
示例#4
0
 public ObjetoGeometria(string rotulo, Objeto paiRef, BeginMode beginMode) : base(rotulo, paiRef, beginMode)
 {
 }
示例#5
0
 public ObjetoGeometria(string rotulo, Objeto paiRef) : base(rotulo, paiRef)
 {
 }
示例#6
0
 public BBox(Objeto referencia)
 {
     this.referencia = referencia;
 }
示例#7
0
 public Poligono(string rotulo, Objeto paiRef) : base(rotulo, paiRef)
 {
 }
 public ObjetoGeometria(char rotulo, Objeto paiRef) : base(rotulo, paiRef)
 {
 }
示例#9
0
        public Tabuleiro(char rotulo, Objeto paiRef, CameraPerspective c) : base(rotulo, paiRef)
        {
            camera = c;

            // adiciona chão
            addPontosFaces(-9.1f, 9.1f, -0.2f, 0.0f, 9.1f, -9.1f);

            int   posTrilha = 8;
            float inicio_x  = -0.7f;
            float inicio_z  = 8.9f;

            // adiciona os pontos das plataformas da trilha - listaPto[8] a
            for (int i = 1; i <= 12; i++)
            {
                // se i != 1 começa a contar em 2, pois a primeira peça já foi adicionada
                // se i == 3, 6, 9 ou 12, então possui somente 3 peças na fileira, senão possui 7
                for (int j = (i == 1 ? 1 : 2); (i % 3 == 0 ? j <= 3 : j <= 7); j++)
                {
                    trilha.Add(posTrilha);
                    addPontosFaces(inicio_x - 1f, inicio_x, 0.0f, 0.2f, inicio_z, inicio_z - 1f);

                    // salva a posição das plataformas importantes do jogo
                    if (i == 1 && j == 2)
                    {
                        posJogadorAzul = trilha.Count - 1;
                    }
                    else if (i == 7 && j == 2)
                    {
                        posJogadorVermelho = trilha.Count - 1;
                    }
                    else if (i == 6 && j == 2)
                    {
                        posTerminaVermelho = trilha.Count - 1;
                    }
                    else if (i == 12 && j == 2)
                    {
                        posTerminaAzul = trilha.Count - 1;
                    }

                    posTrilha += QUANTIDADE_PONTOS;

                    // muda as variáveis para a próxima plataforma
                    if ((i % 3 == 0 && j != 3) || (i % 3 != 0 && j != 7))
                    {
                        if (i == 1 || i == 3 || i == 5)
                        {
                            inicio_z -= 1.2f;
                        }
                        else if (i == 2 || i == 10 || i == 12)
                        {
                            inicio_x -= 1.2f;
                        }
                        else if (i == 4 || i == 6 || i == 8)
                        {
                            inicio_x += 1.2f;
                        }
                        else if (i == 7 || i == 9 || i == 11)
                        {
                            inicio_z += 1.2f;
                        }
                    }
                }

                if (i == 12 || i == 2 || i == 4)
                {
                    inicio_z -= 1.2f;
                }

                else if (i == 1 || i == 9 || i == 11)
                {
                    inicio_x -= 1.2f;
                }
                else if (i == 3 || i == 5 || i == 7)
                {
                    inicio_x += 1.2f;
                }
                else if (i == 6 || i == 8 || i == 10)
                {
                    inicio_z += 1.2f;
                }
            }

            inicio_x = 0.5f;
            inicio_z = 7.7f;

            for (int i = 1; i <= 13; i++)
            {
                if (i <= 6)
                {
                    caminhoAzul.Add(posTrilha);
                }
                else if (i == 7)
                {
                    posDado = posTrilha;
                }
                else
                {
                    caminhoVermelho.Add(posTrilha);
                }

                addPontosFaces(inicio_x - 1f, inicio_x, 0.0f, 0.2f, inicio_z, inicio_z - 1f);

                posTrilha += 8;

                // muda as variáveis para a próxima plataforma
                inicio_z -= 1.2f;
            }

            // adiciona os pontos da casa azul
            // muros da casa
            casaAzul.Add(posTrilha);
            casaAzul.Add(posTrilha + 8);
            casaAzul.Add(posTrilha + 16);
            casaAzul.Add(posTrilha + 24);
            addPontosFaces(-2.9f, -1.9f, 0.0f, 0.6f, 6.5f, 1.9f);
            addPontosFaces(-8.9f, -2.9f, 0.0f, 0.6f, 2.9f, 1.9f);
            addPontosFaces(-8.9f, -7.9f, 0.0f, 0.6f, 8.9f, 2.9f);
            addPontosFaces(-7.9f, -1.9f, 0.0f, 0.6f, 8.9f, 7.9f);

            posTrilha += 32;

            // plataformas das peças
            posCasaAzul = posTrilha;
            casaAzul.Add(posTrilha);
            casaAzul.Add(posTrilha + 8);
            casaAzul.Add(posTrilha + 16);
            casaAzul.Add(posTrilha + 24);
            addPontosFaces(-5.0f, -3.6f, 0.0f, 0.2f, 7.2f, 5.8f);
            addPontosFaces(-7.2f, -5.8f, 0.0f, 0.2f, 7.2f, 5.8f);
            addPontosFaces(-5.0f, -3.6f, 0.0f, 0.2f, 5.0f, 3.6f);
            addPontosFaces(-7.2f, -5.8f, 0.0f, 0.2f, 5.0f, 3.6f);

            posTrilha += 32;

            // plataformas das peças salvas
            salvoAzul.Add(posTrilha);
            salvoAzul.Add(posTrilha + 8);
            salvoAzul.Add(posTrilha + 16);
            salvoAzul.Add(posTrilha + 24);
            addPontosFaces(3.6f, 5.0f, 0.0f, 0.2f, 7.2f, 5.8f);
            addPontosFaces(5.8f, 7.2f, 0.0f, 0.2f, 7.2f, 5.8f);
            addPontosFaces(3.6f, 5.0f, 0.0f, 0.2f, 5.0f, 3.6f);
            addPontosFaces(5.8f, 7.2f, 0.0f, 0.2f, 5.0f, 3.6f);

            posTrilha += 32;

            // adiciona os pontos da casa vermelha
            // muros da casa
            casaVermelha.Add(posTrilha);
            casaVermelha.Add(posTrilha + 8);
            casaVermelha.Add(posTrilha + 16);
            casaVermelha.Add(posTrilha + 24);
            addPontosFaces(1.9f, 2.9f, 0.0f, 0.6f, -1.9f, -6.5f);
            addPontosFaces(2.9f, 8.9f, 0.0f, 0.6f, -1.9f, -2.9f);
            addPontosFaces(7.9f, 8.9f, 0.0f, 0.6f, -2.9f, -8.9f);
            addPontosFaces(1.9f, 7.9f, 0.0f, 0.6f, -7.9f, -8.9f);

            posTrilha += 32;

            // plataformas das peças
            posCasaVermelha = posTrilha;
            casaVermelha.Add(posTrilha);
            casaVermelha.Add(posTrilha + 8);
            casaVermelha.Add(posTrilha + 16);
            casaVermelha.Add(posTrilha + 24);
            addPontosFaces(3.6f, 5.0f, 0.0f, 0.2f, -5.8f, -7.2f);
            addPontosFaces(5.8f, 7.2f, 0.0f, 0.2f, -5.8f, -7.2f);
            addPontosFaces(3.6f, 5.0f, 0.0f, 0.2f, -3.6f, -5.0f);
            addPontosFaces(5.8f, 7.2f, 0.0f, 0.2f, -3.6f, -5.0f);

            posTrilha += 32;

            // plataformas das peças salvas
            salvoVermelho.Add(posTrilha);
            salvoVermelho.Add(posTrilha + 8);
            salvoVermelho.Add(posTrilha + 16);
            salvoVermelho.Add(posTrilha + 24);
            addPontosFaces(-5.0f, -3.6f, 0.0f, 0.2f, -5.8f, -7.2f);
            addPontosFaces(-7.2f, -5.8f, 0.0f, 0.2f, -5.8f, -7.2f);
            addPontosFaces(-5.0f, -3.6f, 0.0f, 0.2f, -3.6f, -5.0f);
            addPontosFaces(-7.2f, -5.8f, 0.0f, 0.2f, -3.6f, -5.0f);

            posTrilha += 32;

            Ponto4D pto;


            // adiciona dado
            pto      = getPontoInicialPeca(Ambiente.MEIO, 0, 0.8f);
            obj_Dado = new Dado(Utilitario.charProximo(), this, pto, 0.8f, new Cor(0, 0, 255, 255), new Cor(255, 0, 0, 255));

            Peca p;

            Cor cor = new Cor(0, 0, 255, 255);

            // adiciona peças azuis
            for (int i = 0; i < 4; i++)
            {
                pto = getPontoInicialPeca(Ambiente.CASA_AZUL, i, 0.6f);
                p   = new Peca(Utilitario.charProximo(), this, pto, 0.6f, 1, cor, Ambiente.CASA_AZUL, i);
                pecasAzuis.Add(p);
            }

            cor = new Cor(255, 0, 0, 255);

            // adiciona peças vermelhas
            for (int i = 0; i < 4; i++)
            {
                pto = getPontoInicialPeca(Ambiente.CASA_VERMELHA, i, 0.6f);
                p   = new Peca(Utilitario.charProximo(), this, pto, 0.6f, 2, cor, Ambiente.CASA_VERMELHA, i);
                pecasVermelhas.Add(p);
            }
        }