示例#1
0
        private void DibujarTronco()
        {
            if (texturaTronco == null)
            {
                texturaTronco = new Textura(@"../../Imagenes/Texturas/Arbol/tronco_1.bmp", false);
            }

            Gl.glEnable(Gl.GL_TEXTURE_2D);

            float[] colorBrown = new float[4] {
                124.0f / 255.0f, 87.0f / 255.0f, 59.0f / 255.0f, .15f
            };
            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_AMBIENT_AND_DIFFUSE, colorBrown);
            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SPECULAR, new float[] { 0f, 0f, 0f, 1.0f });

            texturaTronco.Activate();
            Glu.gluQuadricDrawStyle(quadraticCylinder, Glu.GLU_FILL);
            Glu.gluQuadricNormals(quadraticCylinder, Glu.GLU_SMOOTH);
            Glu.gluQuadricTexture(quadraticCylinder, Gl.GL_TRUE);
            Glu.gluCylinder(quadraticCylinder, this.radioBaseTronco, this.radioBaseTronco, this.longitudTronco, CANTIDAD_CARAS, 1);

            Gl.glDisable(Gl.GL_TEXTURE_2D);
        }
示例#2
0
        private void DibujarCopa()
        {
            Gl.glPushMatrix();
            Gl.glRotated(90.0f, 1, 0, 0);

            if (texturaCopa == null)
            {
                texturaCopa = new Textura(@"../../Imagenes/Texturas/Arbol/copa.bmp", false);
            }

            Gl.glEnable(Gl.GL_TEXTURE_2D);
            texturaCopa.Activate();

            float[] colorGray = new float[4] {
                .5f, .5f, .5f, .15f
            };
            float[] colorNone = new float[4] {
                0.0f, 0.0f, 0.0f, 0.0f
            };

            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_AMBIENT_AND_DIFFUSE, colorGray);
            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SPECULAR, new float[] { 0f, 0f, 0f, 1.0f });

            Punto[] posicionesTextura = new Punto[]
            {
                new Punto(0, 0, 0),
                new Punto(1, 0, 0),
                new Punto(0, 1, 0),
                new Punto(1, 1, 0)
            };


            for (int i = 0; i < matrizPuntosCopa.Length - 2; i++) // por columnas duplicadas
            {
                int   cicloPosicionTextura = 0;
                Punto posicionTextura      = null;



                Gl.glBegin(Gl.GL_TRIANGLE_STRIP);
                for (int j = 0; j < matrizPuntosCopa[i].Length; j++)
                {
                    double ancho = (matrizPuntosCopa[i + 1][j] - matrizPuntosCopa[i][j]).Modulo();
                    double alto  = 1.0f;
                    if (j < matrizPuntosCopa[i].Length - 1)
                    {
                        alto = (matrizPuntosCopa[i][j + 1] - matrizPuntosCopa[i][j]).Modulo();
                    }

                    double anchoSobreAlto = ancho / alto;

                    posicionTextura      = posicionesTextura[cicloPosicionTextura];
                    cicloPosicionTextura = (cicloPosicionTextura + 1) % posicionesTextura.Length;

                    Gl.glNormal3d(matrizPuntosCopa[i][j].NormalX, matrizPuntosCopa[i][j].NormalY, matrizPuntosCopa[i][j].NormalZ);
                    Gl.glVertex3d(matrizPuntosCopa[i][j].X, matrizPuntosCopa[i][j].Y, matrizPuntosCopa[i][j].Z);

                    Gl.glTexCoord2d(posicionTextura.X, posicionTextura.Y);

                    posicionTextura      = posicionesTextura[cicloPosicionTextura];
                    cicloPosicionTextura = (cicloPosicionTextura + 1) % posicionesTextura.Length;

                    Gl.glNormal3d(matrizPuntosCopa[i + 1][j].NormalX, matrizPuntosCopa[i + 1][j].NormalY, matrizPuntosCopa[i + 1][j].NormalZ);
                    Gl.glVertex3d(matrizPuntosCopa[i + 1][j].X, matrizPuntosCopa[i + 1][j].Y, matrizPuntosCopa[i + 1][j].Z);
                    Gl.glTexCoord2d(posicionTextura.X, posicionTextura.Y);
                }
                Gl.glEnd();
            }
            Gl.glDisable(Gl.GL_TEXTURE_2D);

            if (DIBUJAR_NORMALES)
            {
                Gl.glDisable(Gl.GL_LIGHTING);
                for (int i = 0; i < matrizPuntosCopa.Length - 2; i++) // por columnas duplicadas
                {
                    for (int j = 0; j < matrizPuntosCopa[i].Length; j++)
                    {
                        Gl.glBegin(Gl.GL_LINES);
                        Gl.glColor3d(1, 0, 0);
                        Gl.glVertex3d(matrizPuntosCopa[i][j].X, matrizPuntosCopa[i][j].Y, matrizPuntosCopa[i][j].Z);
                        Gl.glColor3d(.2, 0, 0);
                        Gl.glVertex3d(matrizPuntosCopa[i][j].NormalX, matrizPuntosCopa[i][j].NormalY, matrizPuntosCopa[i][j].NormalZ);
                        Gl.glEnd();
                    }
                }
                Gl.glEnable(Gl.GL_LIGHTING);
            }
            Gl.glPopMatrix();
        }