コード例 #1
0
        /// <summary>
        ///  Iscrtavanje kuce pomocu OpenGL-a.
        /// </summary>
        public void Draw()
        {
            // Osnova kuce
            //Gl.glColor3ub(0, 255, 255); // bela boja
            // nacrtati osnovu kuce koriscenjem instance klase Cube
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Wood]);
            m_box.Draw();
            // TODO 3.3.1: postavljanje antene na vrh box modela(na krovu hangara)
            Gl.glPushMatrix();
            Gl.glTranslatef(0.0f, m_height, 0.0f);
            Gl.glRotatef(90.0f, 1.0f, 0.0f, 0.0f);

            Gl.glDisable(Gl.GL_TEXTURE_2D);
            Gl.glTranslatef(4.0f, 0.0f, 3.0f);      // spusti antenu na hangar

            m_antena.Draw();

            Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glPopMatrix();
            Gl.glFlush();


            // Krov kuce
        }
コード例 #2
0
        /// <summary>
        ///  Iscrtavanje aviona pomocu OpenGL-a.
        /// </summary>
        public void Draw()
        {
            // Levo krilo
            Gl.glColor3ub(180, 180, 180);
            Gl.glPushMatrix();
            // TODO 3: Nacrtati levo krilo koriscenjem DL mehanizma na poziciji (-0.7, -0.4, -0.6) zarotirano za 120 stepeni oko z-ose
            // Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_KRILA]);

            Gl.glTranslatef(-0.7f, -0.4f, -0.6f);
            Gl.glRotatef(120.0f, 0.0f, 0.0f, 1.0f);
            Gl.glCallList(m_wingDL);

            Gl.glPopMatrix();

            // Desno krilo
            Gl.glPushMatrix();
            // TODO 3: Nacrtati desno krilo koriscenjem DL mehanizma na poziciji (0.7, -0.4, -0.6), skalirano -1 puta po x-osi, a zatim zarotirano za 120 stepeni oko z-ose
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_KRILA]);

            Gl.glTranslatef(0.7f, -0.4f, -0.6f);
            Gl.glScalef(-1.0f, 1.0f, 1.0f);
            Gl.glRotatef(120.0f, 0.0f, 0.0f, 1.0f);
            Gl.glCallList(m_wingDL);

            Gl.glPopMatrix();

            // Telo satla
            Gl.glColor3ub(150, 150, 150);
            Gl.glPushMatrix();
            // TODO 2: Nacrtati telo satla osnovni deo kao kvadar sirine 1.2, visine 0.4 i dubine 1.2
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_SREBRA]);
            Glu.gluQuadricTexture(m_gluObj, Glu.GLU_TRUE); //automatsko generisanje normala za GLU objekte

            m_box.SetSize(1.2, 0.4, 1.2);
            m_box.Draw();

            Gl.glPopMatrix();

            Gl.glPushMatrix();
            // TODO 2: Nacrtati telo satla zadnji deo kao kvadar sirine 0.4, visine 0.6 i dubine 1.6, na poziciji (0, 0.4, 0.2)

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_METALA]);

            m_box.SetSize(0.4, 0.6, 1.6);
            Gl.glTranslatef(0.0f, 0.4f, 0.2f);
            m_box.Draw();

            Gl.glPopMatrix();

            Gl.glPushMatrix();
            // TODO 2: Nacrtati osnovu gornjem krila kao kvadar sirine 0.15, visine 0.4 i dubine 1.0 na poziciji (0, 0.8, -0.1)
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_METALA]);

            m_box.SetSize(0.15, 0.4, 1.0);
            Gl.glTranslatef(0.0f, 0.8f, -0.1f);
            m_box.Draw();

            Gl.glPopMatrix();

            // TODO 2: Podesiti orijentaciju poligona lica da budu CW

            Gl.glFrontFace(Gl.GL_CW);

            // Kabina satla
            Gl.glColor3ub(100, 100, 100);
            Gl.glPushMatrix();

            // TODO 2: Translirati za 0.84 po y-osi i 0.85 po z-osi, zatim zarotirati za 8 stepeni oko x-ose

            Gl.glTranslatef(0.0f, 0.84f, 0.85f);
            Gl.glRotatef(8.0f, 1.0f, 0.0f, 0.0f);


            // TODO 2: Nacrtati omotac kabine koriscenjem GL_QUAD_STRIP primitive
            //         temena su (u pravilnom redosledu): (0.1, -0.6, 1.2), (0.3, 0.0, 0.0), (0.1, -0.7, 1.0), (0.3, -0.7, 0.0),
            //                                            (-0.1, -0.7, 1.0), (-0.3, -0.7, 0.0), (-0.1, -0.6, 1.2), (-0.3, 0.0, 0.0),
            //                                            (0.1, -0.6, 1.2), (0.3, 0.0, 0.0).

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_STAKLA]);
            Gl.glBegin(Gl.GL_QUAD_STRIP);

            Gl.glNormal3fv(Lighting.FindFaceNormal(0.1f, -0.6f, 1.2f, 0.3f, 0.0f, 0.0f, 0.1f, -0.7f, 1.0f));

            Gl.glTexCoord2f(0.0f, 0.0f);
            Gl.glVertex3f(0.1f, -0.6f, 1.2f);
            Gl.glTexCoord2f(0.0f, 1.0f);
            Gl.glVertex3f(0.3f, 0.0f, 0.0f);
            Gl.glTexCoord2f(1.0f, 1.0f);
            Gl.glVertex3f(0.1f, -0.7f, 1.0f);
            Gl.glTexCoord2f(1.0f, 0.0f);
            Gl.glVertex3f(0.3f, -0.7f, 0.0f);

            Gl.glNormal3fv(Lighting.FindFaceNormal(-0.1f, -0.7f, 1.0f, -0.3f, -0.7f, 0.0f, -0.1f, -0.6f, 1.2f));

            Gl.glTexCoord2f(0.0f, 0.0f);
            Gl.glVertex3f(-0.1f, -0.7f, 1.0f);
            Gl.glTexCoord2f(0.0f, 1.0f);
            Gl.glVertex3f(-0.3f, -0.7f, 0.0f);
            Gl.glTexCoord2f(1.0f, 1.0f);
            Gl.glVertex3f(-0.1f, -0.6f, 1.2f);


            Gl.glNormal3fv(Lighting.FindFaceNormal(-0.3f, 0.0f, 0.0f, 0.1f, -0.6f, 1.2f, 0.3f, 0.0f, 0.0f));

            Gl.glTexCoord2f(0.0f, 0.0f);
            Gl.glVertex3f(-0.3f, 0.0f, 0.0f);
            Gl.glTexCoord2f(0.0f, 0.0f);
            Gl.glVertex3f(0.1f, -0.6f, 1.2f);
            Gl.glTexCoord2f(0.0f, 0.0f);
            Gl.glVertex3f(0.3f, 0.0f, 0.0f);
            Gl.glEnd();
            // TODO 2: Nacrtati baze kabine koriscenjem GL_QUADS primitive
            //         temena su (u pravilnom redosledu): (-0.1, -0.6, 1.2), (0.1, -0.6, 1.2), (0.1, -0.7, 1.0), (-0.1, -0.7, 1.0),
            //                                            (0.3, 0.0, 0.0), (-0.3, 0.0, 0.0), (-0.3, -0.7, 0.0), (0.3, -0.7, 0.0).

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_STAKLA]);

            Gl.glBegin(Gl.GL_QUADS);


            Gl.glNormal3fv(Lighting.FindFaceNormal(-0.1f, -0.6f, 1.2f, 0.1f, -0.6f, 1.2f, 0.1f, -0.7f, 1.0f));

            Gl.glTexCoord2f(0.0f, 0.0f);
            Gl.glVertex3f(-0.1f, -0.6f, 1.2f);
            Gl.glTexCoord2f(0.0f, 1.0f);
            Gl.glVertex3f(0.1f, -0.6f, 1.2f);
            Gl.glTexCoord2f(1.0f, 1.0f);
            Gl.glVertex3f(0.1f, -0.7f, 1.0f);
            Gl.glTexCoord2f(1.0f, 0.0f);
            Gl.glVertex3f(-0.1f, -0.7f, 1.0f);

            Gl.glNormal3fv(Lighting.FindFaceNormal(0.3f, 0.0f, 0.0f, -0.3f, 0.0f, 0.0f, -0.3f, -0.7f, 0.0f));

            Gl.glTexCoord2f(0.0f, 0.0f);
            Gl.glVertex3f(0.3f, 0.0f, 0.0f);
            Gl.glTexCoord2f(0.0f, 1.0f);
            Gl.glVertex3f(-0.3f, 0.0f, 0.0f);
            Gl.glTexCoord2f(1.0f, 1.0f);
            Gl.glVertex3f(-0.3f, -0.7f, 0.0f);
            Gl.glTexCoord2f(1.0f, 0.0f);
            Gl.glVertex3f(0.3f, -0.7f, 0.0f);
            Gl.glEnd();

            Gl.glPopMatrix();

            // Gornje krilo
            Gl.glColor3ub(180, 180, 180);
            Gl.glPushMatrix();
            // TODO 2: Translirati u tacku (-0.05, 1.2, -0.7) i skalirati 1.2 puta po y-osi i 1.15 puta po z-osi
            Gl.glTranslatef(-0.05f, 1.2f, -0.7f);
            Gl.glScalef(1.0f, 1.2f, 1.15f);


            // TODO 2: Nacrtati omotac gornjeg krila koriscenjem GL_QUAD_STRIP primitive
            //         temena su (u pravilnom redosledu): (0.0, 1.8, 0.4), (0.0, 1.8, 0.0), (0.1, 1.8, 0.4), (0.1, 1.8, 0.0),
            //                                            (0.1, 0.0, 1.5), (0.1, 0.0, 0.0), (0.1, -0.3, 1.1), (0.1, -0.3, 0.0),
            //                                            (0.0, -0.3, 1.1), (0.0, -0.3, 0.0), (0.0, 0.0, 1.5), (0.0, 0.0, 0.0),
            //                                            (0.0, 1.8, 0.4), (0.0, 1.8, 0.0).

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_KRILA]);

            Gl.glBegin(Gl.GL_QUAD_STRIP);

            Gl.glNormal3fv(Lighting.FindFaceNormal(0.0f, 1.8f, 0.4f, 0.0f, 1.8f, 0.0f, 0.1f, 1.8f, 0.4f));

            Gl.glTexCoord2f(0.0f, 0.0f);      Gl.glVertex3f(0.0f, 1.8f, 0.4f);
            Gl.glTexCoord2f(0.0f, 1.0f);      Gl.glVertex3f(0.0f, 1.8f, 0.0f);
            Gl.glTexCoord2f(1.0f, 1.0f);      Gl.glVertex3f(0.1f, 1.8f, 0.4f);
            Gl.glTexCoord2f(1.0f, 0.0f);      Gl.glVertex3f(0.1f, 1.8f, 0.0f);

            Gl.glNormal3fv(Lighting.FindFaceNormal(0.1f, 0.0f, 1.5f, 0.1f, 0.0f, 0.0f, 0.1f, -0.3f, 1.1f));

            Gl.glTexCoord2f(0.0f, 0.0f);      Gl.glVertex3f(0.1f, 0.0f, 1.5f);
            Gl.glTexCoord2f(0.0f, 1.0f);      Gl.glVertex3f(0.1f, 0.0f, 0.0f);
            Gl.glTexCoord2f(1.0f, 1.0f);      Gl.glVertex3f(0.1f, -0.3f, 1.1f);
            Gl.glTexCoord2f(1.0f, 0.0f);      Gl.glVertex3f(0.1f, -0.3f, 0.0f);

            Gl.glNormal3fv(Lighting.FindFaceNormal(0.0f, -0.3f, 1.1f, 0.0f, -0.3f, 0.0f, 0.0f, 0.0f, 1.5f));

            Gl.glTexCoord2f(0.0f, 0.0f);      Gl.glVertex3f(0.0f, -0.3f, 1.1f);
            Gl.glTexCoord2f(0.0f, 1.0f);      Gl.glVertex3f(0.0f, -0.3f, 0.0f);
            Gl.glTexCoord2f(1.0f, 1.0f);      Gl.glVertex3f(0.0f, 0.0f, 1.5f);

            Gl.glNormal3fv(Lighting.FindFaceNormal(0.0f, 0.0f, 0.0f, 0.0f, 1.8f, 0.4f, 0.0f, 1.8f, 0.0f));

            Gl.glTexCoord2f(0.0f, 0.0f);      Gl.glVertex3f(0.0f, 0.0f, 0.0f);
            Gl.glTexCoord2f(0.0f, 1.0f);      Gl.glVertex3f(0.0f, 1.8f, 0.4f);
            Gl.glTexCoord2f(1.0f, 1.0f);      Gl.glVertex3f(0.0f, 1.8f, 0.0f);
            Gl.glEnd();
            // TODO 2: Nacrtati zadnju bazu gornjeg krila koriscenjem GL_QUADS primitive
            //         temena su (u pravilnom redosledu): (0.1, 1.8, 0.0), (0.0, 1.8, 0.0), (0.0, -0.3, 0.0), (0.1, -0.3, 0.0).

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_KRILA]);

            Gl.glBegin(Gl.GL_QUADS);

            Gl.glNormal3fv(Lighting.FindFaceNormal(0.1f, 1.8f, 0.0f, 0.0f, 1.8f, 0.0f, 0.0f, -0.3f, 0.0f));

            Gl.glTexCoord2f(0.0f, 0.0f);      Gl.glVertex3f(0.1f, 1.8f, 0.0f);
            Gl.glTexCoord2f(0.0f, 1.0f);      Gl.glVertex3f(0.0f, 1.8f, 0.0f);
            Gl.glTexCoord2f(1.0f, 1.0f);      Gl.glVertex3f(0.0f, -0.3f, 0.0f);
            Gl.glTexCoord2f(1.0f, 0.0f);      Gl.glVertex3f(0.1f, -0.3f, 0.0f);
            Gl.glEnd();
            // TODO 2: Nacrtati prednju bazu gornjeg krila koriscenjem GL_QUAD_STRIP primitive
            //         temena su (u pravilnom redosledu): (0.0, 1.8, 0.4), (0.1, 1.8, 0.4), (0.0, 0.0, 1.5), (0.1, 0.0, 1.5),
            //                                            (0.0, -0.3, 1.1), (0.1, -0.3, 1.1).

            Gl.glBindTexture(Gl.GL_TEXTURE_2D, World.textures[(int)World.TextureObjects.TEKSTURA_KRILA]);

            Gl.glBegin(Gl.GL_QUAD_STRIP);

            Gl.glNormal3fv(Lighting.FindFaceNormal(0.0f, 1.8f, 0.4f, 0.1f, 1.8f, 0.4f, 0.0f, 0.0f, 1.5f));

            Gl.glTexCoord2f(0.0f, 0.0f);      Gl.glVertex3f(0.0f, 1.8f, 0.4f);
            Gl.glTexCoord2f(0.0f, 1.0f);      Gl.glVertex3f(0.1f, 1.8f, 0.4f);
            Gl.glTexCoord2f(1.0f, 1.0f);      Gl.glVertex3f(0.0f, 0.0f, 1.5f);


            Gl.glNormal3fv(Lighting.FindFaceNormal(0.1f, 0.0f, 1.5f, 0.0f, -0.3f, 1.1f, 0.1f, -0.3f, 1.1f));


            Gl.glTexCoord2f(0.0f, 0.0f);       Gl.glVertex3f(0.1f, 0.0f, 1.5f);
            Gl.glTexCoord2f(0.0f, 1.0f);       Gl.glVertex3f(0.0f, -0.3f, 1.1f);
            Gl.glTexCoord2f(1.0f, 1.0f);       Gl.glVertex3f(0.1f, -0.3f, 1.1f);
            Gl.glEnd();

            Gl.glPopMatrix();

            // TODO 2: Podesiti orijentaciju poligona lica da budu CCW
            Gl.glFrontFace(Gl.GL_CCW);

            // Laserski top
            Gl.glColor3ub(28, 28, 28);
            Gl.glTranslated(0, -0.1, 0.5);
            Gl.glScaled(1.5, 1.5, 1);
            DrawLaserCanon();
            Gl.glPopMatrix();
        }