• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Shuffy

            不斷的學習,不斷的思考,才能不斷的進步.Let's do better together!
            posts - 102, comments - 43, trackbacks - 0, articles - 19

                  本文對11篇文章進行修改,使用顯示列表來存儲渲染命令。

            顯示列表

            OpenGL provides a facility to create a preprocessed set of OpenGL commands called a display list. Creating a display list is a straight forward process. We just have to delimit the display list code with glNewList and glEndList. The display list is named by an integer and this name is used to call the list to be executed later on. Display lists are very useful for scenes which have lot of geometry that don't change in from frame to frame. If we have to rerender something that doesn't change it is not worth going through all the calculations required once again - it is better to store them somewhere in memory and reuse it. This is exactly what the display list lets us achieve. Thus if we are going to repeatedly execute the same sequence of OpenGL commands we can create and store a display list and then have this cached sequence of calls repeated with minimal overhead, since all the vertices, lighting calculations, textures and matrix operations are calculated only when the list is created and not when it is replayed. Only the results of the calculations end up being stored in display lists. This means we cannot modify the list once we create it.

            1,CY457OpenGLView類中加入一個變量來保存顯示列表名稱

                GLuint m_sceneList;

            2,創建顯示列表

            void CCY457OpenGLView::CreateSceneList()
            {
            //創建顯示列表
                m_sceneList = glGenLists(1);
                glNewList(m_sceneList, GL_COMPILE);
                    SetupLighting();
                    glEnable(GL_TEXTURE_2D);
                    glBindTexture(GL_TEXTURE_2D,m_Texture[
            0]);
                    
            //Front Face
                    glBegin(GL_POLYGON);
                        glTexCoord2f(
            0,0);
                        glVertex3f(
            -1.0f,-1.0f,0.0f);
                        glTexCoord2f(
            1,0);
                        glVertex3f( 
            1.0f,-1.0f,0.0f);
                        glTexCoord2f(
            1,1);
                        glVertex3f( 
            1.0f1.0f,0.0f);
                        glTexCoord2f(
            0,1);
                        glVertex3f(
            -1.0f1.0f,0.0f);
                    glEnd();
                    
            //Back Face
                    glBegin(GL_POLYGON);
                        glTexCoord2f(
            1,0);
                        glVertex3f(
            -1.0f,-1.0f,-1.0f);
                        glTexCoord2f(
            1,1);
                        glVertex3f(
            -1.0f1.0f,-1.0f);
                        glTexCoord2f(
            0,1);
                        glVertex3f( 
            1.0f1.0f,-1.0f);
                        glTexCoord2f(
            0,0);
                        glVertex3f( 
            1.0f,-1.0f,-1.0f);
                    glEnd();
                    glBindTexture(GL_TEXTURE_2D,m_Texture[
            1]);
                    
                    
            //Left Face
                    glBegin(GL_POLYGON);
                        glTexCoord2f(
            1,0);
                        glVertex3f(
            -1.0f,-1.0f0.0f);
                        glTexCoord2f(
            1,1);
                        glVertex3f(
            -1.0f1.0f0.0f);
                        glTexCoord2f(
            0,1);
                        glVertex3f(
            -1.0f1.0f,-1.0f);
                        glTexCoord2f(
            0,0);
                        glVertex3f(
            -1.0f,-1.0f,-1.0f);
                    glEnd();
                    
            //Right Face
                    glBegin(GL_POLYGON);
                        glTexCoord2f(
            0,0);
                        glVertex3f(
            1.0f,-1.0f0.0f);
                        glTexCoord2f(
            1,0);
                        glVertex3f(
            1.0f,-1.0f,-1.0f);
                        glTexCoord2f(
            1,1);
                        glVertex3f(
            1.0f1.0f,-1.0f);
                        glTexCoord2f(
            0,1);
                        glVertex3f(
            1.0f1.0f0.0f);
                    glEnd();
                    glBindTexture(GL_TEXTURE_2D,m_Texture[
            2]);
                    
            //Top Face
                    glBegin(GL_POLYGON);
                        glTexCoord2f(
            0,0);
                        glVertex3f(
            -1.0f1.0f,  0.0f);
                        glTexCoord2f(
            0,1);
                        glVertex3f( 
            1.0f1.0f,  0.0f);
                        glTexCoord2f(
            1,1);
                        glVertex3f( 
            1.0f1.0f-1.0f);
                        glTexCoord2f(
            1,0);
                        glVertex3f(
            -1.0f1.0f-1.0f);
                    glEnd();
                    
            //Botton Face
                    glBegin(GL_POLYGON);
                        glTexCoord2f(
            0,1);
                        glVertex3f(
            -1.0f-1.0f,  0.0f);
                        glTexCoord2f(
            0,0);
                        glVertex3f(
            -1.0f-1.0f-1.0f);
                        glTexCoord2f(
            1,0);
                        glVertex3f( 
            1.0f-1.0f-1.0f);
                        glTexCoord2f(
            1,1);
                        glVertex3f( 
            1.0f-1.0f,  0.0f);
                    glEnd();
                    glDisable(GL_TEXTURE_2D);
                glEndList();
            }

            3,在InitializeOpenGL函數中加入對上述函數的調用:

                //創建顯示列表
                CreateSceneList();

            4,修改RenderScene的繪制代碼

            void CCY457OpenGLView::RenderScene ()
            {
            //繪制函數
                    glTranslatef(0.0f,0.0f,-5.0f);
                    glRotatef(m_xRot,
            1.0f,0.0f,0.0f);
                    glRotatef(m_yRot,
            0.0f,1.0f,0.0f);
                    glCallList(m_sceneList);
            }

             

            作者:洞庭散人

            出處:http://phinecos.cnblogs.com/    

            本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
            原文鏈接:http://www.cnblogs.com/phinecos/archive/2008/11/06/1328204.html
            青青久久精品国产免费看| 人妻无码αv中文字幕久久| 久久久久久久久久久免费精品| 国产成人综合久久久久久| 伊人久久国产免费观看视频| 亚洲精品国精品久久99热一| 国产精品伦理久久久久久| 久久久久久精品免费免费自慰| 久久国产精品国产自线拍免费| 欧美亚洲日本久久精品| 97久久精品国产精品青草| 久久婷婷人人澡人人| 久久久精品午夜免费不卡| 久久精品国产99国产精品导航| 9191精品国产免费久久| 亚洲精品国产美女久久久| 亚洲国产成人精品无码久久久久久综合| 久久精品国产亚洲av麻豆色欲| 午夜精品久久久久久影视777| 91久久精品国产91性色也| 久久99精品久久久久婷婷| 亚洲精品无码久久久久久| 久久人与动人物a级毛片| 亚洲欧洲精品成人久久曰影片| 精品久久久久久无码国产| 久久99国产精品一区二区| 99re这里只有精品热久久| 无码精品久久久天天影视| 浪潮AV色综合久久天堂| 久久精品亚洲一区二区三区浴池| 久久精品久久久久观看99水蜜桃| 久久亚洲sm情趣捆绑调教| 最新久久免费视频| 狠狠色婷婷久久综合频道日韩| 欧美日韩精品久久久久| 中文字幕久久精品| 综合网日日天干夜夜久久| 色综合久久久久综合体桃花网| 日韩久久久久久中文人妻| a高清免费毛片久久| 大美女久久久久久j久久|