Exemple #1
0
        private void DrawInit()
        {
            //Uncoment next procedure to take material properties in account

            SetMaterial();
            //only for demostration of possibilities, not very accurate

            SetLight();

            //Gl.glViewport(0, 0, this.ClientSize.Width, this.ClientSize.Height);

            Gl.glClearColor(0, 0, 0, 0);
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glEnable(Gl.GL_BLEND);
            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);

            Gl.glGenTextures(2, Texture);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, Texture[0]);
            Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            LoadTexture.loadBMP("saturn.jpg", this.Pict);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, Texture[1]);
            Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            LoadTexture.loadRings();
            CalculateDisk();
            quadObj = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(quadObj, Gl.GL_TRUE);
        }
Exemple #2
0
        private void DrawAgarrador(bool esIzquierdo)
        {
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glPushMatrix();
            Gl.glEnable(Gl.GL_LIGHTING);
            Glu.GLUquadric quad = Glu.gluNewQuadric();

            Gl.glTranslated((esIzquierdo ? -1 : 1) * ANCHO_RECTANGULO / 3d, LARGO_BASE + LARGO_PARAGOLPE + (LARGO_AGARRADOR / 2d), -RADIO_AGARRADOR);
            Gl.glRotated(90, 1, 0, 0);

            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_AMBIENT, LUZ_AZUL);
            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_DIFFUSE, LUZ_AZUL);
            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SPECULAR, this.LuzBrillo);
            Gl.glMateriali(Gl.GL_FRONT, Gl.GL_SHININESS, this.Shininess);

            Glu.gluCylinder(quad, RADIO_AGARRADOR, RADIO_AGARRADOR, LARGO_AGARRADOR, 20, 20);
            Gl.glRotated(180, 1, 0, 0);

            Glu.gluDisk(quad, 0, RADIO_AGARRADOR, 20, 20);
            Glu.gluCylinder(quad, RADIO_AGARRADOR * 2d, RADIO_AGARRADOR * 2d, LARGO_AGARRADOR * 0.2, 20, 20);

            Gl.glTranslated(0, 0, LARGO_AGARRADOR * 0.2d);
            Glu.gluDisk(quad, 0, RADIO_AGARRADOR * 2d, 20, 20);

            Glu.gluDeleteQuadric(quad);
            Gl.glDisable(Gl.GL_LIGHTING);
            Gl.glPopMatrix();
        }
        public Sphere(float xMin, float yMin, float zMin, float xMax, float yMax, float zMax)
            : base(xMin, yMin, zMin, xMax, yMax, zMax)
        {
            if (xMax > xMin)
            {
                m_radius = xMax - xMin;
            }
            else
            {
                m_radius = xMin - xMax;
            }

            m_quadric = Glu.gluNewQuadric();
            try
            {
                Glu.gluQuadricTexture(m_quadric, Gl.GL_TRUE);
                Glu.gluQuadricDrawStyle(m_quadric, Glu.GLU_FILL);
                Glu.gluQuadricNormals(m_quadric, Glu.GLU_SMOOTH);
                Glu.gluQuadricOrientation(m_quadric, Glu.GLU_OUTSIDE);
            }
            finally //if any errors, delete quadric
            {
                Glu.gluDeleteQuadric(m_quadric);
            }
        }
Exemple #4
0
        protected void doorKnob()
        {
            int cullFace;

            Gl.glGetBooleanv(Gl.GL_CULL_FACE, out cullFace);
            Gl.glDisable(Gl.GL_CULL_FACE);

            Glu.GLUquadric q = Glu.gluNewQuadric();
            //Gl.glColor3d(1,1,1);
            Gl.glColor3d(1, 1, 0);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, this.texturaKnob);
            Glu.gluQuadricTexture(q, Gl.GL_TRUE);
            Glu.gluQuadricNormals(q, Gl.GL_SMOOTH);
            Gl.glPushMatrix();
            Glu.gluCylinder(q, 5, 1, 1, 15, 3);
            Glu.gluCylinder(q, 1, 1, 4, 10, 1);
            Gl.glPushMatrix();
            Gl.glTranslated(0, 0, 5);
            Gl.glScaled(1, 1, .5);
            Glu.gluSphere(q, 4, 10, 10);
            Gl.glPopMatrix();
            Gl.glPopMatrix();
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, 0);
            Glu.gluDeleteQuadric(q);

            if (cullFace != Gl.GL_FALSE)
            {
                Gl.glEnable(Gl.GL_CULL_FACE);
            }
        }
Exemple #5
0
        /// <summary>
        /// Draws three selected vertices as spheres.
        /// </summary>
        private void DrawVertices()
        {
            Glu.GLUquadric quadobj = Glu.gluNewQuadric();
            Glu.gluQuadricDrawStyle(quadobj, Glu.GLU_FILL);

            if (vertices[0])
            {
                Gl.glColor3fv(aColor);
                Gl.glPushMatrix();
                Gl.glTranslatef(owner.TriVertices[0], owner.TriVertices[1], owner.TriVertices[2]);
                Glu.gluSphere(quadobj, 2, 10, 10);
                Gl.glPopMatrix();
            }

            if (vertices[1])
            {
                Gl.glColor3fv(bColor);
                Gl.glPushMatrix();
                Gl.glTranslatef(owner.TriVertices[3], owner.TriVertices[4], owner.TriVertices[5]);
                Glu.gluSphere(quadobj, 2, 10, 10);
                Gl.glPopMatrix();
            }

            if (vertices[2])
            {
                Gl.glColor3fv(cColor);
                Gl.glPushMatrix();
                Gl.glTranslatef(owner.TriVertices[6], owner.TriVertices[7], owner.TriVertices[8]);
                Glu.gluSphere(quadobj, 2, 10, 10);
                Gl.glPopMatrix();
            }

            Glu.gluDeleteQuadric(quadobj);
        }
Exemple #6
0
 protected void pintaBisagra()
 {
     #region bisagras
     Gl.glBindTexture(Gl.GL_TEXTURE_2D, this.texturaBisagra);
     Gl.glColor3d(1, 1, 1);
     Glu.GLUquadric q = Glu.gluNewQuadric();
     Glu.gluQuadricTexture(q, Gl.GL_TRUE);
     double h = (height - border) / 3;
     double m = (height - border) / 2 - 4;
     Gl.glPushMatrix();
     Gl.glTranslated(0, m, 0);
     Gl.glRotated(90, -1, 0, 0);
     Glu.gluCylinder(q, 1, 1, 8, 10, 10);
     Gl.glPopMatrix();
     Gl.glPushMatrix();
     Gl.glTranslated(0, m - h, 0);
     Gl.glRotated(90, -1, 0, 0);
     Glu.gluCylinder(q, 1, 1, 8, 10, 10);
     Gl.glPopMatrix();
     Gl.glPushMatrix();
     Gl.glTranslated(0, m + h, 0);
     Gl.glRotated(90, -1, 0, 0);
     Glu.gluCylinder(q, 1, 1, 8, 10, 10);
     Gl.glPopMatrix();
     Gl.glBindTexture(Gl.GL_TEXTURE_2D, 0);
     Glu.gluDeleteQuadric(q);
     #endregion
 }
Exemple #7
0
        /// <summary>
        ///     All setup for OpenGL goes here.
        /// </summary>
        /// <returns>
        ///     Returns <c>true</c> on success, otherwise <c>false</c>.
        /// </returns>
        private static bool InitGL()                                            // All Setup For OpenGL Goes Here
        {
            if (!LoadGLTextures())                                              // If Loading The Textures Failed
            {
                return(false);                                                  // Return False
            }
            Gl.glEnable(Gl.GL_TEXTURE_2D);                                      // Enable Texture Mapping
            Gl.glShadeModel(Gl.GL_SMOOTH);                                      // Enable Smooth Shading
            Gl.glClearColor(0, 0, 0, 0.5f);                                     // Black Background
            Gl.glClearDepth(1);                                                 // Depth Buffer Setup
            Gl.glEnable(Gl.GL_DEPTH_TEST);                                      // Enables Depth Testing
            Gl.glDepthFunc(Gl.GL_LEQUAL);                                       // The Type Of Depth Testing To Do
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);         // Really Nice Perspective Calculations

            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_AMBIENT, LightAmbient);            // Setup The Ambient Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_DIFFUSE, LightDiffuse);            // Setup The Diffuse Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_POSITION, LightPosition);          // Position The Light
            Gl.glEnable(Gl.GL_LIGHT1);                                          // Enable Light One

            quadratic = Glu.gluNewQuadric();                                    // Create A Pointer To The Quadric Object (Return 0 If No Memory)
            Glu.gluQuadricNormals(quadratic, Glu.GLU_SMOOTH);                   // Create Smooth Normals
            Glu.gluQuadricTexture(quadratic, Gl.GL_TRUE);                       // Create Texture Coords

            Gl.glTexGeni(Gl.GL_S, Gl.GL_TEXTURE_GEN_MODE, Gl.GL_SPHERE_MAP);    // Set The Texture Generation Mode For S To Sphere Mapping (NEW)
            Gl.glTexGeni(Gl.GL_T, Gl.GL_TEXTURE_GEN_MODE, Gl.GL_SPHERE_MAP);    // Set The Texture Generation Mode For T To Sphere Mapping (NEW)
            return(true);                                                       // Initialization Went OK
        }
Exemple #8
0
        public void DrawCylinder()
        {
            if (!bCylinderDefined)
            {
                Gl.glNewList(LISTCYLINDER, Gl.GL_COMPILE);

                Gl.glPushMatrix();
                Glu.GLUquadric quadratic = Glu.gluNewQuadric();   // Create A Pointer To The Quadric Object
                Glu.gluQuadricNormals(quadratic, Glu.GLU_SMOOTH); // Create Smooth Normals
                Glu.gluQuadricTexture(quadratic, 32);             // Create Texture Coords
                Gl.glTranslatef(0.0f, 0.0f, -0.5f);               // Center The Cylinder
                Glu.gluQuadricOrientation(quadratic, Glu.GLU_OUTSIDE);
                Glu.gluCylinder(quadratic, 0.5f, 0.5f, 1.0f, 32, 32);
                //glTranslatef(0.0f,0.0f,-0.5f);
                Gl.glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
                Glu.gluDisk(quadratic, 0.0f, 0.5f, 32, 32);
                Gl.glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
                Gl.glTranslatef(0.0f, 0.0f, 1.0f);
                Glu.gluDisk(quadratic, 0.0f, 0.5f, 32, 32);
                Gl.glPopMatrix();

                Gl.glEndList();
                bCylinderDefined = true;
            }

            Gl.glCallList(LISTCYLINDER);
        }
Exemple #9
0
        protected void pintaCadena()
        {
#if drawCenter
            Gl.glPushMatrix();
            Gl.glTranslated(position.X, position.Y, position.Z);
            Glu.GLUquadric q = Glu.gluNewQuadric();
            Gl.glColor3d(1, 1, 0);
            Glu.gluSphere(q, 2, 5, 5);
            Glu.gluDeleteQuadric(q);
            Gl.glPopMatrix();
#endif
            Gl.glPushMatrix();

            Gl.glTranslated(position.X, position.Y + yeslabon, position.Z);
            Gl.glColor3d(128 / 256.0, 64 / 256.0, 64 / 256.0);
            int cantidadEslabones = (int)Math.Ceiling(length / (yeslabon - breadth));
            //for (double d =0; d <= length; d+=yeslabon+breadth)
            for (int i = 0; i < cantidadEslabones; i++)
            {
                Gl.glTranslated(0, -yeslabon + breadth, 0);
                Gl.glRotated(90, 0, 1, 0);
                pintaEslabon();
            }
            Gl.glPopMatrix();
        }
Exemple #10
0
        void DrawSelectionHandle()
        {
            graphics.PushMatrix();

            graphics.Scale(1.5, 1.5, 1.5);
            Glu.GLUquadric quadratic = Glu.gluNewQuadric();   // Create A Pointer To The Quadric Entity

            Glu.gluQuadricNormals(quadratic, Glu.GLU_SMOOTH); // Create Smooth Normals

            Glu.gluQuadricOrientation(quadratic, Glu.GLU_OUTSIDE);
            graphics.Translate(0.0f, 0.0f, -0.025f);   // Center The Cylinder
            Glu.gluCylinder(quadratic, 0.5f, 0.5f, 0.05f, 20, 3);

            Glu.gluQuadricOrientation(quadratic, Glu.GLU_INSIDE);
            Glu.gluCylinder(quadratic, 0.48f, 0.5f, 0.05f, 20, 3);

            Glu.gluQuadricOrientation(quadratic, Glu.GLU_OUTSIDE);

            graphics.Rotate(180.0f, 1.0f, 0.0f, 0.0f);
            Glu.gluDisk(quadratic, 0.48f, 0.5f, 20, 3);

            graphics.Rotate(180.0f, 1.0f, 0.0f, 0.0f);
            graphics.Translate(0.0f, 0.0f, 0.05f);
            Glu.gluDisk(quadratic, 0.48f, 0.5f, 20, 3);


            graphics.PopMatrix();
        }
        private void RenderAvatars(RegionContextBase rcontext, RegionRenderInfo rri)
        {
            OMV.Vector3 avatarColor        = ModuleParams.ParamVector3(m_renderer.m_moduleName + ".OGL.Avatar.Color");
            float       avatarTransparancy = ModuleParams.ParamFloat(m_renderer.m_moduleName + ".OGL.Avatar.Transparancy");

            float[] m_avatarMaterialColor = { avatarColor.X, avatarColor.Y, avatarColor.Z, avatarTransparancy };

            lock (rri.renderAvatarList) {
                foreach (RenderableAvatar rav in rri.renderAvatarList.Values)
                {
                    GL.PushMatrix();
                    GL.Translate(rav.avatar.RegionPosition.X,
                                 rav.avatar.RegionPosition.Y,
                                 rav.avatar.RegionPosition.Z);

                    GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, m_avatarMaterialColor);
                    GL.Disable(EnableCap.Texture2D);
                    Glu.GLUquadric quad = Glu.gluNewQuadric();
                    Glu.gluSphere(quad, 0.5d, 10, 10);
                    Glu.gluDeleteQuadric(quad);

                    GL.PopMatrix();
                }
            }
        }
Exemple #12
0
        /* Create a display list to draw a galaxy,
         * since To draw even a small polygon such a number of times is very expensive*/
        private void CreateDisplayList(int a)
        {
            // generation of the display list
            DisplayListNom[a] = Gl.glGenLists(a);

            // Start creating a list
            Gl.glNewList(DisplayListNom[a], Gl.GL_COMPILE);

            Gl.glPushMatrix();
            Gl.glEnable(Gl.GL_TEXTURE_2D);

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, GalacticForm.mGlTextureObject[a]);
            Gl.glTranslated(0, 0, 0);
            Gl.glBegin(Gl.GL_QUADS);
            Glu.GLUquadric myEarth = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(myEarth, Gl.GL_TRUE);
            //Glu.gluSphere(myEarth, 0.1, 32, 32);
            Glu.gluDisk(myEarth, 0.001, size, 32, 32);

            //Glut.glutSolidSphere(0.05, 32, 32);
            Glu.gluDeleteQuadric(myEarth);
            Gl.glPopMatrix();
            Gl.glDisable(Gl.GL_TEXTURE_2D);

            //Glut.glutSolidSphere(0.05, 32, 32);
            Gl.glEnd();

            Gl.glPushMatrix();

            // Finish drawing the galaxy
            Gl.glEndList();

            // Flag - display list is created
            isDisplayList = true;
        }
Exemple #13
0
        /// <summary>
        ///     All setup for OpenGL goes here.
        /// </summary>
        /// <returns>
        ///     Returns <c>true</c> on success, otherwise <c>false</c>.
        /// </returns>
        private static bool InitGL()                                            // All Setup For OpenGL Goes Here
        {
            if (!LoadGLTextures())                                              // If Loading The Textures Failed
            {
                return(false);                                                  // Return False
            }
            Gl.glShadeModel(Gl.GL_SMOOTH);                                      // Enable Smooth Shading
            Gl.glClearColor(0.2f, 0.5f, 1, 1);                                  // Background
            Gl.glClearDepth(1);                                                 // Depth Buffer Setup
            Gl.glClearStencil(0);                                               // Clear The Stencil Buffer To 0
            Gl.glEnable(Gl.GL_DEPTH_TEST);                                      // Enables Depth Testing
            Gl.glDepthFunc(Gl.GL_LEQUAL);                                       // The Type Of Depth Testing To Do
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);         // Really Nice Perspective Calculations
            Gl.glEnable(Gl.GL_TEXTURE_2D);                                      // Enable 2D Texture Mapping
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_AMBIENT, LightAmb);                // Set The Ambient Lighting For Light0
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_DIFFUSE, LightDif);                // Set The Diffuse Lighting For Light0
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_POSITION, LightPos);               // Set The Position For Light0
            Gl.glEnable(Gl.GL_LIGHT0);                                          // Enable Light 0
            Gl.glEnable(Gl.GL_LIGHTING);                                        // Enable Lighting
            q = Glu.gluNewQuadric();                                            // Create A New Quadratic
            Glu.gluQuadricNormals(q, Gl.GL_SMOOTH);                             // Generate Smooth Normals For The Quad
            Glu.gluQuadricTexture(q, Gl.GL_TRUE);                               // Enable Texture Coords For The Quad
            Gl.glTexGeni(Gl.GL_S, Gl.GL_TEXTURE_GEN_MODE, Gl.GL_SPHERE_MAP);    // Set Up Sphere Mapping
            Gl.glTexGeni(Gl.GL_T, Gl.GL_TEXTURE_GEN_MODE, Gl.GL_SPHERE_MAP);    // Set Up Sphere Mapping

            return(true);                                                       // Initialization Went OK
        }
Exemple #14
0
        protected override void Particular()
        {
            //Gl.glColor3d(0.26171875,0.55078125,0.69140625);
            Gl.glColor3d(1, 1, 1);
            Gl.glPushMatrix();
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, GlUtils.Texture("COLCHON"));
            GlUtils.PintaOrtoedro(largo, 10, ancho, true);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, GlUtils.Texture("WOOD1"));
            Glu.GLUquadric q = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(q, Gl.GL_TRUE);
            Gl.glTranslated(-largo + 5, -10, -ancho + 5);
            Gl.glRotated(90, 1, 0, 0);
            Glu.gluCylinder(q, 5, 2, 20, 20, 20);
            Gl.glRotated(-90, 1, 0, 0);
            Gl.glTranslated(0, 0, 2 * ancho - 10);
            Gl.glRotated(90, 1, 0, 0);
            Glu.gluCylinder(q, 5, 2, 20, 20, 20);
            Gl.glRotated(-90, 1, 0, 0);
            Gl.glTranslated(2 * largo - 10, 0, 0);
            Gl.glRotated(90, 1, 0, 0);
            Glu.gluCylinder(q, 5, 2, 20, 20, 20);
            Gl.glRotated(-90, 1, 0, 0);
            Gl.glTranslated(0, 0, -2 * ancho + 10);
            Gl.glRotated(90, 1, 0, 0);
            Glu.gluCylinder(q, 5, 2, 20, 20, 20);
            Gl.glRotated(-90, 1, 0, 0);
            Gl.glPopMatrix();
//			yInc = 30;
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, 0);
        }
        /// <summary>
        /// Draws the corners of one selected Triangle as spheres.
        /// </summary>
        private void DrawCorners()
        {
            Glu.GLUquadric quadobj = Glu.gluNewQuadric();
            Glu.gluQuadricDrawStyle(quadobj, Glu.GLU_FILL);

            Gl.glColor3fv(aColor);
            Gl.glPushMatrix();
            Gl.glTranslatef(owner.Corners[0], owner.Corners[1], owner.Corners[2]);
            Glu.gluSphere(quadobj, scale / 400, 10, 10);
            Gl.glPopMatrix();

            Gl.glColor3fv(bColor);
            Gl.glPushMatrix();
            Gl.glTranslatef(owner.Corners[3], owner.Corners[4], owner.Corners[5]);
            Glu.gluSphere(quadobj, scale / 400, 10, 10);
            Gl.glPopMatrix();

            Gl.glColor3fv(cColor);
            Gl.glPushMatrix();
            Gl.glTranslatef(owner.Corners[6], owner.Corners[7], owner.Corners[8]);
            Glu.gluSphere(quadobj, scale / 400, 10, 10);
            Gl.glPopMatrix();

            Glu.gluDeleteQuadric(quadobj);
        }
Exemple #16
0
        public override void Render()
        {
            if (!canCullFace)
            {
                Gl.glGetBooleanv(Gl.GL_CULL_FACE, out cullFace);
                Gl.glDisable(Gl.GL_CULL_FACE);
            }
            #region Pintar una gran esfera en el 0,0 del objeto
#if drawCenter
            Gl.glPushMatrix();
            Gl.glTranslated(center.X, center.Y, center.Z);
            Glu.GLUquadric q = Glu.gluNewQuadric();
            Gl.glColor3d(1, 0, 0);
            Glu.gluSphere(q, 2, 5, 5);
            Glu.gluDeleteQuadric(q);
            Gl.glPopMatrix();
#endif
            #endregion
            Gl.glPushMatrix();
            Gl.glTranslated(center.X, center.Y + YInc, center.Z);
            Gl.glRotated(angle, 0, 1, 0);
            if (this.customRendering)
            {
                this.customRenderer();
            }
            else
            {
                Gl.glCallList(idObject);
            }
            Gl.glPopMatrix();
            if (!canCullFace && cullFace != Gl.GL_FALSE)
            {
                Gl.glEnable(Gl.GL_CULL_FACE);
            }
        }
Exemple #17
0
        protected override void Particular()
        {
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, GlUtils.Texture("old7"));
            Gl.glLightModeli(Gl.GL_LIGHT_MODEL_TWO_SIDE, 1);

            Glu.GLUquadric q = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(q, Gl.GL_TRUE);
            Gl.glColor3d(1, 1, 1);
            Gl.glPushMatrix();
            Gl.glRotated(90, 1, 4, 0);
            Glu.gluDisk(q, 0, 5 * 2, 20, 20);
            Gl.glRotated(180, 1, 0, 0);
            Glu.gluCylinder(q, 5 * 2, 8 * 2, 3 * 2, 20, 20);
            Gl.glTranslated(0, 0, 2.5 * 2);
            Gl.glColor3d(0, 0, 0);
            Glu.gluDisk(q, 14.8, 15, 20, 20);
            Gl.glTranslated(0, 0, -2.5 * 2);
            Gl.glRotated(90, 1, 4, 0);
            Gl.glPopMatrix();
            yInc = 0;
            Gl.glColor3d(1, 1, 1);
            Glu.gluDeleteQuadric(q);
            Gl.glLightModeli(Gl.GL_LIGHT_MODEL_TWO_SIDE, 0);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, 0);
        }
Exemple #18
0
        /// <summary>
        /// Zeichenroutine für o2Object wird überschieben, da Sonne eine Lichtquelle sind
        /// </summary>
        public override void DrawObject()
        {
            float X = Position.x;
            float Y = Position.y;
            float Z = Position.z;
            float r = Size;

            float[] Color = { Farbe[0], Farbe[1], Farbe[2], Mass / PlanetAdvanced2.initSunMass };

            Gl.glDisable(Gl.GL_LIGHTING); // Beleuchtung Ausmachen, da die Sonne ja die LichtQuelle ist.
            Gl.glPushMatrix();
            Gl.glTranslatef(X, Y, Z);
            float[] light0Pos = { 0f, 0f, 0f, 1.0f };
            Gl.glLightfv(_light, Gl.GL_POSITION, light0Pos); // Lichtquelle0 in der Sonne
            Gl.glEnable(_light);

            Gl.glColor3f(Farbe[0], Farbe[1], Farbe[2]);
            Glu.GLUquadric obj = Glu.gluNewQuadric();
            Glu.gluSphere(obj, r, 20, 20);
            Gl.glPopMatrix();

            if (StaticVars.Light)
            {
                Gl.glEnable(Gl.GL_LIGHTING);
            }
        }
Exemple #19
0
        /// <summary> Рисует гирлянду из сфер. </summary>
        private void DrawSpheres()
        {
            Glu.GLUquadric quad = Glu.gluNewQuadric();

            for (int i = 0; i < 50; i++)
            {
                Vector3D position =
                    new Vector3D((float)((2.0 + 3.0 * i / 50.0) * Math.Sin(i)),
                                 (float)((2.0 + 3.0 * i / 50.0) * Math.Cos(i)),
                                 (float)(-4.0 + 9.0 * i / 50.0));

                Gl.glPushMatrix();

                Gl.glTranslatef(position.X * (float)(Math.Sin(time / 100.0)),
                                position.Y * (float)(Math.Cos(time / 100.0)),
                                position.Z * (float)(0.5 + 0.5 * Math.Sin(time / 100.0)));

                Gl.glColor3fv(Vector3D.Abs(position / 5.0f).ToArray());

                Glu.gluSphere(quad, 0.3f, 20, 20);

                Gl.glPopMatrix();
            }

            Glu.gluDeleteQuadric(quad);
        }
Exemple #20
0
        public Sphere(float xMin, float yMin, float zMin, float xMax, float yMax, float zMax)
            : base(xMin, yMin, zMin, xMax, yMax, zMax)
        {
            if (xMax > xMin)
            {
                m_radius = xMax - xMin;
            }
            else
            {
                m_radius = xMin - xMax;
            }

            m_quadric = Glu.gluNewQuadric();
            try
            {
                Glu.gluQuadricTexture(m_quadric, Gl.GL_TRUE);
                Glu.gluQuadricDrawStyle(m_quadric, Glu.GLU_FILL);
                Glu.gluQuadricNormals(m_quadric, Glu.GLU_SMOOTH);
                Glu.gluQuadricOrientation(m_quadric, Glu.GLU_OUTSIDE);
            }
            finally //if any errors, delete quadric
            {
                Glu.gluDeleteQuadric(m_quadric);
            }
        }
    public override void Recompile()
    {
        this.abaj.Recompile();
        Gl.glNewList(idVisualizar, Gl.GL_COMPILE);
        Gl.glPushMatrix();

        Gl.glDisable(Gl.GL_CULL_FACE);

        Glu.GLUquadric sph = Glu.gluNewQuadric();
        Glu.gluQuadricOrientation(sph, Glu.GLU_OUTSIDE);
        Gl.glTranslated(start.x, start.y, start.z);
        Gl.glTranslated(-(Math.Sqrt(Math.Pow(this.alto, 2) - Math.Pow(this.alto, 2) / 4)), 0, 0);
        Gl.glRotated(15, 0, 0, 1);
        Gl.glColor3fv(color);
        Gl.glClipPlane(Gl.GL_CLIP_PLANE0, new double[] { 1.0, 0.0, 0, -(Math.Sqrt(Math.Pow(this.alto, 2) - Math.Pow(this.alto, 2) / 4)) });
        Gl.glEnable(Gl.GL_CLIP_PLANE0);
        Glu.gluQuadricNormals(sph, Glu.GLU_SMOOTH);
        Glu.gluCylinder(sph, this.alto, this.alto, this.largo, 32, 32);
        sph = Glu.gluNewQuadric();
        Glu.gluQuadricNormals(sph, Glu.GLU_SMOOTH);
        Glu.gluDisk(sph, 0, this.alto, 32, 32);

        sph = Glu.gluNewQuadric();
        Glu.gluQuadricNormals(sph, Glu.GLU_SMOOTH);
        Gl.glTranslated(0, 0, this.largo);
        Glu.gluDisk(sph, 0, this.alto, 32, 32);
        Gl.glDisable(Gl.GL_CLIP_PLANE0);

        Gl.glEnable(Gl.GL_CULL_FACE);
        Gl.glPopMatrix();
        Gl.glEndList();
    }
Exemple #22
0
        }// drawCylinder

        public static void drawCylinderTranslucent(Vector3d u, Vector3d v, double r, Color c)
        {
            Gl.glEnable(Gl.GL_BLEND);
            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
            Gl.glDisable(Gl.GL_CULL_FACE);

            Glu.GLUquadric quad   = Glu.gluNewQuadric();
            double         height = (u - v).Length();
            Vector3d       dir    = (v - u).normalize();
            double         angle  = Math.Acos(dir.z / dir.Length()) * 180 / Math.PI;

            drawSphere(u, r, c);

            Gl.glColor3ub(c.R, c.G, c.B);
            Gl.glPushMatrix();
            Gl.glTranslated(u.x, u.y, u.z);
            Gl.glRotated(angle, -dir.y, dir.x, 0);
            Glu.gluCylinder(quad, r, r, height, _NSlices, _NSlices);
            Gl.glPopMatrix();

            drawSphere(v, r, c);

            Glu.gluDeleteQuadric(quad);

            Gl.glDisable(Gl.GL_BLEND);
            Gl.glDisable(Gl.GL_CULL_FACE);
        }// drawCylinderTranslucent
Exemple #23
0
        /// <summary>Нарисовать дерево</summary>
        private void DrawTrees()
        {
            Glu.GLUquadric q = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(q, Gl.GL_TRUE);
            Glu.gluQuadricDrawStyle(q, Glu.GLU_FILL);

            Gl.glTranslated(0.0, -0.5, 0.0);
            Gl.glRotated(90, -1.0, 0.0, 0.0);

            { // рисуем ствол
                // включаем режим текстурирования, указывая индификатор WoodTexture
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, WoodTexture);

                // рисуем цилиндр
                Glu.gluCylinder(q, 0.2, 0.2, 2, 50, 50);
            }

            { // рисуем крону
                // включаем режим текстурирования, указывая индификатор TreeTexture
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, TreeTexture);

                // рисуем сферу
                Gl.glTranslated(0.0, 0.0, 2.0);

                Glu.gluSphere(q, 1, 50, 50);
                Gl.glTranslated(0.0, 0.0, -2.0);
            }

            Gl.glRotated(90, 1.0, 0.0, 0.0);
            Gl.glTranslated(0.0, 0.5, 0.0);

            Glu.gluDeleteQuadric(q);
        }
Exemple #24
0
        public override void Render()
        {
#if drawCenter
            Gl.glPushMatrix();
            Gl.glTranslated(position.X, position.Y, position.Z);
            Glu.GLUquadric qu = Glu.gluNewQuadric();
            Gl.glColor3d(1, 1, 0);
            Glu.gluSphere(qu, 2, 5, 5);
            Glu.gluDeleteQuadric(qu);
            Gl.glPopMatrix();
#endif
            Glu.GLUquadric q = Glu.gluNewQuadric();
            Gl.glPushMatrix();
            Gl.glTranslated(position.X, position.Y, position.Z);
            Gl.glColor3d(128 / 256.0, 64 / 256.0, 64 / 256.0);
            Gl.glColor3d(.55, .425, .425);
            Gl.glRotated(90, 1, 0, 0);
            Glu.gluCylinder(q, 10, 1, 3, 10, 5);
            Gl.glPopMatrix();
            Glu.gluDeleteQuadric(q);
            c.Render();
            Gl.glTranslated(position.X, position.Y - length - 30, position.Z);
            renderLamp();
            Gl.glPopMatrix();
        }
Exemple #25
0
 private void Init(double Base, int Slices, int Stacks)
 {
     mBase    = Base;
     mSlices  = Slices;
     mStacks  = Stacks;
     mQuadric = Glu.gluNewQuadric();
     //Glu.gluQuadricOrientation(mQuadricDisk, Glu.GLU_INSIDE);
 }
 private void Init(double Base, double Height, int Slices, int Stacks)
 {
     mBase        = Base;
     mHeight      = Height;
     mSlices      = Slices;
     mStacks      = Stacks;
     mQuadricCone = Glu.gluNewQuadric();
     mQuadricDisk = Glu.gluNewQuadric();
     Glu.gluQuadricOrientation(mQuadricDisk, Glu.GLU_INSIDE);
 }
Exemple #27
0
 private void Init(_Vector3D p1, _Vector3D p2)
 {
     mBegin = p1;
     mEnd   = p2;
     ChangeMatrix();
     pObj = Glu.gluNewQuadric();
     Glu.gluQuadricDrawStyle(pObj, Glu.GLU_FILL);
     Glu.gluQuadricNormals(pObj, Glu.GLU_SMOOTH);
     Glu.gluQuadricOrientation(pObj, Glu.GLU_OUTSIDE);
     Glu.gluQuadricTexture(pObj, Glu.GLU_FALSE);
 }
Exemple #28
0
        }// drawCylinderTranslucent

        public static void drawSphere(Vector3d o, double r, Color c)
        {
            Gl.glShadeModel(Gl.GL_SMOOTH);
            Glu.GLUquadric quad = Glu.gluNewQuadric();
            Gl.glColor3ub(c.R, c.G, c.B);
            Gl.glPushMatrix();
            Gl.glTranslated(o.x, o.y, o.z);
            Glu.gluSphere(quad, r / 2, _NSlices, _NSlices);
            Gl.glPopMatrix();
            Glu.gluDeleteQuadric(quad);
        }// drawSphere
Exemple #29
0
 void pintaPata(double alto)
 {
     Glu.GLUquadric q = Glu.gluNewQuadric();
     Glu.gluQuadricTexture(q, Gl.GL_TRUE);
     Gl.glTranslated(0, -alto, 0);
     Gl.glRotated(90, -1, 0, 0);
     Glu.gluCylinder(q, 5, 8, 2 * alto, 20, 20);
     Gl.glRotated(-90, -1, 0, 0);
     Gl.glTranslated(0, alto, 0);
     Glu.gluDeleteQuadric(q);
 }
Exemple #30
0
        private void DrawLinterna(bool prenderLinterna)
        {
            float[] locomotora_light_color = new float[4] {
                1.0f, 1.0f, 1.0f, 1.0f
            };

            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glPushMatrix();
            Gl.glEnable(Gl.GL_LIGHTING);
            Glu.GLUquadric quad = Glu.gluNewQuadric();

            Gl.glTranslated(0, LARGO_BASE - LARGO_BASE * 0.1d, RADIO_TROMPA * 2d);

            Gl.glLightfv(Gl.GL_LIGHT6, Gl.GL_POSITION, light_linterna_position);
            Gl.glLightfv(Gl.GL_LIGHT6, Gl.GL_SPOT_DIRECTION, light_linterna_direction);
            Gl.glLightfv(Gl.GL_LIGHT6, Gl.GL_DIFFUSE, locomotora_light_color);
            Gl.glLightfv(Gl.GL_LIGHT6, Gl.GL_AMBIENT, new float[4] {
                0f, 0f, 0f, 1f
            });
            Gl.glLightfv(Gl.GL_LIGHT6, Gl.GL_SPECULAR, new float[4] {
                1f, 1f, 1f, 1f
            });
            Gl.glLightfv(Gl.GL_LIGHT6, Gl.GL_LINEAR_ATTENUATION, new float[] { .01f });
            Gl.glLightfv(Gl.GL_LIGHT6, Gl.GL_SPOT_CUTOFF, new float[] { 30.0f });

            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_AMBIENT, LUZ_ROJO);
            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_DIFFUSE, LUZ_ROJO);
            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_SPECULAR, this.LuzBrillo);
            Gl.glMateriali(Gl.GL_FRONT, Gl.GL_SHININESS, this.Shininess);

            Glu.gluCylinder(quad, RADIO_SOSTENEDOR_LUZ, RADIO_SOSTENEDOR_LUZ, ALTO_SOSTENEDOR_LUZ, 20, 20);

            Gl.glTranslated(0, ANCHO_CONTENEDOR_LUZ * 0.5d, ALTO_SOSTENEDOR_LUZ + RADIO_CONTENEDOR_LUZ);
            Gl.glRotated(90, 1, 0, 0);
            Glu.gluCylinder(quad, RADIO_CONTENEDOR_LUZ, RADIO_CONTENEDOR_LUZ, ANCHO_CONTENEDOR_LUZ, 20, 20);

            Gl.glTranslated(0, 0, ANCHO_CONTENEDOR_LUZ);
            Glu.gluDisk(quad, 0, RADIO_CONTENEDOR_LUZ, 20, 20);

            if (prenderLinterna)
            {
                Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_EMISSION, this.luzEmicionPrendida);
            }
            Gl.glTranslated(0, 0, -(ANCHO_CONTENEDOR_LUZ * 0.8d));
            Gl.glRotated(180, 1, 0, 0);
            //Gl.glScaled(0.5d, 1, 2);
            Glu.gluDisk(quad, 0, RADIO_CONTENEDOR_LUZ, 20, 20);
            Gl.glMaterialfv(Gl.GL_FRONT, Gl.GL_EMISSION, this.luzEmicionApagada);

            Glu.gluDeleteQuadric(quad);
            Gl.glDisable(Gl.GL_LIGHTING);
            Gl.glPopMatrix();
        }
Exemple #31
0
 public void Create()
 {
     Glu.GLUquadric quadratic = Glu.gluNewQuadric();
     Glu.gluQuadricNormals(quadratic, Glu.GLU_SMOOTH);
     Glu.gluQuadricTexture(quadratic, Gl.GL_TRUE);
     list = Gl.glGenLists(1);
     Gl.glNewList(list, Gl.GL_COMPILE);
     Gl.glPushMatrix();
     Gl.glRotated(270, 1, 0, 0);
     Glu.gluSphere(quadratic, 2, 32, 32);
     Gl.glPopMatrix();
     Gl.glEndList();
 }
Exemple #32
0
        public GluSphere(CubeMapTexture texture, Vector3f position, float radius, int slices)
        {
            this.texture = texture;
            this.position = position;
            this.radius = radius;
            this.slices = slices;

            quad = Glu.gluNewQuadric();

            Glu.gluQuadricNormals(quad, Glu.GLU_SMOOTH);	// Create Smooth Normals ( NEW )
            Glu.gluQuadricTexture(quad, Gl.GL_TRUE);		// Create Texture Coords ( NEW )
            Glu.gluQuadricDrawStyle(quad, Glu.GLU_FILL);

            angle  = 0.0f;
            x_axis = 0.0f;
            y_axis = 0.0f;
            z_axis = 0.0f;
        }
Exemple #33
0
        /// <summary>
        ///     All setup for OpenGL goes here.
        /// </summary>
        /// <returns>
        ///     Returns <c>true</c> on success, otherwise <c>false</c>.
        /// </returns>
        private static bool InitGL()
        {
            // All Setup For OpenGL Goes Here
            if(!LoadGLTextures()) {                                             // If Loading The Textures Failed
                return false;                                                   // Return False
            }
            Gl.glEnable(Gl.GL_TEXTURE_2D);                                      // Enable Texture Mapping
            Gl.glShadeModel(Gl.GL_SMOOTH);                                      // Enable Smooth Shading
            Gl.glClearColor(0, 0, 0, 0.5f);                                     // Black Background
            Gl.glClearDepth(1);                                                 // Depth Buffer Setup
            Gl.glEnable(Gl.GL_DEPTH_TEST);                                      // Enables Depth Testing
            Gl.glDepthFunc(Gl.GL_LEQUAL);                                       // The Type Of Depth Testing To Do
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);         // Really Nice Perspective Calculations

            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_AMBIENT, LightAmbient);            // Setup The Ambient Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_DIFFUSE, LightDiffuse);            // Setup The Diffuse Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_POSITION,LightPosition);           // Position The Light
            Gl.glEnable(Gl.GL_LIGHT1);                                          // Enable Light One

            quadratic = Glu.gluNewQuadric();                                    // Create A Pointer To The Quadric Object (Return 0 If No Memory)
            Glu.gluQuadricNormals(quadratic, Glu.GLU_SMOOTH);                   // Create Smooth Normals
            Glu.gluQuadricTexture(quadratic, Gl.GL_TRUE);                       // Create Texture Coords

            Gl.glTexGeni(Gl.GL_S, Gl.GL_TEXTURE_GEN_MODE, Gl.GL_SPHERE_MAP);    // Set The Texture Generation Mode For S To Sphere Mapping (NEW)
            Gl.glTexGeni(Gl.GL_T, Gl.GL_TEXTURE_GEN_MODE, Gl.GL_SPHERE_MAP);    // Set The Texture Generation Mode For T To Sphere Mapping (NEW)
            return true;                                                        // Initialization Went OK
        }
Exemple #34
0
        /// <summary>
        ///     All setup for OpenGL goes here.
        /// </summary>
        /// <returns>
        ///     <c>true</c> on successful initialization, otherwise <c>false</c>.
        /// </returns>
        private static bool InitGL()
        {
            if(!LoadGLTextures()) {                                             // Jump To Texture Loading Routine
                return false;                                                   // If Texture Didn't Load Return False
            }

            Gl.glEnable(Gl.GL_TEXTURE_2D);                                      // Enable Texture Mapping
            Gl.glShadeModel(Gl.GL_SMOOTH);                                      // Enable Smooth Shading
            Gl.glClearColor(0, 0, 0, 0.5f);                                     // Black Background
            Gl.glClearDepth(1);                                                 // Depth Buffer Setup
            Gl.glEnable(Gl.GL_DEPTH_TEST);                                      // Enables Depth Testing
            Gl.glDepthFunc(Gl.GL_LEQUAL);                                       // The Type Of Depth Testing To Do
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);         // Really Nice Perspective Calculations
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_AMBIENT, lightAmbient);            // Setup The Ambient Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_DIFFUSE, lightDiffuse);            // Setup The Diffuse Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_POSITION, lightPosition);          // Position The Light
            Gl.glEnable(Gl.GL_LIGHT1);                                          // Enable Light One
            quadratic = Glu.gluNewQuadric();                                    // Create A Pointer To The Quadric Object (Return 0 If No Memory) (NEW)
            Glu.gluQuadricNormals(quadratic, Glu.GLU_SMOOTH);                   // Create Smooth Normals (NEW)
            Glu.gluQuadricTexture(quadratic, Gl.GL_TRUE);                       // Create Texture Coords (NEW)
            return true;
        }
        private void Initialize()
        {
            lights_enabled = false;
            //yellow lights
            light_red = 255;
            light_green = 255;
            light_blue = 77;

            //camera + -
            cameraControl = -5;

            float[] ambient = { 0.2f, 0.2f, 0.2f, 1.0f };
            float[] diffuse = { 1.0f, 1.0f, 1.0f, 1.0f };
            //float[] ambiental = { 0.5f, 0.5f, 0.5f, 1.0f };
            Bitmap image;  // promenljiva u koju ucitavamo sadrzaj slike

            Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glEnable(Gl.GL_CULL_FACE);
            Gl.glLoadIdentity();

            Gl.glLightModelfv(Gl.GL_LIGHT_MODEL_AMBIENT, ambient);

            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_AMBIENT, ambient);
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_DIFFUSE, diffuse);
            //Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_SPOT_DIRECTION, new float[] { 0, 1, 0 });
            //cut-off 30
            Gl.glLightf(Gl.GL_LIGHT0, Gl.GL_SPOT_CUTOFF, 30f);

            //ukljucivanje svetla i normalizacije
            Gl.glEnable(Gl.GL_LIGHTING);
            Gl.glEnable(Gl.GL_LIGHT0);

            //Gl.glEnable(Gl.GL_LIGHT1);
            Gl.glEnable(Gl.GL_NORMALIZE);

            //color tracking
            Gl.glEnable(Gl.GL_COLOR_MATERIAL);
            Gl.glColorMaterial(Gl.GL_FRONT, Gl.GL_AMBIENT_AND_DIFFUSE);

            //teksture
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glTexEnvi(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_MODULATE);

            // Ucitaj slike i kreiraj teksture
            Gl.glGenTextures(textureCount, textures);

            for (int i = 0; i < textureCount; ++i)
            {
                // Pridruzi teksturu odgovarajucem identifikatoru
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, textures[i]);

                // Ucitaj sliku i podesi parametre teksture
                image = new Bitmap(textureFiles[i]);
                // rotiramo sliku zbog koordinantog sistema opengl-a
                image.RotateFlip(RotateFlipType.RotateNoneFlipY);
                Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
                // RGBA format (dozvoljena providnost slike tj. alfa kanal)
                BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly,
                                                      PixelFormat.Format32bppArgb);

                Glu.gluBuild2DMipmaps(Gl.GL_TEXTURE_2D, Gl.GL_RGBA8, image.Width, image.Height, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, imageData.Scan0);

                // TODO 1: Podesiti texture filtre: max = linear, min=linear_mipmap_linear,
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);

                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_REPEAT);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_REPEAT);

                image.UnlockBits(imageData);
                image.Dispose();
            }

            //inicijalizacija 30 sijalica
            mf_sijalice = new List<Glu.GLUquadric>();
            int broj_sijalica = 30;
            for (int i = 0; i < broj_sijalica; i++)
            {
                Glu.GLUquadric tmp = Glu.gluNewQuadric();
                Glu.gluQuadricTexture(tmp, Gl.GL_TRUE);
                Glu.gluQuadricNormals(tmp, Glu.GLU_SMOOTH);
                mf_sijalice.Add(tmp);

            }
            light_source = Glu.gluNewQuadric();
            Glu.gluQuadricNormals(light_source, Glu.GLU_SMOOTH);

            Draw();
        }
Exemple #36
0
 /// <summary>
 /// Crta sijalice.
 /// </summary>
 private void DrawBulbs()
 {
     Gl.glPushMatrix();
     Gl.glColor3f((float)color[0]/255, (float)color[1]/255, (float)color[2]/255);
     // TODO 2d Ukljuci automatsko generisanje normala.
     Gl.glEnable(Gl.GL_NORMALIZE);
     gluObject = Glu.gluNewQuadric();
     Glu.gluQuadricOrientation(gluObject, Glu.GLU_OUTSIDE);
     Gl.glScalef(sFactor, sFactor, sFactor);
     Gl.glTranslatef(-240f, 16.0f, 760.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(480.0f, 0.0f, 1520f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glTranslatef(0.0f, 0.0f, -117.0f);
     Glu.gluSphere(gluObject, 13.0f, 8, 8);
     Gl.glPopMatrix();
 }
 public void initialize()
 {
     m_gluObj = Glu.gluNewQuadric();
     Glu.gluQuadricNormals(m_gluObj, Glu.GLU_SMOOTH);
     //Glu.gluQuadricTexture(m_gluObj, Gl.GL_TRUE);
 }
Exemple #38
0
        private void AnT_Load(object sender, EventArgs e)
        {
            Glut.glutInit();
            Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
            Gl.glClearColor(0, 0, 0, 1);
            Gl.glViewport(0, 0, AnT.Width, AnT.Height);
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            Glu.gluPerspective(45, (float)AnT.Width / (float)AnT.Height, 0.1, 5000);
            Gl.glTranslated(0, 0, -6);

            Gl.glEnable(Gl.GL_TEXTURE_2D);                                      // Enable Texture Mapping ( NEW )
            Gl.glShadeModel(Gl.GL_SMOOTH);                                      // Enable Smooth Shading
            Gl.glClearColor(0, 0, 0, 0.5f);                                     // Black Background
            Gl.glClearDepth(1);                                                 // Depth Buffer Setup
            Gl.glEnable(Gl.GL_DEPTH_TEST);                                      // Enables Depth Testing
            Gl.glDepthFunc(Gl.GL_LEQUAL);                                       // The Type Of Depth Testing To Do
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);
            quadratic = Glu.gluNewQuadric();
            Glu.gluQuadricNormals(quadratic, Glu.GLU_SMOOTH);                   // Create Smooth Normals (NEW)
            Glu.gluQuadricTexture(quadratic, Gl.GL_TRUE);                       // Create Texture Coords (NEW)

            Bitmap[] textureImage = new Bitmap[3];
            textureImage[0] = new Bitmap("22.bmp");
            textureImage[1] = new Bitmap("666.bmp");
            textureImage[2] = new Bitmap("stars-2.jpg");

            Gl.glGenTextures(3, texture);                            // Create The Texture
            textureImage[0].RotateFlip(RotateFlipType.RotateNoneFlipY);     // Flip The Bitmap Along The Y-Axis
            textureImage[1].RotateFlip(RotateFlipType.RotateNoneFlipY);
            textureImage[2].RotateFlip(RotateFlipType.RotateNoneFlipY);
            //Rectangle For Locking The Bitmap In Memory
            Rectangle rectangle = new Rectangle(0, 0, textureImage[0].Width, textureImage[0].Height);
            Rectangle rectangle1 = new Rectangle(0, 0, textureImage[1].Width, textureImage[1].Height);
            Rectangle rectangle2 = new Rectangle(0, 0, textureImage[2].Width, textureImage[2].Height);
            //Get The Bitmap's Pixel Data From The Locked Bitmap
            System.Drawing.Imaging.BitmapData bitmapData = textureImage[0].LockBits(rectangle, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            System.Drawing.Imaging.BitmapData bitmapData1 = textureImage[1].LockBits(rectangle1, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            System.Drawing.Imaging.BitmapData bitmapData2 = textureImage[2].LockBits(rectangle2, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[1]);
            Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB8, textureImage[1].Width, textureImage[1].Height, 0, Gl.GL_BGR, Gl.GL_UNSIGNED_BYTE, bitmapData1.Scan0);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            textureImage[1].UnlockBits(bitmapData1);                     // Unlock The Pixel Data From Memory
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[1]);

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[0]);
            Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB8, textureImage[0].Width, textureImage[0].Height, 0, Gl.GL_BGR, Gl.GL_UNSIGNED_BYTE, bitmapData.Scan0);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            textureImage[0].UnlockBits(bitmapData);                     // Unlock The Pixel Data From Memory
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[0]);
            Gl.glViewport(0, 0, AnT.Width, AnT.Height);

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[2]);
            Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB8, textureImage[2].Width, textureImage[2].Height, 0, Gl.GL_BGR, Gl.GL_UNSIGNED_BYTE, bitmapData2.Scan0);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            textureImage[2].UnlockBits(bitmapData2);                     // Unlock The Pixel Data From Memory
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[2]);
            Gl.glViewport(0, 0, AnT.Width, AnT.Height);

            Gl.glShadeModel(Gl.GL_SMOOTH);
            Gl.glEnable(Gl.GL_LINE_SMOOTH);
            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
            Gl.glHint(Gl.GL_LINE_SMOOTH_HINT, Gl.GL_DONT_CARE);
            Gl.glEnable(Gl.GL_ALPHA_TEST);
            Gl.glEnable(Gl.GL_BLEND);
            Gl.glFlush();
            timer1.Start();
        }
Exemple #39
0
        private void DrawInit()
        {
            //Uncoment next procedure to take material properties in account

            SetMaterial();
            //only for demostration of possibilities, not very accurate

            SetLight();

            //Gl.glViewport(0, 0, this.ClientSize.Width, this.ClientSize.Height);

            Gl.glClearColor(0, 0, 0, 0);
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glEnable(Gl.GL_BLEND);
            Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);

            Gl.glGenTextures(2, Texture);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, Texture[0]);
            Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            LoadTexture.loadBMP("saturn.jpg", this.Pict);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, Texture[1]);
            Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            LoadTexture.loadRings();
            CalculateDisk();
            quadObj = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(quadObj, Gl.GL_TRUE);
        }
        private void draw()
        {
            string fff = Gl.glGetString(Gl.GL_VERSION);
            string ggg = fff;
            //Очищение экрана
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            //Нормирование матрицы
            Gl.glLoadIdentity();
            //Кладем матрицу в стек для того, чтобы не испортить при вычислениях
            Gl.glPushMatrix();
            //Отрисовка космоса. Сначала переносим цент и поворачиваем на нужный угол пространство. Подгружаем текстуры и совершаем обратные действия

            Gl.glRotated(90, 1, 0, 0);
            Gl.glRotated(-45, 0, 0, 1);
            Gl.glRotated(-x_r / 15, 0, 0, 1);
            Gl.glTranslated(0, 0, -4000);
            quadr = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(quadr, Gl.GL_TRUE);
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, space_tex);
            Glu.gluCylinder(quadr, ATMOSPHERE_HEIGHT_Z * 0.0025 / ZOOMER, ATMOSPHERE_HEIGHT_Z * 0.0025 / ZOOMER, 8000, 64, 64);
            Gl.glDisable(Gl.GL_TEXTURE_2D);
            Gl.glTranslated(0, 0, 4000);
            Gl.glRotated(x_r / 15, 0, 0, 1);
            Gl.glRotated(45, 0, 0, 1);
            Gl.glRotated(-90, 1, 0, 0);
            Gl.glColor3f(0, 0, 0);
            //Завершение отрисовки космоса

            //Установление ограничений на сдвиг вдоль экрана.

            int I_DONT_NOW_WHAT_IS_IT = 300;
            if (Math.Abs(x_r) > I_DONT_NOW_WHAT_IS_IT)
                x_r = Math.Sign(x_r) * I_DONT_NOW_WHAT_IS_IT;
            if (Math.Abs(y_r) > I_DONT_NOW_WHAT_IS_IT)
                y_r = Math.Sign(y_r) * I_DONT_NOW_WHAT_IS_IT;

            float angle_cam = (float)Math.Atan(y_r / (x_r - D_NUM));
            float circ_abroad = (float)Math.Sqrt(EARTH_RADIUS_Z * EARTH_RADIUS_Z * (1 - 5 * 5 * zoom * zoom / max_zoom / max_zoom)) / 2 + 5;
            //Ограничение на движение экрана к центру Земли - для того, чтобы нельзя было посмотреть "внутренности" Земли
            //Все коэффициенты определены практическим путем
            if (zoom < 1.83)
            {
                if (Math.Abs(x_r) < Math.Abs(Math.Cos(angle_cam) * circ_abroad) + D_NUM)
                    x_r = Math.Sign(x_r + D_NUM) * Math.Cos(angle_cam) * circ_abroad;
                if (Math.Abs(y_r) < Math.Abs(Math.Sin(angle_cam) * circ_abroad))
                    y_r = Math.Sign(x_r) * Math.Sin(angle_cam) * circ_abroad;
            }
            //Преобразование изображение в соответствии с действиями пользователя. То есть сдвиг.
            Gl.glTranslated(x_r * 2, -y_r * 2, -EARTH_RADIUS_Z * 5 * zoom / (max_zoom-3));
            Gl.glRotated(180, 1, 0, 0);
            float ang = +(90 - angle) - (90 - angle) * (min_zoom / zoom);
            Gl.glColor3f(1.0f, 0, 0);
            //Отрисовка Земли. Действия как и с космосом
            Gl.glRotated(90, 1, 0, 0);
            Gl.glRotated(180, 0, 1, 0);
            quadr = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(quadr, Gl.GL_TRUE);
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, earth_tex);
            Glu.gluSphere(quadr, EARTH_RADIUS_Z, 64, 64);
            Gl.glDisable(Gl.GL_TEXTURE_2D);
            Gl.glColor3f(1.0f, 0, 1.0f);
            Gl.glRotated(-180, 0, 1, 0);
            Gl.glRotated(-90, 1, 0, 0);
            //Завершение отрисоовки Земли

            //Изображение слоев атмосферы
            if (Ekzos.Checked == true)
            {
                Gl.glColor3f(1, 1f, 1.0f);
                Glut.glutWireSphere(EARTH_RADIUS_Z + Ekzosphere_r_z, 64, 64);
            }
            if (Termos.Checked == true)
            {
                Gl.glColor3f(0.85f, 0.95f, 1.0f);
                Glut.glutWireSphere(EARTH_RADIUS_Z + Termosphere_r_z, 64, 64);
            }
            if (Mezos.Checked == true)
            {
                Gl.glColor3f(0.5f, 0.85f, 1.0f);
                Glut.glutWireSphere(EARTH_RADIUS_Z + Mezosphere_r_z, 64, 64);
            }
            if (Stratos.Checked == true)
            {
                Gl.glColor3f(0.25f, 0.75f, 1.0f);
                Glut.glutWireSphere(EARTH_RADIUS_Z + Stratosphere_r_z, 64, 64);
            }
            if (Tropos.Checked == true)
            {
                Gl.glColor3f(0, 0.65f, 1.0f);
                Glut.glutWireSphere(EARTH_RADIUS_Z + Troposphere_r_z, 64, 64);
            }
            //Преобразование координат для отрисовки траектории
            Gl.glTranslated(0, -start_height * ZOOMER - EARTH_RADIUS_Z, 0);
            Gl.glColor3f(0.5f, 0.25f, 0);
            Gl.glLineWidth(1);
            //Определение временного промежутка, вплоть до которого дошел метеорит
            int last_index = (int)(time / dt);
            if (count_render_points < last_index)
            {
                last_index = count_render_points;
            }
            last_graph = last_index;
            //Отрисовка траектории
            if (state != 0)
            {
                Gl.glColor3f(0.9f, 1.0f, 0);
                Gl.glLineWidth(1);
                Gl.glBegin(Gl.GL_LINE_STRIP);
                for (int i = 0; i <= last_index; i++)
                {
                    Gl.glVertex3f(trajectory[i, 0], trajectory[i, 1], 0);
                }
                Gl.glEnd();
                 /*Gl.glColor3f(0.9f, 0f, 0);
                 Gl.glBegin(Gl.GL_LINES);
                 for (int i = 0; i < last_index; i++)
                 {
                     Gl.glVertex3f(trajectory[i, 0], trajectory[i, 1], 0);
                     Gl.glVertex3f(F_air[i, 0], F_air[i, 1], 0);
                 }
                 Gl.glEnd();*/

                Gl.glTranslated(trajectory[last_index, 0], trajectory[last_index, 1], 0);
                Gl.glLineWidth(1);
                if (last_index + 5 > MAX_ARRAY_SIZE && !err_message)
                {

                    err_message = true;
                    MessageBox.Show("Памяти, выделяемой компьютером, не хватает для того, чтобы отобразить всю траекторию");
                }
            }
            //Изменеие данных на панели инструментов
            labelTime.Text = "Время полета: " + ((int)time_m[last_index]).ToString()+" c";

            labelHeight.Text = "Высота над уровнем моря в данный момент: " + height[last_index].ToString() + " км";
            if (last_index == count_render_points && rend)
            {
                but.Text = "Начать новый эксперимент";
                rend = false;
                state = 2;
            }

            //Текстурирование и отрисовка метеорита. (его не видно, так что по сути это абсолютно бесполезные строчки)
            quadr = Glu.gluNewQuadric();
            Glu.gluQuadricTexture(quadr, Gl.GL_TRUE);
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, meteor_tex);
            Glu.gluSphere(quadr, radius * ZOOMER, 32, 32);
            Gl.glDisable(Gl.GL_TEXTURE_2D);
            Gl.glColor3f(0, 1f, 0);
            Glut.glutWireCube(zoom*60000 * ZOOMER);
            Gl.glColor3f(1.0f, 0, 1.0f);

            //END METEOR
            Gl.glPopMatrix();
            Gl.glFlush();
            //Инвалидация получившегося изображения. То есть перенесение на экран
            Graf.Invalidate();
        }
    // Draw Our Ball
    void DrawObject()
    {
        Gl.glColor3f(1.0f, 1.0f, 1.0f); // Set Color To White
        Gl.glBindTexture(Gl.GL_TEXTURE_2D, Otros.texture[1]); // Select Texture 2 (1)
        Glu.GLUquadric q;
        q = Glu.gluNewQuadric(); // Create A New Quadratic
        Glu.gluQuadricNormals(q,Gl.GL_SMOOTH); // Generate Smooth Normals For The Quad
        Glu.gluQuadricTexture(q,Gl.GL_TRUE);

        Glu.gluSphere(q, 0.35f, 32, 16); // Draw First Sphere

        Gl.glBindTexture(Gl.GL_TEXTURE_2D, Otros.texture[0]); // Select Texture 3 (2)
        Gl.glColor4f(1.0f, 1.0f, 1.0f, 0.4f); // Set Color To White With 40% Alpha
        Gl.glEnable(Gl.GL_BLEND); // Enable Blending
        Gl.glBlendFunc(Gl.GL_SRC_ALPHA,Gl.GL_ONE); // Set Blending Mode To Mix Base111d On SRC Alpha
        Gl.glEnable(Gl.GL_TEXTURE_GEN_S); // Enable Sphere Mapping
        Gl.glEnable(Gl.GL_TEXTURE_GEN_T); // Enable Sphere Mapping
        Glu.gluSphere(q, 0.35f, 32, 16); // Draw Another Sphere Using New Texture
        // Textures Will Mix Creating A MultiTexture Effect (Reflection)
        Gl.glDisable(Gl.GL_TEXTURE_GEN_S); // Disable Sphere Mapping
        Gl.glDisable(Gl.GL_TEXTURE_GEN_T); // Disable Sphere Mapping
        Gl.glDisable(Gl.GL_BLEND); // Disable Blending
    }
Exemple #42
0
        /// <summary>
        ///     All setup for OpenGL goes here.
        /// </summary>
        /// <returns>
        ///     Returns <c>true</c> on success, otherwise <c>false</c>.
        /// </returns>
        private static bool InitGL() {                                          // All Setup For OpenGL Goes Here
            if(!LoadGLTextures()) {                                             // If Loading The Textures Failed
                return false;                                                   // Return False
            }
            Gl.glShadeModel(Gl.GL_SMOOTH);                                      // Enable Smooth Shading
            Gl.glClearColor(0.2f, 0.5f, 1, 1);                                  // Background
            Gl.glClearDepth(1);                                                 // Depth Buffer Setup
            Gl.glClearStencil(0);                                               // Clear The Stencil Buffer To 0
            Gl.glEnable(Gl.GL_DEPTH_TEST);                                      // Enables Depth Testing
            Gl.glDepthFunc(Gl.GL_LEQUAL);                                       // The Type Of Depth Testing To Do
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);         // Really Nice Perspective Calculations
            Gl.glEnable(Gl.GL_TEXTURE_2D);                                      // Enable 2D Texture Mapping
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_AMBIENT, LightAmb);                // Set The Ambient Lighting For Light0
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_DIFFUSE, LightDif);                // Set The Diffuse Lighting For Light0
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_POSITION, LightPos);               // Set The Position For Light0
            Gl.glEnable(Gl.GL_LIGHT0);                                          // Enable Light 0
            Gl.glEnable(Gl.GL_LIGHTING);                                        // Enable Lighting
            q = Glu.gluNewQuadric();                                            // Create A New Quadratic
            Glu.gluQuadricNormals(q, Gl.GL_SMOOTH);                             // Generate Smooth Normals For The Quad
            Glu.gluQuadricTexture(q, Gl.GL_TRUE);                               // Enable Texture Coords For The Quad
            Gl.glTexGeni(Gl.GL_S, Gl.GL_TEXTURE_GEN_MODE, Gl.GL_SPHERE_MAP);    // Set Up Sphere Mapping
            Gl.glTexGeni(Gl.GL_T, Gl.GL_TEXTURE_GEN_MODE, Gl.GL_SPHERE_MAP);    // Set Up Sphere Mapping

            return true;                                                        // Initialization Went OK
        }
Exemple #43
0
        /// <summary>
        /// Initialize OpenGL
        /// </summary>
        protected override void InitGL()
        {
            Events.KeyboardDown += new EventHandler<KeyboardEventArgs>(this.KeyDown);
            Keyboard.EnableKeyRepeat(60, 60);
            LoadGLTextures();

            // Enable Texture Mapping
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            // Enable Smooth Shading
            Gl.glShadeModel(Gl.GL_SMOOTH);
            // Black Background
            Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
            // Depth Buffer Setup
            Gl.glClearDepth(1.0f);
            // Enables Depth Testing
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            // The Type Of Depth Testing To Do
            Gl.glDepthFunc(Gl.GL_LEQUAL);
            // Really Nice Perspective Calculations
            Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST);
            // Setup The Ambient Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_AMBIENT, this.GetLightAmbient());
            // Setup The Diffuse Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_DIFFUSE, this.GetLightDiffuse());
            // Position The Light
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_POSITION, this.GetLightPosition());
            // Enable Light One
            Gl.glEnable(Gl.GL_LIGHT1);

            // Create A Pointer To The Quadric Object (Return 0 If No Memory) (NEW)
            this.quadratic = Glu.gluNewQuadric();
            // Create Smooth Normals (NEW)
            Glu.gluQuadricNormals(this.quadratic, Glu.GLU_SMOOTH);
            // Create Texture Coords (NEW)
            Glu.gluQuadricTexture(this.quadratic, (byte)Gl.GL_TRUE);

            if (this.Light)
            {
                // If lighting, enable it to start
                Gl.glEnable(Gl.GL_LIGHTING);
            }
        }
Exemple #44
0
        /// <summary>
        ///  Korisnicka inicijalizacija i podesavanje OpenGL parametara.
        /// </summary>
        private void Initialize()
        {
            // Boja pozadine je tamno plava
            Gl.glClearColor(0.0f, 0.0f, 0.2f, 1.0f);
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glEnable(Gl.GL_CULL_FACE);
            Gl.glFrontFace(Gl.GL_CCW);
            gluObject = Glu.gluNewQuadric();

            // Tacka 1 faza 2: Ukljuciti color tracking mehanizam i podesiti da se pozivom metode glColor
            // definise ambijentalna i difuzna komponenta materijala
            Gl.glEnable(Gl.GL_COLOR_MATERIAL);
            Gl.glColorMaterial(Gl.GL_FRONT, Gl.GL_AMBIENT_AND_DIFFUSE);

            Gl.glEnable(Gl.GL_LIGHTING);
            
            // Tacka 2 faza 2: Definisati reflektorski izvor (cut-off=30) bele boje
            float[] ambient = { 0.0f, 0.0f, 0.0f, 1.0f };
            float[] diffuse = { 1.0f, 1.0f, 1.0f, 1.0f };

            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_AMBIENT, ambient);
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_DIFFUSE, diffuse);
            float[] direction = { 0.0f, 1.0f, 0.0f };
            Gl.glLightfv(Gl.GL_LIGHT1, Gl.GL_SPOT_DIRECTION, direction);
            Gl.glLightf(Gl.GL_LIGHT1, Gl.GL_SPOT_CUTOFF, 30.0f);

            Gl.glEnable(Gl.GL_LIGHT1);
            
            // Tacka 9 faza 2: Definisati tackasti svetlosni izvor narandzaste boje
            float[] ambient1 = { 0.0f, 0.0f, 0.0f, 1.0f };
            float[] diffuse1 = { 1.0f, 0.5f, 0.0f, 1.0f };

            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_AMBIENT, ambient1);
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_DIFFUSE, diffuse1);
            Gl.glLightf(Gl.GL_LIGHT0, Gl.GL_SPOT_CUTOFF, 180.0f);

            Gl.glEnable(Gl.GL_LIGHT0);

            // Ukljuci automatsku normalizaciju nad normalama
            Gl.glEnable(Gl.GL_NORMALIZE);

            // Tacka 3 faza 2: Nacin stapanja teksture sa materijalom modulate
            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glTexEnvi(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_MODULATE);

            // Ucitaj slike i kreiraj teksture
            Gl.glGenTextures(m_textureCount, m_textures);
            for (int i = 0; i < m_textureCount; ++i)
            {
                // Pridruzi teksturu odgovarajucem identifikatoru
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, m_textures[i]);

                // Ucitaj sliku i podesi parametre teksture
                Bitmap image = new Bitmap(m_textureFiles[i]);
                // rotiramo sliku zbog koordinantog sistema opengl-a
                image.RotateFlip(RotateFlipType.RotateNoneFlipY);
                Rectangle rect = new Rectangle(0, 0, image.Width, image.Height);
                // RGBA format (dozvoljena providnost slike tj. alfa kanal)
                BitmapData imageData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly,
                                                      System.Drawing.Imaging.PixelFormat.Format32bppArgb);

                Glu.gluBuild2DMipmaps(Gl.GL_TEXTURE_2D, (int)Gl.GL_RGBA8, image.Width, image.Height, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, imageData.Scan0);
                Gl.glTexParameteri((int)Gl.GL_TEXTURE_2D, (int)Gl.GL_TEXTURE_MIN_FILTER, (int)Gl.GL_LINEAR);		// Linear Filtering
                Gl.glTexParameteri((int)Gl.GL_TEXTURE_2D, (int)Gl.GL_TEXTURE_MAG_FILTER, (int)Gl.GL_LINEAR);		// Linear Filtering

                // Tacka 3 faza 2: Za teksture podesiti wrapping da bude GL_REPEAT po obema osama
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_REPEAT);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_REPEAT);

                // Tacka 3 faza 2: Podesiti filtere za teksture tako da se koristi mipmap linearno filtriranje.
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR_MIPMAP_LINEAR);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR_MIPMAP_LINEAR);


                image.UnlockBits(imageData);
                image.Dispose();
            }
           
        }
    // Draws The Floor
    void DrawFloor()
    {
        Gl.glBindTexture(Gl.GL_TEXTURE_2D,Otros.texture[9]);
        Gl.glPushMatrix();
        Gl.glDisable(Gl.GL_CULL_FACE);
        q=Glu.gluNewQuadric();
        Glu.gluQuadricOrientation(q,Glu.GLU_OUTSIDE);
        Glu.gluQuadricTexture(q,Glu.GLU_TRUE);
        Glu.gluQuadricNormals(q,Glu.GLU_SMOOTH);
        Glu.gluDisk(q,0,7,32,32);

        Gl.glBindTexture(Gl.GL_TEXTURE_2D,0);
        Gl.glEnable(Gl.GL_CULL_FACE);
        Gl.glPopMatrix();
    }